diff --git a/javascript-engine/Cargo.toml b/javascript-engine/Cargo.toml
index 63671b0..ee3cd4a 100644
--- a/javascript-engine/Cargo.toml
+++ b/javascript-engine/Cargo.toml
@@ -9,9 +9,10 @@ edition = "2021"
crate-type = ['cdylib']
[dependencies]
-wit-bindgen-core = { path = '../wit-bindgen/crates/bindgen-core' }
-wit-bindgen-guest-rust = { path = '../wit-bindgen/crates/guest-rust' }
-boa_engine = "0.16.0"
-getrandom = { version = "0.2.8", features = ["js"] }
+boa_engine = { version = "0.16.0", path = "external/boa/boa_engine"}
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
+
+[patch.crates-io]
+iana-time-zone = { path = "external/iana-time-zone" }
+getrandom = { path = "external/getrandom" }
diff --git a/javascript-engine/external/boa/.config/nextest.toml b/javascript-engine/external/boa/.config/nextest.toml
new file mode 100644
index 0000000..18e4061
--- /dev/null
+++ b/javascript-engine/external/boa/.config/nextest.toml
@@ -0,0 +1,3 @@
+[profile.ci]
+# Don't fail fast in CI to run the full test suite.
+fail-fast = false
diff --git a/javascript-engine/external/boa/.editorconfig b/javascript-engine/external/boa/.editorconfig
new file mode 100644
index 0000000..4e2d43c
--- /dev/null
+++ b/javascript-engine/external/boa/.editorconfig
@@ -0,0 +1,11 @@
+root = true
+
+[{Makefile,**.mk}]
+# Use tabs for indentation (Makefiles require tabs)
+indent_style = tab
+
+[*]
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/javascript-engine/external/boa/.gitattributes b/javascript-engine/external/boa/.gitattributes
new file mode 100644
index 0000000..951b3ca
--- /dev/null
+++ b/javascript-engine/external/boa/.gitattributes
@@ -0,0 +1,30 @@
+# Handle line endings automatically for files detected as text
+# and leave all files detected as binary untouched.
+* text=auto
+
+#
+# The above will handle all files NOT found below
+#
+# These files are text and should be normalized (Convert crlf => lf)
+*.css eol=lf
+*.htm eol=lf
+*.html eol=lf
+*.js eol=lf
+*.json eol=lf
+*.sh eol=lf
+*.txt eol=lf
+*.yml eol=lf
+*.rs eol=lf
+*.toml eol=lf
+*.lock eol=lf
+*.md eol=lf
+*.svg eol=lf
+
+# These files are binary and should be left untouched
+# (binary is a macro for -text -diff)
+*.gif binary
+*.ico binary
+*.jar binary
+*.jpg binary
+*.jpeg binary
+*.png binary
diff --git a/javascript-engine/external/boa/.github/FUNDING.yml b/javascript-engine/external/boa/.github/FUNDING.yml
new file mode 100644
index 0000000..1cb1d55
--- /dev/null
+++ b/javascript-engine/external/boa/.github/FUNDING.yml
@@ -0,0 +1 @@
+open_collective: boa
diff --git a/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/bug_report.md b/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..6e24984
--- /dev/null
+++ b/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,52 @@
+---
+name: "\U0001F41B Bug report"
+about: Create a report to help us improve
+title: ""
+labels: bug
+assignees: ""
+---
+
+
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+
+
+**To Reproduce**
+Steps to reproduce the issue, or JavaScript code that causes this failure.
+
+
+
+**Expected behavior**
+Explain what you expected to happen, and what is happening instead.
+
+
+
+**Build environment (please complete the following information):**
+
+- OS: [e.g. Fedora Linux]
+- Version: [e.g. 32]
+- Target triple: [e.g. x86_64-unknown-linux-gnu]
+- Rustc version: [e.g. rustc 1.43.0 (4fb7144ed 2020-04-20), running `rustc -V`]
+
+**Additional context**
+Add any other context about the problem here.
+
+
diff --git a/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/config.yml b/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..d1962be
--- /dev/null
+++ b/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Discord channel
+ url: https://discord.gg/tUFFk9Y
+ about: Please ask and answer questions here.
diff --git a/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/custom.md b/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/custom.md
new file mode 100644
index 0000000..56ac092
--- /dev/null
+++ b/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/custom.md
@@ -0,0 +1,13 @@
+---
+name: Custom
+about: Open an issue in the repo that is neither a bug or a feature, such a new idea
+title: ""
+labels: ""
+assignees: ""
+---
+
+
+
+E.g.: I think we should improve the way the JavaScript interpreter works by...
diff --git a/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/feature_request.md b/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..7687b7b
--- /dev/null
+++ b/javascript-engine/external/boa/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,43 @@
+---
+name: "\U0001F680 Feature request"
+about: Suggest a new ECMAScript feature to be implemented, or a new capability of the engine.
+title: ""
+labels: enhancement
+assignees: ""
+---
+
+
+
+**ECMASCript feature**
+Explain the ECMAScript feature that you'd like to see implemented.
+
+
+
+**Example code**
+Give a code example that should work after the implementation of this feature.
+
+
diff --git a/javascript-engine/external/boa/.github/PULL_REQUEST_TEMPLATE.md b/javascript-engine/external/boa/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..3ac43fb
--- /dev/null
+++ b/javascript-engine/external/boa/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,12 @@
+
+
+This Pull Request fixes/closes #{issue_num}.
+
+It changes the following:
+
+-
+-
+-
diff --git a/javascript-engine/external/boa/.github/codecov.yml b/javascript-engine/external/boa/.github/codecov.yml
new file mode 100644
index 0000000..e377752
--- /dev/null
+++ b/javascript-engine/external/boa/.github/codecov.yml
@@ -0,0 +1,10 @@
+github_checks:
+ annotations: false
+
+coverage:
+ status:
+ project:
+ default:
+ threshold: 5% # allow 5% coverage variance
+
+ patch: off
diff --git a/javascript-engine/external/boa/.github/dependabot.yml b/javascript-engine/external/boa/.github/dependabot.yml
new file mode 100644
index 0000000..9397dd8
--- /dev/null
+++ b/javascript-engine/external/boa/.github/dependabot.yml
@@ -0,0 +1,50 @@
+version: 2
+updates:
+ - package-ecosystem: npm
+ directory: /
+ schedule:
+ interval: daily
+ - package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /boa_cli/
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /boa_engine/
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /boa_gc/
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /boa_interner/
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /boa_profiler/
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /boa_tester/
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /boa_unicode/
+ schedule:
+ interval: daily
+ - package-ecosystem: cargo
+ directory: /boa_wasm/
+ schedule:
+ interval: daily
+ - package-ecosystem: gitsubmodule
+ directory: /
+ schedule:
+ interval: weekly
diff --git a/javascript-engine/external/boa/.github/release.yml b/javascript-engine/external/boa/.github/release.yml
new file mode 100644
index 0000000..20e969d
--- /dev/null
+++ b/javascript-engine/external/boa/.github/release.yml
@@ -0,0 +1,16 @@
+# .github/release.yml
+
+changelog:
+ exclude:
+ authors:
+ - dependabot
+ categories:
+ - title: Feature Enhancements
+ labels:
+ - enhancement
+ - title: Bug Fixes
+ labels:
+ - bug
+ - title: Internal Improvements
+ labels:
+ - Internal
diff --git a/javascript-engine/external/boa/.github/workflows/master.yml b/javascript-engine/external/boa/.github/workflows/master.yml
new file mode 100644
index 0000000..e0b328c
--- /dev/null
+++ b/javascript-engine/external/boa/.github/workflows/master.yml
@@ -0,0 +1,54 @@
+name: Main workflows
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ benchmark:
+ if: ${{ github.actor != 'dependabot[bot]' }}
+ name: Upload docs and run benchmarks
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions-rs/toolchain@v1.0.7
+ with:
+ toolchain: stable
+ override: true
+ profile: minimal
+ - name: Cache cargo
+ uses: actions/cache@v3
+ with:
+ path: |
+ target
+ !target/doc_upload
+ ~/.cargo/git
+ ~/.cargo/registry
+ key: ${{ runner.os }}-cargo-doc-bench-${{ hashFiles('**/Cargo.lock') }}
+ - name: Generate documentation
+ uses: actions-rs/cargo@v1
+ with:
+ command: doc
+ args: -v --document-private-items --all-features --workspace --no-deps --exclude boa_examples
+ - run: echo "" > target/doc/index.html
+ - run: |
+ if [ -d target/doc_upload ]; then rm -rf target/doc_upload; fi
+ mkdir target/doc_upload && mv target/doc target/doc_upload/doc
+ - name: Upload documentation
+ uses: crazy-max/ghaction-github-pages@v3.1.0
+ with:
+ target_branch: gh-pages
+ keep_history: true
+ build_dir: target/doc_upload
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Run benchmark
+ run: cargo bench -p boa_engine -- --output-format bencher | tee output.txt
+ - name: Store benchmark result
+ uses: benchmark-action/github-action-benchmark@v1.15.0
+ with:
+ name: Boa Benchmarks
+ tool: "cargo"
+ output-file-path: output.txt
+ auto-push: true
+ github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/javascript-engine/external/boa/.github/workflows/pull_request.yml b/javascript-engine/external/boa/.github/workflows/pull_request.yml
new file mode 100644
index 0000000..ff10cc1
--- /dev/null
+++ b/javascript-engine/external/boa/.github/workflows/pull_request.yml
@@ -0,0 +1,34 @@
+name: Benchmarks
+
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ runBenchmark:
+ if: contains(github.event.pull_request.labels.*.name, 'run-benchmark')
+ name: run benchmark
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - uses: actions-rs/toolchain@v1.0.7
+ with:
+ toolchain: stable
+ override: true
+ profile: minimal
+ - name: Cache cargo
+ uses: actions/cache@v3
+ with:
+ path: |
+ target
+ ~/.cargo/git
+ ~/.cargo/registry
+ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+ - uses: boa-dev/criterion-compare-action@v3.2.4
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ branchName: ${{ github.base_ref }}
+ cwd: ./boa_engine
diff --git a/javascript-engine/external/boa/.github/workflows/release.yml b/javascript-engine/external/boa/.github/workflows/release.yml
new file mode 100644
index 0000000..bf19966
--- /dev/null
+++ b/javascript-engine/external/boa/.github/workflows/release.yml
@@ -0,0 +1,62 @@
+name: Publish Release
+on:
+ release:
+ types: [published]
+
+jobs:
+ publish:
+ name: publish
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Install Rust toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ profile: minimal
+ override: true
+
+ - name: Install cargo-workspaces
+ uses: actions-rs/install@v0.1
+ with:
+ crate: cargo-workspaces
+
+ - name: Release
+ env:
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
+ PATCH: ${{ github.run_number }}
+ shell: bash
+ run: |
+ git config --global user.email "runner@gha.local"
+ git config --global user.name "Github Action"
+ cargo workspaces publish --from-git --yes minor
+ doc-publish:
+ # needs: publish
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Install wasm-pack
+ run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
+ - uses: actions/setup-node@v3
+ with:
+ node-version: "16"
+ - run: npm ci
+ - name: Cache npm build
+ uses: actions/cache@v3
+ with:
+ path: |
+ node_modules
+ target
+ boa_wasm/pkg
+ ~/.cargo/git
+ ~/.cargo/registry
+ key: ${{ runner.os }}-npm-build-target-${{ hashFiles('**/package-lock.json') }}
+ - run: npm run build:prod
+ - name: Deploy
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ publish_dir: ./dist
+ destination_dir: playground
+ github_token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/javascript-engine/external/boa/.github/workflows/rust.yml b/javascript-engine/external/boa/.github/workflows/rust.yml
new file mode 100644
index 0000000..6b7195d
--- /dev/null
+++ b/javascript-engine/external/boa/.github/workflows/rust.yml
@@ -0,0 +1,88 @@
+name: Continuous integration
+
+on:
+ pull_request:
+ branches:
+ - main
+ push:
+ branches:
+ - main
+ - staging # bors
+ - trying # bors
+
+jobs:
+ coverage:
+ name: Coverage
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions-rs/toolchain@v1.0.7
+ with:
+ toolchain: stable
+ override: true
+ profile: minimal
+ - uses: Swatinem/rust-cache@v2
+ with:
+ key: tarpaulin
+ - name: Run cargo-tarpaulin
+ uses: actions-rs/tarpaulin@v0.1
+ with:
+ args: --features intl --ignore-tests --engine llvm
+ - name: Upload to codecov.io
+ uses: codecov/codecov-action@v3
+
+ tests:
+ name: Build and Test
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os:
+ - macos-latest
+ - windows-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions-rs/toolchain@v1.0.7
+ with:
+ toolchain: stable
+ override: true
+ profile: minimal
+ - uses: Swatinem/rust-cache@v2
+ - name: Build tests
+ run: cargo test --no-run --profile ci
+ # this order is faster according to rust-analyzer
+ - name: Build
+ run: cargo build --all-targets --quiet --profile ci
+ - name: Install latest nextest
+ uses: taiki-e/install-action@nextest
+ - name: Test with nextest
+ run: cargo nextest run --profile ci --cargo-profile ci --features intl
+
+ misc:
+ name: Misc
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions-rs/toolchain@v1.0.7
+ with:
+ toolchain: stable
+ override: true
+ profile: minimal
+ components: rustfmt, clippy
+ - uses: Swatinem/rust-cache@v2
+ with:
+ key: misc
+ - name: Format (rustfmt)
+ run: cargo fmt --all --check
+ - name: Lint (All features)
+ run: cargo clippy --all-features --all-targets
+ - name: Lint (No features)
+ run: cargo clippy --no-default-features --all-targets
+ - name: Generate documentation
+ run: cargo doc -v --document-private-items --all-features
+ - name: Build
+ run: cargo build --all-targets --quiet --profile ci
+ - run: cd boa_examples
+ - name: Build examples
+ run: cargo build --quiet --profile ci
+ - name: Run example classes
+ run: cargo run --bin classes --profile ci
diff --git a/javascript-engine/external/boa/.github/workflows/security_audit.yml b/javascript-engine/external/boa/.github/workflows/security_audit.yml
new file mode 100644
index 0000000..d54cb3c
--- /dev/null
+++ b/javascript-engine/external/boa/.github/workflows/security_audit.yml
@@ -0,0 +1,12 @@
+name: Security audit
+on:
+ schedule:
+ - cron: "0 0 * * *"
+jobs:
+ audit:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions-rs/audit-check@v1.2.0
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/javascript-engine/external/boa/.github/workflows/test262.yml b/javascript-engine/external/boa/.github/workflows/test262.yml
new file mode 100644
index 0000000..84f8eb5
--- /dev/null
+++ b/javascript-engine/external/boa/.github/workflows/test262.yml
@@ -0,0 +1,118 @@
+name: EcmaScript official test suite (test262)
+on:
+ push:
+ branches:
+ - main
+ tags:
+ - v*
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ run_test262:
+ name: Run the test262 test suite
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v3
+ with:
+ submodules: true
+ path: boa
+ - name: Install the Rust toolchain
+ uses: actions-rs/toolchain@v1.0.7
+ with:
+ toolchain: stable
+ override: true
+ profile: minimal
+ - name: Cache cargo
+ uses: actions/cache@v3
+ with:
+ path: |
+ target
+ ~/.cargo/git
+ ~/.cargo/registry
+ key: ${{ runner.os }}-cargo-test262-${{ hashFiles('**/Cargo.lock') }}
+
+ # Run the test suite and upload the results
+ - name: Checkout GitHub pages
+ uses: actions/checkout@v3
+ with:
+ ref: gh-pages
+ path: gh-pages
+
+ - name: Run the test262 test suite
+ run: |
+ cd boa
+ mkdir ../results
+ cargo run --release --bin boa_tester -- run -v -o ../results/test262
+ cd ..
+
+ # Run the results comparison
+ - name: Compare results
+ if: github.event_name == 'pull_request'
+ id: compare-non-vm
+ shell: bash
+ run: |
+ cd boa
+ comment="$(./target/release/boa_tester compare ../gh-pages/test262/refs/heads/main/latest.json ../results/test262/pull/latest.json -m)"
+ echo "comment<> $GITHUB_OUTPUT
+ echo "$comment" >> $GITHUB_OUTPUT
+ echo "EOF" >> $GITHUB_OUTPUT
+
+ - name: Get the PR number
+ if: github.event_name == 'pull_request'
+ id: pr-number
+ uses: kkak10/pr-number-action@v1.3
+
+ - name: Find Previous Comment
+ if: github.event_name == 'pull_request'
+ uses: peter-evans/find-comment@v2
+ id: previous-comment
+ with:
+ issue-number: ${{ steps.pr-number.outputs.pr }}
+ body-includes: Test262 conformance changes
+
+ - name: Update comment
+ if: github.event_name == 'pull_request' && steps.previous-comment.outputs.comment-id
+ uses: peter-evans/create-or-update-comment@v2
+ continue-on-error: true
+ with:
+ comment-id: ${{ steps.previous-comment.outputs.comment-id }}
+ body: |
+ ### Test262 conformance changes
+
+ ${{ steps.compare-non-vm.outputs.comment }}
+ ${{ steps.compare-vm.outputs.comment }}
+ edit-mode: replace
+
+ - name: Write a new comment
+ if: github.event_name == 'pull_request' && !steps.previous-comment.outputs.comment-id
+ uses: peter-evans/create-or-update-comment@v2
+ continue-on-error: true
+ with:
+ issue-number: ${{ steps.pr-number.outputs.pr }}
+ body: |
+ ### Test262 conformance changes
+
+ ${{ steps.compare-non-vm.outputs.comment }}
+ ${{ steps.compare-vm.outputs.comment }}
+
+ # Commit changes to GitHub pages.
+ - name: Commit files
+ if: github.event_name == 'push'
+ run: |
+ cp -r ./results/test262/* ./gh-pages/test262/
+ cd gh-pages
+ git config --local user.email "action@github.com"
+ git config --local user.name "GitHub Action"
+ git add test262
+ git commit -m "Add new test262 results" -a
+ cd ..
+ - name: Upload results
+ if: github.event_name == 'push'
+ uses: ad-m/github-push-action@v0.6.0
+ with:
+ directory: gh-pages
+ branch: gh-pages
+ github_token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/javascript-engine/external/boa/.github/workflows/webassembly.yml b/javascript-engine/external/boa/.github/workflows/webassembly.yml
new file mode 100644
index 0000000..6f2c769
--- /dev/null
+++ b/javascript-engine/external/boa/.github/workflows/webassembly.yml
@@ -0,0 +1,49 @@
+on:
+ pull_request:
+ branches:
+ - main
+ push:
+ branches:
+ - main
+
+name: Webassembly demo
+
+jobs:
+ check_style:
+ name: Check webassembly demo style
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ - name: Check code formatting
+ run: npx prettier --check .
+
+ build:
+ name: Build webassembly demo
+ runs-on: ubuntu-latest
+ env:
+ WASM_PACK_PATH: ~/.cargo/bin/wasm-pack
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions-rs/toolchain@v1.0.7
+ with:
+ toolchain: stable
+ override: true
+ profile: minimal
+ - name: Install wasm-pack
+ run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
+ - name: Cache npm build
+ uses: actions/cache@v3
+ with:
+ path: |
+ node_modules
+ target
+ ~/.cargo/git
+ ~/.cargo/registry
+ boa_wasm/pkg
+ key: ${{ runner.os }}-npm-build-target-${{ hashFiles('**/package-lock.json') }}
+ - uses: actions/setup-node@v3
+ with:
+ node-version: "16"
+ - run: npm ci
+ - run: npm run build
diff --git a/javascript-engine/external/boa/.gitignore b/javascript-engine/external/boa/.gitignore
new file mode 100644
index 0000000..56396d4
--- /dev/null
+++ b/javascript-engine/external/boa/.gitignore
@@ -0,0 +1,34 @@
+# IDE
+.idea/
+*.iml
+
+# Vim
+*.*.swp
+*.*.swo
+
+# Build
+target
+dist
+**/*.rs.bk
+node_modules
+.DS_Store
+yarn-error.log
+.vscode/settings.json
+
+# tests/js/test.js is used for testing changes locally
+tests/js/test.js
+.boa_history
+
+# Profiling
+*.string_data
+*.string_index
+*.events
+chrome_profiler.json
+*.mm_profdata
+
+# Logs
+*.log
+
+# Yarn
+.yarn
+.yarnrc.yml
diff --git a/javascript-engine/external/boa/.gitmodules b/javascript-engine/external/boa/.gitmodules
new file mode 100644
index 0000000..c41542f
--- /dev/null
+++ b/javascript-engine/external/boa/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "test262"]
+ path = test262
+ url = https://github.com/tc39/test262.git
diff --git a/javascript-engine/external/boa/.prettierignore b/javascript-engine/external/boa/.prettierignore
new file mode 100644
index 0000000..ce0118b
--- /dev/null
+++ b/javascript-engine/external/boa/.prettierignore
@@ -0,0 +1,10 @@
+# Ignore artifacts:
+*.rs
+target
+node_modules
+boa_engine/benches/bench_scripts/mini_js.js
+boa_engine/benches/bench_scripts/clean_js.js
+boa_wasm/pkg
+dist
+test262
+tests/js/test.js
diff --git a/javascript-engine/external/boa/.vscode/launch.json b/javascript-engine/external/boa/.vscode/launch.json
new file mode 100644
index 0000000..ce5770f
--- /dev/null
+++ b/javascript-engine/external/boa/.vscode/launch.json
@@ -0,0 +1,35 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "lldb",
+ "request": "launch",
+ "name": "Launch",
+ "windows": {
+ "program": "${workspaceFolder}/target/debug/boa.exe"
+ },
+ "program": "${workspaceFolder}/target/debug/boa",
+ "args": ["${workspaceFolder}/tests/js/test.js"],
+ "sourceLanguages": ["rust"]
+ },
+ {
+ "type": "lldb",
+ "request": "launch",
+ "name": "Launch (VM)",
+ "cargo": {
+ "args": [
+ "run",
+ "--manifest-path",
+ "./boa_cli/Cargo.toml",
+ "--features",
+ "vm"
+ ]
+ },
+ "args": ["-t", "${workspaceFolder}/tests/js/test.js"],
+ "sourceLanguages": ["rust"]
+ }
+ ]
+}
diff --git a/javascript-engine/external/boa/.vscode/tasks.json b/javascript-engine/external/boa/.vscode/tasks.json
new file mode 100644
index 0000000..018fc7e
--- /dev/null
+++ b/javascript-engine/external/boa/.vscode/tasks.json
@@ -0,0 +1,90 @@
+{
+ // See https://go.microsoft.com/fwlink/?LinkId=733558
+ // for the documentation about the tasks.json format
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "type": "process",
+ "label": "Cargo Run",
+ "command": "cargo",
+ "args": ["run", "--bin", "boa", "./tests/js/test.js"],
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ },
+ "presentation": {
+ "clear": true
+ },
+ "options": {
+ "env": {
+ "RUST_BACKTRACE": "1"
+ }
+ },
+ "problemMatcher": []
+ },
+ {
+ "type": "process",
+ "label": "Cargo Run (Profiler)",
+ "command": "cargo",
+ "args": [
+ "run",
+ "--features",
+ "boa_engine/profiler",
+ "../tests/js/test.js"
+ ],
+ "group": "build",
+ "options": {
+ "env": {
+ "RUST_BACKTRACE": "full"
+ },
+ "cwd": "${workspaceFolder}/boa_cli"
+ },
+ "presentation": {
+ "clear": true
+ },
+ "problemMatcher": []
+ },
+ {
+ "type": "process",
+ "label": "Run with VM trace",
+ "command": "cargo",
+ "args": ["run", "--bin", "boa", "--", "-t", "./tests/js/test.js"],
+ "group": "build",
+ "presentation": {
+ "clear": true
+ },
+ "problemMatcher": []
+ },
+ {
+ "type": "process",
+ "label": "Get AST",
+ "command": "cargo",
+ "args": ["run", "--bin", "boa", "--", "-a=Debug", "./tests/js/test.js"],
+ "group": "build",
+ "presentation": {
+ "clear": true
+ },
+ "problemMatcher": []
+ },
+ {
+ "type": "process",
+ "label": "Cargo Test",
+ "command": "cargo",
+ "args": ["test"],
+ "group": {
+ "kind": "test",
+ "isDefault": true
+ },
+ "presentation": {
+ "clear": true
+ }
+ },
+ {
+ "type": "process",
+ "label": "Cargo Test Build",
+ "command": "cargo",
+ "args": ["test", "--no-run"],
+ "group": "build"
+ }
+ ]
+}
diff --git a/javascript-engine/external/boa/CHANGELOG.md b/javascript-engine/external/boa/CHANGELOG.md
new file mode 100644
index 0000000..c54af09
--- /dev/null
+++ b/javascript-engine/external/boa/CHANGELOG.md
@@ -0,0 +1,1268 @@
+# CHANGELOG
+
+## What's Changed
+
+# [0.16.0 (2022-09-25)](https://github.com/boa-dev/boa/compare/v0.15...v0.16)
+
+### Feature Enhancements
+
+- Implement getter and setter of `Object.prototype.__proto__` by @CYBAI in [#2110](https://github.com/boa-dev/boa/pull/2110)
+- Execution stack & promises by @Razican in [#2107](https://github.com/boa-dev/boa/pull/2107)
+- Add the `[[Done]]` field to iterators by @Razican in [#2125](https://github.com/boa-dev/boa/pull/2125)
+- Fix for in/of loop initializer environment by @raskad in [#2135](https://github.com/boa-dev/boa/pull/2135)
+- Implement `Promise.all` by @raskad in [#2140](https://github.com/boa-dev/boa/pull/2140)
+- Implement `Promise.any` by @raskad in [#2145](https://github.com/boa-dev/boa/pull/2145)
+- Implement `Promise.allSettled` by @raskad in [#2146](https://github.com/boa-dev/boa/pull/2146)
+- Implement `super` expressions by @raskad in [#2116](https://github.com/boa-dev/boa/pull/2116)
+- Implement `async function` and `await` by @raskad in [#2158](https://github.com/boa-dev/boa/pull/2158)
+- Implementation of `JsMap` Wrapper by @nekevss in [#2115](https://github.com/boa-dev/boa/pull/2115)
+- Safe wrapper for `JsSet` by @anuvratsingh in [#2162](https://github.com/boa-dev/boa/pull/2162)
+- Implement `JsArrayBuffer` by @HalidOdat in [#2170](https://github.com/boa-dev/boa/pull/2170)
+- Implement arrow function parsing based on `CoverParenthesizedExpressionAndArrowParameterList` by @raskad in [#2171](https://github.com/boa-dev/boa/pull/2171)
+- Implement Generator Function Constructor by @raskad in [#2174](https://github.com/boa-dev/boa/pull/2174)
+- Parse class private async generator methods by @raskad in [#2220](https://github.com/boa-dev/boa/pull/2220)
+- Implement Async Generators by @raskad in [#2200](https://github.com/boa-dev/boa/pull/2200)
+- Add field accessors to destructing assignment by @raskad in [#2213](https://github.com/boa-dev/boa/pull/2213)
+- Added a bit more integer operation consistency to ByteDataBlock creation by @Razican in [#2272](https://github.com/boa-dev/boa/pull/2272)
+- Implement Async-from-Sync Iterator Objects by @raskad in [#2234](https://github.com/boa-dev/boa/pull/2234)
+- Add URI encoding and decoding functions by @Razican in [#2267](https://github.com/boa-dev/boa/pull/2267)
+- Implement `for await...of` loops by @raskad in [#2286](https://github.com/boa-dev/boa/pull/2286)
+
+### Bug Fixes
+
+- Fix `eval` attributes by @raskad in [#2130](https://github.com/boa-dev/boa/pull/2130)
+- Fix `this` in function calls by @raskad in [#2153](https://github.com/boa-dev/boa/pull/2153)
+- Fix remaining `Promise` bugs by @raskad in [#2156](https://github.com/boa-dev/boa/pull/2156)
+- Fix length/index in `32bit` architectures by @HalidOdat in [#2196](https://github.com/boa-dev/boa/pull/2196)
+- Fix `yield` expression to end on line terminator by @raskad in [#2232](https://github.com/boa-dev/boa/pull/2232)
+- Fix spread arguments in function calls by @raskad in [#2216](https://github.com/boa-dev/boa/pull/2216)
+- Fix `arguments` object iterator function by @raskad in [#2231](https://github.com/boa-dev/boa/pull/2231)
+- check history file exist if not create it by @udhaykumarbala in [#2245](https://github.com/boa-dev/boa/pull/2245)
+- Do not auto-insert semicolon in `VariableDeclarationList` by @tunz in [#2266](https://github.com/boa-dev/boa/pull/2266)
+- Fix property access of call expression by @tunz in [#2273](https://github.com/boa-dev/boa/pull/2273)
+- fix computed property methods can call super methods by @creampnx-x in [#2274](https://github.com/boa-dev/boa/pull/2274)
+- Fix regex literal `/[/]/` by @tunz in [#2277](https://github.com/boa-dev/boa/pull/2277)
+- Fixed assignment expression parsing by @Razican in [#2268](https://github.com/boa-dev/boa/pull/2268)
+- Fix labelled block statement by @creampnx-x in [#2285](https://github.com/boa-dev/boa/pull/2285)
+- Implement missing global object internal methods by @raskad in [#2287](https://github.com/boa-dev/boa/pull/2287)
+
+### Internal Improvements
+
+- Fix spec links for some object operation methods by @CYBAI in [#2111](https://github.com/boa-dev/boa/pull/2111)
+- Only run benchmarks on PRs when a label is set by @raskad in [#2114](https://github.com/boa-dev/boa/pull/2114)
+- Refactor `construct` and `PromiseCapability` to preserve `JsObject` invariants by @jedel1043 in [#2136](https://github.com/boa-dev/boa/pull/2136)
+- Remove `string-interner` dependency and implement custom string `Interner` by @jedel1043 in [#2147](https://github.com/boa-dev/boa/pull/2147)
+- Fix clippy 1.62.0 lints by @raskad in [#2154](https://github.com/boa-dev/boa/pull/2154)
+- Store call frames in `Vec` instead of singly-linked list by @HalidOdat in [#2164](https://github.com/boa-dev/boa/pull/2164)
+- Dense/Packed JavaScript arrays by @HalidOdat in [#2167](https://github.com/boa-dev/boa/pull/2167)
+- Fix Rust 1.63 clippy lints by @raskad in [#2230](https://github.com/boa-dev/boa/pull/2230)
+- Removed some `unsafe_empty_trace!()` calls to improve performance by @Razican in [#2233](https://github.com/boa-dev/boa/pull/2233)
+- Add integer type to fast path of `to_property_key` by @tunz in [#2261](https://github.com/boa-dev/boa/pull/2261)
+
+**Full Changelog**: https://github.com/boa-dev/boa/compare/v0.14...v0.15
+
+# [0.15.0 (2022-06-10)](https://github.com/boa-dev/boa/compare/v0.14...v0.15)
+
+### Feature Enhancements
+
+- Deploy playground to custom destination dir by @jedel1043 in [#1943](https://github.com/boa-dev/boa/pull/1943)
+- add README for crates.io publish by @superhawk610 in [#1952](https://github.com/boa-dev/boa/pull/1952)
+- migrated to clap 3 by @manthanabc in [#1957](https://github.com/boa-dev/boa/pull/1957)
+- Implement unscopables for Array.prototype by @NorbertGarfield in [#1963](https://github.com/boa-dev/boa/pull/1963)
+- Retrieve feature-based results for Test262 runs by @NorbertGarfield in [#1980](https://github.com/boa-dev/boa/pull/1980)
+- Added better error handling for the Boa tester by @Razican in [#1984](https://github.com/boa-dev/boa/pull/1984)
+- Add From for JsValue by @lastmjs in [#1990](https://github.com/boa-dev/boa/pull/1990)
+- Implement Classes by @raskad in [#1976](https://github.com/boa-dev/boa/pull/1976)
+- Allow `PropertyName`s in `BindingProperty`in `ObjectBindingPattern` by @raskad in [#2022](https://github.com/boa-dev/boa/pull/2022)
+- Allow `Initializer` after `ArrayBindingPattern` in `FormalParameter` by @raskad in [#2002](https://github.com/boa-dev/boa/pull/2002)
+- Allow unicode escaped characters in identifiers that are keywords by @raskad in [#2021](https://github.com/boa-dev/boa/pull/2021)
+- Feature `JsTypedArray`s by @HalidOdat in [#2003](https://github.com/boa-dev/boa/pull/2003)
+- Allow creating object with true/false property names by @lupd in [#2028](https://github.com/boa-dev/boa/pull/2028)
+- Implement `get RegExp.prototype.hasIndices` by @HalidOdat in [#2031](https://github.com/boa-dev/boa/pull/2031)
+- Partial implementation for Intl.DateTimeFormat by @NorbertGarfield in [#2025](https://github.com/boa-dev/boa/pull/2025)
+- Allow `let` as variable declaration name by @raskad in [#2044](https://github.com/boa-dev/boa/pull/2044)
+- cargo workspaces fixes #2001 by @jasonwilliams in [#2026](https://github.com/boa-dev/boa/pull/2026)
+- Move redeclaration errors to parser by @raskad in [#2027](https://github.com/boa-dev/boa/pull/2027)
+- Feature `JsFunction` by @HalidOdat in [#2015](https://github.com/boa-dev/boa/pull/2015)
+- Improve `JsString` performance by @YXL76 in [#2042](https://github.com/boa-dev/boa/pull/2042)
+- Implement ResolveLocale helper by @NorbertGarfield in [#2036](https://github.com/boa-dev/boa/pull/2036)
+- Refactor `IdentifierReference` parsing by @raskad in [#2055](https://github.com/boa-dev/boa/pull/2055)
+- Implement the global `eval()` function by @raskad in [#2041](https://github.com/boa-dev/boa/pull/2041)
+- DateTimeFormat helpers by @NorbertGarfield in [#2064](https://github.com/boa-dev/boa/pull/2064)
+- Create `Date` standard constructor by @jedel1043 in [#2079](https://github.com/boa-dev/boa/pull/2079)
+- Implement `ProxyBuilder` by @jedel1043 in [#2076](https://github.com/boa-dev/boa/pull/2076)
+- Remove `strict` flag from `Context` by @raskad in [#2069](https://github.com/boa-dev/boa/pull/2069)
+- Integrate ICU4X into `Intl` module by @jedel1043 in [#2083](https://github.com/boa-dev/boa/pull/2083)
+- Implement `Function` constructor by @raskad in [#2090](https://github.com/boa-dev/boa/pull/2090)
+- Parse private generator methods in classes by @raskad in [#2092](https://github.com/boa-dev/boa/pull/2092)
+
+### Bug Fixes
+
+- Fix link to the playground by @raskad in [#1947](https://github.com/boa-dev/boa/pull/1947)
+- convert inner datetime to local in `to_date_string` by @superhawk610 in [#1953](https://github.com/boa-dev/boa/pull/1953)
+- Fix panic on AST dump in JSON format by @kilotaras in [#1959](https://github.com/boa-dev/boa/pull/1959)
+- Fix panic in do while by @pdogr in [#1968](https://github.com/boa-dev/boa/pull/1968)
+- Support numbers with multiple leading zeroes by @lupd in [#1979](https://github.com/boa-dev/boa/pull/1979)
+- Fix length properties on array methods by @lupd in [#1983](https://github.com/boa-dev/boa/pull/1983)
+- Allow boolean/null as property identifier by dot operator assignment by @lupd in [#1985](https://github.com/boa-dev/boa/pull/1985)
+- fix(vm): off-by-one in code block stringification. by @tsutton in [#1999](https://github.com/boa-dev/boa/pull/1999)
+- Indicate bigint has constructor by @lupd in [#2008](https://github.com/boa-dev/boa/pull/2008)
+- Change `ArrayBuffer` `byteLength` to accessor property by @lupd in [#2010](https://github.com/boa-dev/boa/pull/2010)
+- Fix `ArrayBuffer.isView()` by @HalidOdat in [#2019](https://github.com/boa-dev/boa/pull/2019)
+- Fix casting negative number to usize in `Array.splice` by @lupd in [#2030](https://github.com/boa-dev/boa/pull/2030)
+- Fix `Symbol` and `BigInt` constructors by @HalidOdat in [#2032](https://github.com/boa-dev/boa/pull/2032)
+- Make `Array.prototype` an array object by @HalidOdat in [#2033](https://github.com/boa-dev/boa/pull/2033)
+- Fix early return in `for in loop` head by @raskad in [#2043](https://github.com/boa-dev/boa/pull/2043)
+
+### Internal Improvements
+
+- docs: update README by structuring the topics by @ftonato in [#1958](https://github.com/boa-dev/boa/pull/1958)
+- Migrate to NPM and cleanup Playground by @jedel1043 in [#1951](https://github.com/boa-dev/boa/pull/1951)
+- Fix performance bottleneck in VM by @pdogr in [#1973](https://github.com/boa-dev/boa/pull/1973)
+- Remove `git2` and `hex` dependencies by @raskad in [#1992](https://github.com/boa-dev/boa/pull/1992)
+- Fix rust 1.60 clippy lints by @raskad in [#2014](https://github.com/boa-dev/boa/pull/2014)
+- Refactor `RegExp` constructor methods by @raskad in [#2049](https://github.com/boa-dev/boa/pull/2049)
+- Fixing build for changes in clippy for Rust 1.61 by @Razican in [#2082](https://github.com/boa-dev/boa/pull/2082)
+
+**Full Changelog**: https://github.com/boa-dev/boa/compare/v0.14...v0.15
+
+# [0.14.0 (2022-03-15) - Virtual Machine](https://github.com/boa-dev/boa/compare/v0.13...v0.14)
+
+### Feature Enhancements
+
+- Implement functions for vm by @HalidOdat in [#1433](https://github.com/boa-dev/boa/pull/1433)
+- Implement Object.getOwnPropertyNames and Object.getOwnPropertySymbols by @kevinputera in [#1606](https://github.com/boa-dev/boa/pull/1606)
+- Implement `Symbol.prototype.valueOf` by @hle0 in [#1618](https://github.com/boa-dev/boa/pull/1618)
+- Implement Array.prototype.at() by @nekevss in [#1613](https://github.com/boa-dev/boa/pull/1613)
+- Implement Array.from by @nrabulinski [#1831](https://github.com/boa-dev/boa/pull/1831)
+- Implement String.fromCharCode by @hle0 in [#1619](https://github.com/boa-dev/boa/pull/1619)
+- Implement `Typed Array` built-in by @Razican in [#1552](https://github.com/boa-dev/boa/pull/1552)
+- Implement arguments exotic objects by @jedel1043 in [#1522](https://github.com/boa-dev/boa/pull/1522)
+- Allow `BindingPattern`s as `CatchParameter` by @lowr in [#1628](https://github.com/boa-dev/boa/pull/1628)
+- Implement `Symbol.prototype[ @@toPrimitive ]` by @Nimpruda in [#1634](https://github.com/boa-dev/boa/pull/1634)
+- Implement Generator parsing by @raskad in [#1575](https://github.com/boa-dev/boa/pull/1575)
+- Implement Object.hasOwn and improve Object.prototype.hasOwnProperty by @kevinputera in [#1639](https://github.com/boa-dev/boa/pull/1639)
+- Hashbang lexer support by @nekevss in [#1631](https://github.com/boa-dev/boa/pull/1631)
+- Implement `delete` operator in the vm by @raskad in [#1649](https://github.com/boa-dev/boa/pull/1649)
+- Implement Object.fromEntries by @kevinputera in [#1660](https://github.com/boa-dev/boa/pull/1660)
+- Initial implementation for increment/decrement in VM by @abhishekc-sharma in [#1621](https://github.com/boa-dev/boa/pull/1621)
+- Implement `Proxy` object by @raskad in [#1664](https://github.com/boa-dev/boa/pull/1664)
+- Implement object literals for vm by @raskad in [#1668](https://github.com/boa-dev/boa/pull/1668)
+- Implement Array findLast and findLastIndex by @bsinky in [#1665](https://github.com/boa-dev/boa/pull/1665)
+- Implement `DataView` built-in object by @Nimpruda in [#1662](https://github.com/boa-dev/boa/pull/1662)
+- Clean-up contribution guidelines, dependencies, Test262, MSRV by @Razican in [#1683](https://github.com/boa-dev/boa/pull/1683)
+- Implement Async Generator Parsing by @nekevss in [#1669](https://github.com/boa-dev/boa/pull/1669)
+- Implement prototype of `Intl` built-in by @hle0 in [#1622](https://github.com/boa-dev/boa/pull/1622)
+- Add limited console.trace implementation by @osman-turan in [#1623](https://github.com/boa-dev/boa/pull/1623)
+- Allow `BindingPattern` in function parameters by @am-a-man in [#1666](https://github.com/boa-dev/boa/pull/1666)
+- Small test ux improvements by @orndorffgrant in [#1704](https://github.com/boa-dev/boa/pull/1704)
+- Implement missing vm operations by @raskad in [#1697](https://github.com/boa-dev/boa/pull/1697)
+- Added fallible allocation to data blocks by @Razican in [#1728](https://github.com/boa-dev/boa/pull/1728)
+- Document CodeBlock by @TheDoctor314 in [#1691](https://github.com/boa-dev/boa/pull/1691)
+- Generic `JsResult` in `context.throw_` methods by @HalidOdat in [#1734](https://github.com/boa-dev/boa/pull/1734)
+- Implement `String.raw( template, ...substitutions )` by @HalidOdat in [#1741](https://github.com/boa-dev/boa/pull/1741)
+- Updated test262 suite and dependencies by @Razican in [#1755](https://github.com/boa-dev/boa/pull/1755)
+- Lexer string interning by @Razican in [#1758](https://github.com/boa-dev/boa/pull/1758)
+- Adjust `compile` and `execute` to avoid clones by @Razican in [#1778](https://github.com/boa-dev/boa/pull/1778)
+- Interner support in the parser by @Razican in [#1765](https://github.com/boa-dev/boa/pull/1765)
+- Convert `Codeblock` variables to `Sym` by @raskad in [#1798](https://github.com/boa-dev/boa/pull/1798)
+- Using production builds for WebAssembly by @Razican in [#1825](https://github.com/boa-dev/boa/pull/1825)
+- Give the arrow function its proper name by @rumpl in [#1832](https://github.com/boa-dev/boa/pull/1832)
+- Unwrap removal by @Razican in [#1842](https://github.com/boa-dev/boa/pull/1842)
+- Feature `JsArray` by @HalidOdat in [#1746](https://github.com/boa-dev/boa/pull/1746)
+- Rename "Boa" to boa_engine, moved GC and profiler to their crates by @Razican in [#1844](https://github.com/boa-dev/boa/pull/1844)
+- Added conversions from and to serde_json's Value type by @Razican in [#1851](https://github.com/boa-dev/boa/pull/1851)
+- Toggleable `JsValue` internals displaying by @HalidOdat in [#1865](https://github.com/boa-dev/boa/pull/1865)
+- Implement generator execution by @raskad in [#1790](https://github.com/boa-dev/boa/pull/1790)
+- Feature arrays with empty elements by @HalidOdat in [#1870](https://github.com/boa-dev/boa/pull/1870)
+- Removed reference counted pointers from `JsValue` variants by @Razican in [#1866](https://github.com/boa-dev/boa/pull/1866)
+- Implement `Object.prototype.toLocaleString()` by @HalidOdat in [#1875](https://github.com/boa-dev/boa/pull/1875)
+- Implement `AggregateError` by @HalidOdat in [#1888](https://github.com/boa-dev/boa/pull/1888)
+- Implement destructing assignments for assignment expressions by @raskad in [#1895](https://github.com/boa-dev/boa/pull/1895)
+- Added boa examples by @elasmojs in [#1161](https://github.com/boa-dev/boa/pull/1161)
+
+### Bug Fixes
+
+- Fix BigInt and Number comparison by @HalidOdat [#1887](https://github.com/boa-dev/boa/pull/1887)
+- Fix broken structure links in the documentation by @abhishekc-sharma in [#1612](https://github.com/boa-dev/boa/pull/1612)
+- Use function name from identifiers in assignment expressions by @raskad [#1908](https://github.com/boa-dev/boa/pull/1908)
+- Fix integer parsing by @nrabulinski in [#1614](https://github.com/boa-dev/boa/pull/1614)
+- Fix `Number.toExponential` and `Number.toFixed` by @nrabulinski in [#1620](https://github.com/boa-dev/boa/pull/1620)
+- Badge updates by @atouchet in [#1638](https://github.com/boa-dev/boa/pull/1638)
+- refactor: fix construct_error functions by @RageKnify in [#1703](https://github.com/boa-dev/boa/pull/1703)
+- Fix internal vm tests by @raskad in [#1718](https://github.com/boa-dev/boa/pull/1718)
+- Removed a bunch of warnings and clippy errors by @Razican in [#1754](https://github.com/boa-dev/boa/pull/1754)
+- Fix some broken links in the profiler documentation by @Razican in [#1762](https://github.com/boa-dev/boa/pull/1762)
+- Add proxy handling in `isArray` method by @raskad in [#1777](https://github.com/boa-dev/boa/pull/1777)
+- Copy/paste fix in Proxy error message by @icecream17 in [#1787](https://github.com/boa-dev/boa/pull/1787)
+- Fixed #1768 by @Razican in [#1820](https://github.com/boa-dev/boa/pull/1820)
+- Fix string.prototype methods and add static string methods by @jevancc in [#1123](https://github.com/boa-dev/boa/pull/1123)
+- Handle allocation errors by @y21 in [#1850](https://github.com/boa-dev/boa/pull/1850)
+- Fix wasm use outside browsers by @Razican in [#1846](https://github.com/boa-dev/boa/pull/1846)
+- Add assertion to check that a break label is identified at compile-time by @VTCAKAVSMoACE in [#1852](https://github.com/boa-dev/boa/pull/1852)
+- Correct reference error message by @aaronmunsters in [#1855](https://github.com/boa-dev/boa/pull/1855)
+- Fixing main branch workflows by @Razican in [#1858](https://github.com/boa-dev/boa/pull/1858)
+- Correct pop_on_return behaviour by @VTCAKAVSMoACE in [#1853](https://github.com/boa-dev/boa/pull/1853)
+- Fix equality between objects and `undefined` or `null` by @HalidOdat in [#1872](https://github.com/boa-dev/boa/pull/1872)
+- Removing the panic in favour of an error result by @Razican in [#1874](https://github.com/boa-dev/boa/pull/1874)
+- Make `Object.getOwnPropertyDescriptors` spec compliant by @HalidOdat in [#1876](https://github.com/boa-dev/boa/pull/1876)
+- Make `Error` and `%NativeError%` spec compliant by @HalidOdat in [#1879](https://github.com/boa-dev/boa/pull/1879)
+- Fix `Number.prototype.toString` when passing `undefined` as radix by @HalidOdat in [#1877](https://github.com/boa-dev/boa/pull/1877)
+- Cleanup vm stack on function return by @raskad in [#1880](https://github.com/boa-dev/boa/pull/1880)
+- `%NativeError%.[[prototype]]` should be `Error` constructor by @HalidOdat in [#1883](https://github.com/boa-dev/boa/pull/1883)
+- Make `StringToNumber` spec compliant by @HalidOdat in [#1881](https://github.com/boa-dev/boa/pull/1881)
+- Fix `PropertyKey` to `JsValue` conversion by @HalidOdat in [#1886](https://github.com/boa-dev/boa/pull/1886)
+- Make iterator spec complaint by @HalidOdat in [#1889](https://github.com/boa-dev/boa/pull/1889)
+- Implement `Number.parseInt` and `Number.parseFloat` by @HalidOdat in [#1894](https://github.com/boa-dev/boa/pull/1894)
+- Fix unreachable panics in compile_access by @VTCAKAVSMoACE in [#1861](https://github.com/boa-dev/boa/pull/1861)
+- Continue panic fixes by @VTCAKAVSMoACE in [#1896](https://github.com/boa-dev/boa/pull/1896)
+- Deny const declarations without initializer inside for loops by @jedel1043 in [#1903](https://github.com/boa-dev/boa/pull/1903)
+- Fix try/catch/finally related bugs and add tests by @jedel1043 in [#1901](https://github.com/boa-dev/boa/pull/1901)
+- Compile StatementList after parse passes on negative tests by @raskad in [#1906](https://github.com/boa-dev/boa/pull/1906)
+- Prevent breaks without loop or switch from causing panics by @VTCAKAVSMoACE in [#1860](https://github.com/boa-dev/boa/pull/1860)
+- Fix postfix increment and decrement return values by @raskad in [#1913](https://github.com/boa-dev/boa/pull/1913)
+
+### Internal Improvements
+
+- Rewrite initialization of builtins to use the `BuiltIn` trait by @jedel1043 in [#1586](https://github.com/boa-dev/boa/pull/1586)
+- Unify object creation with `empty` and `from_proto_and_data` methods by @jedel1043 in [#1567](https://github.com/boa-dev/boa/pull/1567)
+- VM Tidy Up by @jasonwilliams in [#1610](https://github.com/boa-dev/boa/pull/1610)
+- Fix master refs to main by @jasonwilliams in [#1637](https://github.com/boa-dev/boa/pull/1637)
+- Refresh vm docs and fix bytecode trace output by @raskad [#1921](https://github.com/boa-dev/boa/pull/1921)
+- Change type of object prototypes to `Option` by @jedel1043 in [#1640](https://github.com/boa-dev/boa/pull/1640)
+- Refactor `Function` internal methods and implement `BoundFunction` objects by @jedel1043 in [#1583](https://github.com/boa-dev/boa/pull/1583)
+- change that verbosity comparison to > 2 by @praveenbakkal in [#1680](https://github.com/boa-dev/boa/pull/1680)
+- Respect rust 1.56 by @RageKnify in [#1681](https://github.com/boa-dev/boa/pull/1681)
+- Add bors to CI by @RageKnify in [#1684](https://github.com/boa-dev/boa/pull/1684)
+- Adding VM conformance output to PR checks by @Razican in [#1685](https://github.com/boa-dev/boa/pull/1685)
+- Start removing non-VM path by @jasonwilliams in [#1747](https://github.com/boa-dev/boa/pull/1747)
+- Using upstream benchmark action by @Razican in [#1753](https://github.com/boa-dev/boa/pull/1753)
+- Fix bors hanging by @RageKnify in [#1767](https://github.com/boa-dev/boa/pull/1767)
+- add more timers on object functions by @jasonwilliams in [#1775](https://github.com/boa-dev/boa/pull/1775)
+- Update the PR benchmarks action by @Razican in [#1774](https://github.com/boa-dev/boa/pull/1774)
+- General code clean-up and new lint addition by @Razican in [#1809](https://github.com/boa-dev/boa/pull/1809)
+- Reduced the size of AST nodes by @Razican in [#1821](https://github.com/boa-dev/boa/pull/1821)
+- Using the new formatting arguments from Rust 1.58 by @Razican in [#1834](https://github.com/boa-dev/boa/pull/1834)
+- Rework RegExp struct to include bitflags field by @aaronmunsters in [#1837](https://github.com/boa-dev/boa/pull/1837)
+- Ignore wastefull `RegExp` tests by @raskad in [#1840](https://github.com/boa-dev/boa/pull/1840)
+- Refactor the environment for runtime performance by @raskad in [#1829](https://github.com/boa-dev/boa/pull/1829)
+- Refactor mapped `Arguments` object by @raskad in [#1849](https://github.com/boa-dev/boa/pull/1849)
+- Fixed dependabot for submodule by @Razican in [#1856](https://github.com/boa-dev/boa/pull/1856)
+- Refactorings for Rust 1.59 by @RageKnify in [#1867](https://github.com/boa-dev/boa/pull/1867)
+- Removing internal deprecated functions by @HalidOdat in [#1854](https://github.com/boa-dev/boa/pull/1854)
+- Remove `toInteger` and document the `string` builtin by @jedel1043 in [#1884](https://github.com/boa-dev/boa/pull/1884)
+- Extract `Intrinsics` struct from `Context` and cleanup names by @jedel1043 in [#1890](https://github.com/boa-dev/boa/pull/1890)
+
+**Full Changelog**: https://github.com/boa-dev/boa/compare/v0.13...v0.14
+
+# [0.13.0 (2021-09-30) - Many new features and refactors](https://github.com/boa-dev/boa/compare/v0.12.0...v0.13.0)
+
+Feature Enhancements:
+
+- [FEATURE #1526](https://github.com/boa-dev/boa/pull/1526): Implement ComputedPropertyName for accessor properties in ObjectLiteral (@raskad)
+- [FEATURE #1365](https://github.com/boa-dev/boa/pull/1365): Implement splice method (@neeldug)
+- [FEATURE #1364](https://github.com/boa-dev/boa/pull/1364): Implement spread for objects (@FrancisMurillo)
+- [FEATURE #1525](https://github.com/boa-dev/boa/pull/1525): Implement Object.preventExtensions() and Object.isExtensible() (@HalidOdat)
+- [FEATURE #1508](https://github.com/boa-dev/boa/pull/1508): Implement Object.values() (@HalidOdat)
+- [FEATURE #1332](https://github.com/boa-dev/boa/pull/1332): Implement Array.prototype.sort (@jedel1043)
+- [FEATURE #1417](https://github.com/boa-dev/boa/pull/1471): Implement Object.keys and Object.entries (@skyne98)
+- [FEATURE #1406](https://github.com/boa-dev/boa/pull/1406): Implement destructuring assignments (@raskad)
+- [FEATURE #1469](https://github.com/boa-dev/boa/pull/1469): Implement String.prototype.replaceAll (@raskad)
+- [FEATURE #1442](https://github.com/boa-dev/boa/pull/1442): Implement closure functions (@HalidOdat)
+- [FEATURE #1390](https://github.com/boa-dev/boa/pull/1390): Implement RegExp named capture groups (@raskad)
+- [FEATURE #1424](https://github.com/boa-dev/boa/pull/1424): Implement Symbol.for and Symbol.keyFor (@HalidOdat)
+- [FEATURE #1375](https://github.com/boa-dev/boa/pull/1375): Implement `at` method for string (@neeldug)
+- [FEATURE #1369](https://github.com/boa-dev/boa/pull/1369): Implement normalize method (@neeldug)
+- [FEATURE #1334](https://github.com/boa-dev/boa/pull/1334): Implement Array.prototype.copyWithin (@jedel1043)
+- [FEATURE #1326](https://github.com/boa-dev/boa/pull/1326): Implement get RegExp[@@species] (@raskad)
+- [FEATURE #1314](https://github.com/boa-dev/boa/pull/1314): Implement RegExp.prototype [ @@search ] ( string ) (@raskad)
+- [FEATURE #1451](https://github.com/boa-dev/boa/pull/1451): Feature prelude module (@HalidOdat)
+- [FEATURE #1523](https://github.com/boa-dev/boa/pull/1523): Allow moving NativeObject variables into closures as external captures (@jedel1043)
+
+Bug Fixes:
+
+- [BUG #1521](https://github.com/boa-dev/boa/pull/1521): Added "js" feature for getrandom for WebAssembly builds (@Razican)
+- [BUG #1528](https://github.com/boa-dev/boa/pull/1528): Always return undefined from functions that do not return (@raskad)
+- [BUG #1518](https://github.com/boa-dev/boa/pull/1518): Moving a JsObject inside a closure caused a panic (@jedel1043)
+- [BUG #1502](https://github.com/boa-dev/boa/pull/1502): Adjust EnumerableOwnPropertyNames to use all String type property keys (@raskad)
+- [BUG #1415](https://github.com/boa-dev/boa/pull/1415): Fix panic on bigint size (@neeldug)
+- [BUG #1477](https://github.com/boa-dev/boa/pull/1477): Properly handle NaN in new Date() (@raskad)
+- [BUG #1449](https://github.com/boa-dev/boa/pull/1449): Make Array.prototype methods spec compliant (@HalidOdat)
+- [BUG #1353](https://github.com/boa-dev/boa/pull/1353): Make Array.prototype.concat spec compliant (@neeldug)
+- [BUG #1384](https://github.com/boa-dev/boa/pull/1384): bitwise not operation (spec improvements) (@neeldug)
+- [BUG #1374](https://github.com/boa-dev/boa/pull/1374): Match and regexp construct fixes (@neeldug)
+- [BUG #1366](https://github.com/boa-dev/boa/pull/1366): Use lock for map iteration (@joshwd36)
+- [BUG #1360](https://github.com/boa-dev/boa/pull/1360): Adjust a comment to be next to the correct module (@teymour-aldridge)
+- [BUG #1349](https://github.com/boa-dev/boa/pull/1349): Fixes Array.protoype.includes (@neeldug)
+- [BUG #1348](https://github.com/boa-dev/boa/pull/1348): Fixes unshift maximum size (@neeldug)
+- [BUG #1339](https://github.com/boa-dev/boa/pull/1339): Scripts should not be considered in a block (@macmv)
+- [BUG #1312](https://github.com/boa-dev/boa/pull/1312): Fix display for nodes (@macmv)
+- [BUG #1347](https://github.com/boa-dev/boa/pull/1347): Fix stringpad abstract operation (@neeldug)
+- [BUG #1584](https://github.com/boa-dev/boa/pull/1584): Refactor the Math builtin object (spec compliant) (@jedel1043)
+- [BUG #1535](https://github.com/boa-dev/boa/pull/1535): Refactor JSON.parse (@raskad)
+- [BUG #1572](https://github.com/boa-dev/boa/pull/1572): Refactor builtin Map intrinsics to follow more closely the spec (@jedel1043)
+- [BUG #1445](https://github.com/boa-dev/boa/pull/1445): improve map conformance without losing perf (@neeldug)
+- [BUG #1488](https://github.com/boa-dev/boa/pull/1488): Date refactor (@raskad)
+- [BUG #1463](https://github.com/boa-dev/boa/pull/1463): Return function execution result from constructor if the function returned (@raskad)
+- [BUG #1434](https://github.com/boa-dev/boa/pull/1434): Refactor regexp costructor (@raskad)
+- [BUG #1350](https://github.com/boa-dev/boa/pull/1350): Refactor / Implement RegExp functions (@RageKnify) (@raskad)
+- [BUG #1331](https://github.com/boa-dev/boa/pull/1331): Implement missing species getters (@raskad)
+
+Internal Improvements:
+
+- [INTERNAL #1569](https://github.com/boa-dev/boa/pull/1569): Refactor EnvironmentRecordTrait functions (@raskad)
+- [INTERNAL #1464](https://github.com/boa-dev/boa/pull/1464): Optimize integer negation (@HalidOdat)
+- [INTERNAL #1550](https://github.com/boa-dev/boa/pull/1550): Add strict mode flag to Context (@raskad)
+- [INTERNAL #1561](https://github.com/boa-dev/boa/pull/1561): Implement abstract operation GetPrototypeFromConstructor (@jedel1043)
+- [INTERNAL #1309](https://github.com/boa-dev/boa/pull/1309): Implement Display for function objects(@kvnvelasco)
+- [INTERNAL #1492](https://github.com/boa-dev/boa/pull/1492): Implement new get_or_undefined method for `JsValue` (@jedel1043)
+- [INTERNAL #1553](https://github.com/boa-dev/boa/pull/1553): Fix benchmark action in CI (@jedel1043)
+- [INTERNAL #1547](https://github.com/boa-dev/boa/pull/1547): Replace FxHashMap with IndexMap in object properties (@raskad)
+- [INTERNAL #1435](https://github.com/boa-dev/boa/pull/1435): Constant JsStrings (@HalidOdat)
+- [INTERNAL #1499](https://github.com/boa-dev/boa/pull/1499): Updated the Test262 submodule (@Razican)
+- [INTERNAL #1458](https://github.com/boa-dev/boa/pull/1458): Refactor the JS testing system (@bartlomieju)
+- [INTERNAL #1485](https://github.com/boa-dev/boa/pull/1485): Implement abstract operation CreateArrayFromList (@jedel1043)
+- [INTERNAL #1465](https://github.com/boa-dev/boa/pull/1465): Feature throw Error object (@HalidOdat)
+- [INTERNAL #1493](https://github.com/boa-dev/boa/pull/1493): Rename boa::Result to JsResult (@bartlomieju)
+- [INTERNAL #1457](https://github.com/boa-dev/boa/pull/1457): Rename Value to JsValue (@HalidOdat)
+- [INTERNAL #1460](https://github.com/boa-dev/boa/pull/1460): Change StringGetOwnProperty to produce the same strings that the lexer produces (@raskad)
+- [INTERNAL #1425](https://github.com/boa-dev/boa/pull/1425): Extract PropertyMap struct from Object (@jedel1043)
+- [INTERNAL #1432](https://github.com/boa-dev/boa/pull/1432): Proposal of new PropertyDescriptor design (@jedel1043)
+- [INTERNAL #1383](https://github.com/boa-dev/boa/pull/1383): clippy lints and cleanup of old todos (@neeldug)
+- [INTERNAL #1346](https://github.com/boa-dev/boa/pull/1346): Implement gh-page workflow on release (@FrancisMurillo)
+- [INTERNAL #1422](https://github.com/boa-dev/boa/pull/1422): Refactor internal methods and make some builtins spec compliant (@HalidOdat)
+- [INTERNAL #1419](https://github.com/boa-dev/boa/pull/1419): Fix DataDescriptor Value to possibly be empty (@raskad)
+- [INTERNAL #1357](https://github.com/boa-dev/boa/pull/1357): Add Example to Execute a Function of a Script File (@schrieveslaach)
+- [INTERNAL #1408](https://github.com/boa-dev/boa/pull/1408): Refactor JavaScript bigint rust type (@HalidOdat)
+- [INTERNAL #1380](https://github.com/boa-dev/boa/pull/1380): Custom JavaScript string rust type (@HalidOdat)
+- [INTERNAL #1382](https://github.com/boa-dev/boa/pull/1382): Refactor JavaScript symbol rust type (@HalidOdat)
+- [INTERNAL #1361](https://github.com/boa-dev/boa/pull/1361): Redesign bytecode virtual machine (@HalidOdat)
+- [INTERNAL #1381](https://github.com/boa-dev/boa/pull/1381): Fixed documentation warnings (@Razican)
+- [INTERNAL #1352](https://github.com/boa-dev/boa/pull/1352): Respect Rust 1.53 (@RageKnify)
+- [INTERNAL #1356](https://github.com/boa-dev/boa/pull/1356): Respect Rust fmt updates (@RageKnify)
+- [INTERNAL #1338](https://github.com/boa-dev/boa/pull/1338): Fix cargo check errors (@neeldug)
+- [INTERNAL #1329](https://github.com/boa-dev/boa/pull/1329): Allow Value.set_field to throw (@raskad)
+- [INTERNAL #1333](https://github.com/boa-dev/boa/pull/1333): adds condition to avoid triggers from dependabot (@neeldug)
+- [INTERNAL #1337](https://github.com/boa-dev/boa/pull/1337): Fix github actions (@neeldug)
+
+# [0.12.0 (2021-06-07) - `Set`, accessors, `@@toStringTag` and no more panics](https://github.com/boa-dev/boa/compare/v0.11.0...v0.12.0)
+
+Feature Enhancements:
+
+- [FEATURE #1085](https://github.com/boa-dev/boa/pull/1085): Add primitive promotion for method calls on `GetField` (@RageKnify)
+- [FEATURE #1033](https://github.com/boa-dev/boa/pull/1033): Implement `Reflect` built-in object (@tofpie)
+- [FEATURE #1151](https://github.com/boa-dev/boa/pull/1151): Fully implement `EmptyStatement` (@SamuelQZQ)
+- [FEATURE #1158](https://github.com/boa-dev/boa/pull/1158): Include name in verbose results output of `boa-tester` (@0x7D2B)
+- [FEATURE #1225](https://github.com/boa-dev/boa/pull/1225): Implement `Math[ @@toStringTag ]` (@HalidOdat)
+- [FEATURE #1224](https://github.com/boa-dev/boa/pull/1224): Implement `JSON[ @@toStringTag ]` (@HalidOdat)
+- [FEATURE #1222](https://github.com/boa-dev/boa/pull/1222): Implement `Symbol.prototype.description` accessor (@HalidOdat)
+- [FEATURE #1221](https://github.com/boa-dev/boa/pull/1221): Implement `RegExp` flag accessors (@HalidOdat)
+- [FEATURE #1240](https://github.com/boa-dev/boa/pull/1240): Stop ignoring a bunch of tests (@Razican)
+- [FEATURE #1132](https://github.com/boa-dev/boa/pull/1132): Implement `Array.prototype.flat`/`flatMap` (@davimiku)
+- [FEATURE #1235](https://github.com/boa-dev/boa/pull/1235): Implement `Object.assign( target, ...sources )` (@HalidOdat)
+- [FEATURE #1243](https://github.com/boa-dev/boa/pull/1243): Cross realm symbols (@HalidOdat)
+- [FEATURE #1249](https://github.com/boa-dev/boa/pull/1249): Implement `Map.prototype[ @@toStringTag ]` (@wylie39)
+- [FEATURE #1111](https://github.com/boa-dev/boa/pull/1111): Implement `Set` builtin object (@RageKnify)
+- [FEATURE #1265](https://github.com/boa-dev/boa/pull/1265): Implement `BigInt.prototype[ @@toStringTag ]` (@n14littl)
+- [FEATURE #1102](https://github.com/boa-dev/boa/pull/1102): Support Unicode escape in identifier names (@jevancc)
+- [FEATURE #1273](https://github.com/boa-dev/boa/pull/1273): Add default parameter support (@0x7D2B)
+- [FEATURE #1292](https://github.com/boa-dev/boa/pull/1292): Implement `symbol.prototype[ @@ToStringTag ]` (@moadmmh)
+- [FEATURE #1291](https://github.com/boa-dev/boa/pull/1291): Support `GetOwnProperty` for `string` exotic object (@jarkonik)
+- [FEATURE #1296](https://github.com/boa-dev/boa/pull/1296): Added the `$262` object to the Test262 test runner (@Razican)
+- [FEATURE #1127](https://github.com/boa-dev/boa/pull/1127): Implement `Array.of` (@camc)
+
+Bug Fixes:
+
+- [BUG #1071](https://github.com/boa-dev/boa/pull/1071): Fix attribute configurable of the length property of arguments (@tofpie)
+- [BUG #1073](https://github.com/boa-dev/boa/pull/1073): Fixed spelling (@vishalsodani)
+- [BUG #1072](https://github.com/boa-dev/boa/pull/1072): Fix `get`/`set` as short method name in `object` (@tofpie)
+- [BUG #1077](https://github.com/boa-dev/boa/pull/1077): Fix panics from multiple borrows of `Map` (@joshwd36)
+- [BUG #1079](https://github.com/boa-dev/boa/pull/1079): Fix lexing escapes in string literal (@jevancc)
+- [BUG #1075](https://github.com/boa-dev/boa/pull/1075): Fix out-of-range panics of `Date` (@jevancc)
+- [BUG #1084](https://github.com/boa-dev/boa/pull/1084): Fix line terminator in string literal (@jevancc)
+- [BUG #1110](https://github.com/boa-dev/boa/pull/1110): Fix parsing floats panics and bugs (@jevancc)
+- [BUG #1202](https://github.com/boa-dev/boa/pull/1202): Fix a typo in `gc.rs` (@teymour-aldridge)
+- [BUG #1201](https://github.com/boa-dev/boa/pull/1201): Return optional value in `to_json` functions (@fermian)
+- [BUG #1223](https://github.com/boa-dev/boa/pull/1223): Update cli name in Readme (@sphinxc0re)
+- [BUG #1175](https://github.com/boa-dev/boa/pull/1175): Handle early errors for declarations in `StatementList` (@0x7D2B)
+- [BUG #1270](https://github.com/boa-dev/boa/pull/1270): Fix `Context::register_global_function()` (@HalidOdat)
+- [BUG #1135](https://github.com/boa-dev/boa/pull/1135): Fix of instructions.rs comment, to_precision impl and rfc changes (@NathanRoyer)
+- [BUG #1272](https://github.com/boa-dev/boa/pull/1272): Fix `Array.prototype.filter` (@tofpie & @Razican)
+- [BUG #1280](https://github.com/boa-dev/boa/pull/1280): Fix slice index panic in `add_rest_param` (@0x7D2B)
+- [BUG #1284](https://github.com/boa-dev/boa/pull/1284): Fix `GcObject` `to_json` mutable borrow panic (@0x7D2B)
+- [BUG #1283](https://github.com/boa-dev/boa/pull/1283): Fix panic in regex execution (@0x7D2B)
+- [BUG #1286](https://github.com/boa-dev/boa/pull/1286): Fix construct usage (@0x7D2B)
+- [BUG #1288](https://github.com/boa-dev/boa/pull/1288): Fixed `Math.hypot.length` bug (@moadmmh)
+- [BUG #1285](https://github.com/boa-dev/boa/pull/1285): Fix environment record panics (@0x7D2B)
+- [BUG #1302](https://github.com/boa-dev/boa/pull/1302): Fix VM branch (@jasonwilliams)
+
+Internal Improvements:
+
+- [INTERNAL #1067](https://github.com/boa-dev/boa/pull/1067): Change `Realm::global_object` field from `Value` to `GcObject` (@RageKnify)
+- [INTERNAL #1048](https://github.com/boa-dev/boa/pull/1048): VM Trace output fixes (@jasonwilliams)
+- [INTERNAL #1109](https://github.com/boa-dev/boa/pull/1109): Define all property methods of constructors (@RageKnify)
+- [INTERNAL #1126](https://github.com/boa-dev/boa/pull/1126): Remove unnecessary wraps for non built-in functions (@RageKnify)
+- [INTERNAL #1044](https://github.com/boa-dev/boa/pull/1044): Removed duplicated code in `vm.run` using macros (@stephanemagnenat)
+- [INTERNAL #1103](https://github.com/boa-dev/boa/pull/1103): Lazy evaluation for cooked template string (@jevancc)
+- [INTERNAL #1156](https://github.com/boa-dev/boa/pull/1156): Rework environment records (@0x7D2B)
+- [INTERNAL #1181](https://github.com/boa-dev/boa/pull/1181): Merge `Const`/`Let`/`Var` `DeclList` into `DeclarationList` (@0x7D2B)
+- [INTERNAL #1234](https://github.com/boa-dev/boa/pull/1234): Separate `Symbol` builtin (@HalidOdat)
+- [INTERNAL #1131](https://github.com/boa-dev/boa/pull/1131): Make environment methods take `&mut Context` (@HalidOdat)
+- [INTERNAL #1271](https://github.com/boa-dev/boa/pull/1271): Make `same_value` and `same_value_zero` static methods (@HalidOdat)
+- [INTERNAL #1276](https://github.com/boa-dev/boa/pull/1276): Cleanup (@Razican)
+- [INTERNAL #1279](https://github.com/boa-dev/boa/pull/1279): Add test comparison to Test262 result compare (@Razican)
+- [INTERNAL #1293](https://github.com/boa-dev/boa/pull/1293): Fix test262 comment formatting (@0x7D2B)
+- [INTERNAL #1294](https://github.com/boa-dev/boa/pull/1294): Don't consider panic fixes as "new failures" (@Razican)
+
+# [0.11.0 (2021-01-14) - Faster Parsing & Better compliance](https://github.com/boa-dev/boa/compare/v0.10.0...v0.11.0)
+
+Feature Enhancements:
+
+- [FEATURE #836](https://github.com/boa-dev/boa/pull/836):
+ Async/Await parse (@Lan2u)
+- [FEATURE #704](https://github.com/boa-dev/boa/pull/704):
+ Implement for...of loops (@joshwd36)
+- [FEATURE #770](https://github.com/boa-dev/boa/pull/770):
+ Support for symbols as property keys for `Object.defineProperty` (@georgeroman)
+- [FEATURE #717](https://github.com/boa-dev/boa/pull/717):
+ Strict Mode Lex/Parse (@Lan2u)
+- [FEATURE #800](https://github.com/boa-dev/boa/pull/800):
+ Implement `console` crate feature - Put `console` object behind a feature flag (@HalidOdat)
+- [FEATURE #804](https://github.com/boa-dev/boa/pull/804):
+ Implement `EvalError` (@HalidOdat)
+- [FEATURE #805](https://github.com/boa-dev/boa/pull/805):
+ Implement `Function.prototype.call` (@RageKnify)
+- [FEATURE #806](https://github.com/boa-dev/boa/pull/806):
+ Implement `URIError` (@HalidOdat)
+- [FEATURE #811](https://github.com/boa-dev/boa/pull/811):
+ Implement spread operator using iterator (@croraf)
+- [FEATURE #844](https://github.com/boa-dev/boa/pull/844):
+ Allow UnaryExpression with prefix increment/decrement (@croraf)
+- [FEATURE #798](https://github.com/boa-dev/boa/pull/798):
+ Implement Object.getOwnPropertyDescriptor() and Object.getOwnPropertyDescriptors() (@JohnDoneth)
+- [FEATURE #847](https://github.com/boa-dev/boa/pull/847):
+ Implement Map.prototype.entries() (@croraf)
+- [FEATURE #859](https://github.com/boa-dev/boa/pull/859):
+ Implement spec compliant Array constructor (@georgeroman)
+- [FEATURE #874](https://github.com/boa-dev/boa/pull/874):
+ Implement Map.prototype.values and Map.prototype.keys (@croraf)
+- [FEATURE #877](https://github.com/boa-dev/boa/pull/877):
+ Implement Function.prototype.apply (@georgeroman)
+- [FEATURE #908](https://github.com/boa-dev/boa/pull/908):
+ Implementation of `instanceof` operator (@morrien)
+- [FEATURE #935](https://github.com/boa-dev/boa/pull/935):
+ Implement String.prototype.codePointAt (@devinus)
+- [FEATURE #961](https://github.com/boa-dev/boa/pull/961):
+ Implement the optional `space` parameter in `JSON.stringify` (@tofpie)
+- [FEATURE #962](https://github.com/boa-dev/boa/pull/962):
+ Implement Number.prototype.toPrecision (@NathanRoyer)
+- [FEATURE #983](https://github.com/boa-dev/boa/pull/983):
+ Implement Object.prototype.isPrototypeOf (@tofpie)
+- [FEATURE #995](https://github.com/boa-dev/boa/pull/995):
+ Support Numeric separators (@tofpie)
+- [FEATURE #1013](https://github.com/boa-dev/boa/pull/1013):
+ Implement nullish coalescing (?? and ??=) (@tofpie)
+- [FEATURE #987](https://github.com/boa-dev/boa/pull/987):
+ Implement property accessors (@tofpie)
+- [FEATURE #1018](https://github.com/boa-dev/boa/pull/1018):
+ Implement logical assignment operators (&&= and ||=) (@tofpie)
+- [FEATURE #1019](https://github.com/boa-dev/boa/pull/1019):
+ Implement early errors for non-assignable nodes in assignment (@tofpie)
+- [FEATURE #1020](https://github.com/boa-dev/boa/pull/1020):
+ Implement Symbol.toPrimitive (@tofpie)
+- [FEATURE #976](https://github.com/boa-dev/boa/pull/976):
+ Implement for..in (@tofpie)
+- [FEATURE #1026](https://github.com/boa-dev/boa/pull/1026):
+ Implement String.prototype.split (@jevancc)
+- [FEATURE #1047](https://github.com/boa-dev/boa/pull/1047):
+ Added syntax highlighting for numbers, identifiers and template literals (@Razican)
+- [FEATURE #1003](https://github.com/boa-dev/boa/pull/1003):
+ Improve Unicode support for identifier names (@jevancc)
+
+Bug Fixes:
+
+- [BUG #782](https://github.com/boa-dev/boa/pull/782):
+ Throw TypeError if regexp is passed to startsWith, endsWith, includes (@pt2121)
+- [BUG #788](https://github.com/boa-dev/boa/pull/788):
+ Fixing a duplicated attribute in test262 results (@Razican)
+- [BUG #790](https://github.com/boa-dev/boa/pull/790):
+ Throw RangeError when BigInt division by zero occurs (@JohnDoneth)
+- [BUG #785](https://github.com/boa-dev/boa/pull/785):
+ Fix zero argument panic in JSON.parse() (@JohnDoneth)
+- [BUG #749](https://github.com/boa-dev/boa/pull/749):
+ Fix Error constructors to return rather than throw (@RageKnify)
+- [BUG #777](https://github.com/boa-dev/boa/pull/777):
+ Fix cyclic JSON.stringify / primitive conversion stack overflows (@vgel)
+- [BUG #799](https://github.com/boa-dev/boa/pull/799):
+ Fix lexer span panic with carriage return (@vgel)
+- [BUG #812](https://github.com/boa-dev/boa/pull/812):
+ Fix 2 bugs that caused Test262 to fail (@RageKnify)
+- [BUG #826](https://github.com/boa-dev/boa/pull/826):
+ Fix tokenizing Unicode escape sequence in string literal (@HalidOdat)
+- [BUG #825](https://github.com/boa-dev/boa/pull/825):
+ calling "new" on a primitive value throw a type error (@dlemel8)
+- [BUG #853](https://github.com/boa-dev/boa/pull/853)
+ Handle invalid Unicode code point in the string literals (@jevancc)
+- [BUG #870](https://github.com/boa-dev/boa/pull/870)
+ Fix JSON stringification for fractional numbers (@georgeroman)
+- [BUG #807](https://github.com/boa-dev/boa/pull/807):
+ Make boa::parse emit error on invalid input, not panic (@georgeroman)
+- [BUG #880](https://github.com/boa-dev/boa/pull/880):
+ Support more number literals in BigInt's from string constructor (@georgeroman)
+- [BUG #885](https://github.com/boa-dev/boa/pull/885):
+ Fix `BigInt.prototype.toString()` radix checks (@georgeroman)
+- [BUG #882](https://github.com/boa-dev/boa/pull/882):
+ Fix (panic) remainder by zero (@georgeroman)
+- [BUG #884](https://github.com/boa-dev/boa/pull/884):
+ Fix some panics related to BigInt operations (@georgeroman)
+- [BUG #888](https://github.com/boa-dev/boa/pull/888):
+ Fix some panics in String.prototype properties (@georgeroman)
+- [BUG #902](https://github.com/boa-dev/boa/pull/902):
+ Fix Accessors panics (@HalidOdat)
+- [BUG #959](https://github.com/boa-dev/boa/pull/959):
+ Fix Unicode character escape sequence parsing (@tofpie)
+- [BUG #964](https://github.com/boa-dev/boa/pull/964):
+ Fix single line comment lexing with CRLF line ending (@tofpie)
+- [BUG #919](https://github.com/boa-dev/boa/pull/919):
+ Reduce the number of `Array`-related panics (@jakubfijalkowski)
+- [BUG #968](https://github.com/boa-dev/boa/pull/968):
+ Fix unit tests that can be failed due to daylight saving time (@tofpie)
+- [BUG #972](https://github.com/boa-dev/boa/pull/972):
+ Fix enumerable attribute on array length property (@tofpie)
+- [BUG #974](https://github.com/boa-dev/boa/pull/974):
+ Fix enumerable attribute on string length property (@tofpie)
+- [BUG #981](https://github.com/boa-dev/boa/pull/981):
+ Fix prototypes for Number, String and Boolean (@tofpie)
+- [BUG #999](https://github.com/boa-dev/boa/pull/999):
+ Fix logical expressions evaluation (@tofpie)
+- [BUG #1001](https://github.com/boa-dev/boa/pull/1001):
+ Fix comparison with infinity (@tofpie)
+- [BUG #1004](https://github.com/boa-dev/boa/pull/1004):
+ Fix panics surrounding `Object.prototype.hasOwnProperty()` (@HalidOdat)
+- [BUG #1005](https://github.com/boa-dev/boa/pull/1005):
+ Fix panics surrounding `Object.defineProperty()` (@HalidOdat)
+- [BUG #1021](https://github.com/boa-dev/boa/pull/1021):
+ Fix spread in new and call expressions (@tofpie)
+- [BUG #1023](https://github.com/boa-dev/boa/pull/1023):
+ Fix attributes on properties of functions and constructors (@tofpie)
+- [BUG #1017](https://github.com/boa-dev/boa/pull/1017):
+ Don't panic when function parameters share names (@AnnikaCodes)
+- [BUG #1024](https://github.com/boa-dev/boa/pull/1024):
+ Fix delete when the property is not configurable (@tofpie)
+- [BUG #1027](https://github.com/boa-dev/boa/pull/1027):
+ Supress regress errors on invalid escapes for regex (@jasonwilliams
+- [BUG #1031](https://github.com/boa-dev/boa/pull/1031):
+ Fixed some extra regex panics (@Razican)
+- [BUG #1049](https://github.com/boa-dev/boa/pull/1049):
+ Support overriding the `arguments` variable (@AnnikaCodes)
+- [BUG #1050](https://github.com/boa-dev/boa/pull/1050):
+ Remove panic on named capture groups (@Razican)
+- [BUG #1046](https://github.com/boa-dev/boa/pull/1046):
+ Remove a few different panics (@Razican)
+- [BUG #1051](https://github.com/boa-dev/boa/pull/1051):
+ Fix parsing of arrow functions with 1 argument (@Lan2u)
+- [BUG #1045](https://github.com/boa-dev/boa/pull/1045):
+ Add newTarget to construct (@tofpie)
+- [BUG #659](https://github.com/boa-dev/boa/pull/659):
+ Error handling in environment (@54k1)
+
+Internal Improvements:
+
+- [INTERNAL #735](https://github.com/boa-dev/boa/pull/735):
+ Move exec implementations together with AST node structs (@georgeroman)
+- [INTERNAL #724](https://github.com/boa-dev/boa/pull/724):
+ Ignore tests for code coverage count (@HalidOdat)
+- [INTERNAL #768](https://github.com/boa-dev/boa/pull/768)
+ Update the benchmark Github action (@Razican)
+- [INTERNAL #722](https://github.com/boa-dev/boa/pull/722):
+ `ConstructorBuilder`, `ObjectInitializer`, cache standard objects and fix global object attributes (@HalidOdat)
+- [INTERNAL #783](https://github.com/boa-dev/boa/pull/783):
+ New test262 results format (This also reduces the payload size for the website) (@Razican)
+- [INTERNAL #787](https://github.com/boa-dev/boa/pull/787):
+ Refactor ast/node/expression into ast/node/call and ast/node/new (@croraf)
+- [INTERNAL #802](https://github.com/boa-dev/boa/pull/802):
+ Make `Function.prototype` a function (@HalidOdat)
+- [INTERNAL #746](https://github.com/boa-dev/boa/pull/746):
+ Add Object.defineProperties and handle props argument in Object.create (@dvtkrlbs)
+- [INTERNAL #774](https://github.com/boa-dev/boa/pull/774):
+ Switch from `regex` to `regress` for ECMA spec-compliant regex implementation (@neeldug)
+- [INTERNAL #794](https://github.com/boa-dev/boa/pull/794):
+ Refactor `PropertyDescriptor` (Improved performance) (@HalidOdat)
+- [INTERNAL #824](https://github.com/boa-dev/boa/pull/824):
+ [parser Expression] minor expression macro simplification (@croraf)
+- [INTERNAL #833](https://github.com/boa-dev/boa/pull/833):
+ Using unstable sort for sorting keys on `to_json()` for GC objects (@Razican)
+- [INTERNAL #837](https://github.com/boa-dev/boa/pull/837):
+ Set default-run to `boa` removing need for `--bin` (@RageKnify)
+- [INTERNAL #841](https://github.com/boa-dev/boa/pull/841):
+ Minor refactor and rename in eval() method (@croraf)
+- [INTERNAL #840](https://github.com/boa-dev/boa/pull/840):
+ fix(profiler): update profiler to match current measureme api (@neeldug)
+- [INTERNAL #838](https://github.com/boa-dev/boa/pull/838):
+ style(boa): minor cleanup (@neeldug)
+- [INTERNAL #869](https://github.com/boa-dev/boa/pull/869):
+ Updated cache in workflows (@Razican)
+- [INTERNAL #873](https://github.com/boa-dev/boa/pull/873)
+ Removed cache from MacOS builds (@Razican)
+- [INTERNAL #835](https://github.com/boa-dev/boa/pull/835):
+ Move `Object` internal object methods to `GcObject` (@HalidOdat)
+- [INTERNAL #886](https://github.com/boa-dev/boa/pull/886):
+ Support running a specific test/suite in boa_tester (@georgeroman)
+- [INTERNAL #901](https://github.com/boa-dev/boa/pull/901):
+ Added "unimplemented" syntax errors (@Razican)
+- [INTERNAL #911](https://github.com/boa-dev/boa/pull/911):
+ Change Symbol hash to `u64` (@HalidOdat)
+- [INTERNAL #912](https://github.com/boa-dev/boa/pull/912):
+ Feature `Context::register_global_property()` (@HalidOdat)
+- [INTERNAL #913](https://github.com/boa-dev/boa/pull/913):
+ Added check to ignore semicolon in parser (@AngelOnFira)
+- [INTERNAL #915](https://github.com/boa-dev/boa/pull/915):
+ Improve lexer by make cursor iterate over bytes (@jevancc)
+- [INTERNAL #952](https://github.com/boa-dev/boa/pull/952):
+ Upgraded rustyline and test262 (@Razican)
+- [INTERNAL #960](https://github.com/boa-dev/boa/pull/960):
+ Fix unresolved links in documentation (@tofpie)
+- [INTERNAL #979](https://github.com/boa-dev/boa/pull/979):
+ Read file input in bytes instead of string (@tofpie)
+- [INTERNAL #1014](https://github.com/boa-dev/boa/pull/1014):
+ StatementList: Rename `statements` to `items` (@AnnikaCodes)
+- [INTERNAL #860](https://github.com/boa-dev/boa/pull/860):
+ Investigation into ByteCode Interpreter (@jasonwilliams)
+- [INTERNAL #1042](https://github.com/boa-dev/boa/pull/1042):
+ Add receiver parameter to object internal methods (@tofpie)
+- [INTERNAL #1030](https://github.com/boa-dev/boa/pull/1030):
+ VM: Implement variable declaration (var, const, and let) (@AnnikaCodes)
+- [INTERNAL #1010](https://github.com/boa-dev/boa/pull/1010):
+ Modify environment binding behaviour of function (@54k1)
+
+# [0.10.0 (2020-09-29) - New Lexer & Test 262 Harness](https://github.com/boa-dev/boa/compare/v0.9.0...v0.10.0)
+
+Feature Enhancements:
+
+- [FEATURE #524](https://github.com/boa-dev/boa/pull/525):
+ Implement remaining `Math` methods (@mr-rodgers)
+- [FEATURE #562](https://github.com/boa-dev/boa/pull/562):
+ Implement remaining `Number` methods (@joshwd36)
+- [FEATURE #536](https://github.com/boa-dev/boa/pull/536):
+ Implement `SyntaxError` (@HalidOdat)
+- [FEATURE #543](https://github.com/boa-dev/boa/pull/543):
+ Implements `Object.create` builtin method (@croraf)
+- [FEATURE #492](https://github.com/boa-dev/boa/pull/492):
+ Switch to [rustyline](https://github.com/kkawakam/rustyline) for the CLI (@IovoslavIovchev & @Razican)
+- [FEATURE #595](https://github.com/boa-dev/boa/pull/595):
+ Added syntax highlighting for strings in REPL (@HalidOdat)
+- [FEATURE #586](https://github.com/boa-dev/boa/pull/586):
+ Better error formatting and cli color (@HalidOdat)
+- [FEATURE #590](https://github.com/boa-dev/boa/pull/590):
+ Added keyword and operator colors and matching bracket validator to REPL (@HalidOdat)
+- [FEATURE #555](https://github.com/boa-dev/boa/pull/555):
+ Implement Array.prototype.reduce (@benjaminflin)
+- [FEATURE #550](https://github.com/boa-dev/boa/pull/550):
+ Initial implementation of Map() (@joshwd36 & @HalidOdat)
+- [FEATURE #579](https://github.com/boa-dev/boa/pull/579):
+ Implement Array.prototype.reduceRight (@benjaminflin)
+- [FEATURE #585](https://github.com/boa-dev/boa/pull/587):
+ Implement Well-Known Symbols (@joshwd36)
+- [FEATURE #589](https://github.com/boa-dev/boa/pull/589):
+ Implement the comma operator (@KashParty)
+- [FEATURE #341](https://github.com/boa-dev/boa/pull/590):
+ Ability to create multiline blocks in boa shell (@HalidOdat)
+- [FEATURE #252](https://github.com/boa-dev/boa/pull/596):
+ Implement `Date` (@jcdickinson)
+- [FEATURE #711](https://github.com/boa-dev/boa/pull/711):
+ Add support for >>>= (@arpit-saxena)
+- [FEATURE #549](https://github.com/boa-dev/boa/pull/549):
+ Implement label statements (@jasonwilliams)
+- [FEATURE #373](https://github.com/boa-dev/boa/pull/373):
+ Introduce PropertyKey for field acces (@RageKnify)
+- [FEATURE #627](https://github.com/boa-dev/boa/pull/627):
+ Feature native class objects (`NativeObject` and `Class` traits) (@HalidOdat)
+- [FEATURE #694](https://github.com/boa-dev/boa/pull/694):
+ Feature `gc` module (@HalidOdat)
+- [FEATURE #656](https://github.com/boa-dev/boa/pull/656):
+ Feature `Context` (@HalidOdat)
+- [FEATURE #673](https://github.com/boa-dev/boa/pull/673):
+ Add `#[track_caller]` to `GcObject` methods that can panic (@HalidOdat)
+- [FEATURE #661](https://github.com/boa-dev/boa/pull/661):
+ Add documentation to `GcObject` methods (@HalidOdat)
+- [FEATURE #662](https://github.com/boa-dev/boa/pull/662):
+ Implement `std::error::Error` for `GcObject` borrow errors (@HalidOdat)
+- [FEATURE #660](https://github.com/boa-dev/boa/pull/660):
+ Make `GcObject::contruct` not take 'this' (@HalidOdat)
+- [FEATURE #654](https://github.com/boa-dev/boa/pull/654):
+ Move `require_object_coercible` to `Value` (@HalidOdat)
+- [FEATURE #603](https://github.com/boa-dev/boa/pull/603):
+ Index `PropertyKey`, `Object` iterators and symbol support (@HalidOdat)
+- [FEATURE #637](https://github.com/boa-dev/boa/pull/637):
+ Feature `boa::Result` (@HalidOdat)
+- [FEATURE #625](https://github.com/boa-dev/boa/pull/625):
+ Moved value operations from `Interpreter` to `Value` (@HalidOdat)
+- [FEATURE #638](https://github.com/boa-dev/boa/pull/638):
+ Changed to `Value::to_*int32` => `Value::to_*32` (@HalidOdat)
+
+Bug Fixes:
+
+- [BUG #405](https://github.com/boa-dev/boa/issues/405):
+ Fix json.stringify symbol handling (@n14little)
+- [BUG #520](https://github.com/boa-dev/boa/pull/520):
+ Fix all `Value` operations and add unsigned shift right (@HalidOdat)
+- [BUG #529](https://github.com/boa-dev/boa/pull/529):
+ Refactor exec/expression into exec/call and exec/new (@croraf)
+- [BUG #510](https://github.com/boa-dev/boa/issues/510):
+ [[Call]] calling an undefined method does not throw (@joshwd36)
+- [BUG #493](https://github.com/boa-dev/boa/pull/493):
+ Use correct exponential representation for rational values (@Tropid)
+- [BUG #572](https://github.com/boa-dev/boa/pull/572):
+ Spec Compliant `Number.prototype.toString()`, better `Number` object formating and `-0` (@HalidOdat)
+- [BUG #599](https://github.com/boa-dev/boa/pull/599):
+ Fixed `String.prototype.indexOf()` bug, when the search string is empty (@HalidOdat)
+- [BUG #615](https://github.com/boa-dev/boa/issues/615):
+ Fix abstract relational comparison operators (@HalidOdat)
+- [BUG #608](https://github.com/boa-dev/boa/issues/608):
+ `Debug::fmt` Causes Causes a Stack Overflow (@jcdickinson)
+- [BUG #532](https://github.com/boa-dev/boa/issues/532)
+ [builtins - Object] Object.getPrototypeOf returning incorrectly (@54k1)
+- [BUG #533](https://github.com/boa-dev/boa/issues/533)
+ [exec - function] function.prototype doesn't have own constructor property pointing to this function (@54k1)
+- [BUG #641](https://github.com/boa-dev/boa/issues/641)
+ Test new_instance_should_point_to_prototype is not checked correctly (@54k1)
+- [BUG #644](https://github.com/boa-dev/boa/pull/645)
+ `undefined` constants panic on execution (@jcdickinson)
+- [BUG #631](https://github.com/boa-dev/boa/pull/645):
+ Unexpected result when applying typeof to undefined value (@jcdickinson)
+- [BUG #667](https://github.com/boa-dev/boa/pull/667):
+ Fix panic when calling function that mutates itself (@dvtkrlbs)
+- [BUG #668](https://github.com/boa-dev/boa/pull/668):
+ Fix clippy on Nightly (@dvtkrlbs)
+- [BUG #582](https://github.com/boa-dev/boa/pull/582):
+ Make `String.prototype.repeat()` ECMAScript specification compliant (@HalidOdat)
+- [BUG #541](https://github.com/boa-dev/boa/pull/541):
+ Made all `Math` methods spec compliant (@HalidOdat)
+- [BUG #597](https://github.com/boa-dev/boa/pull/597):
+ Made `String.prototype.indexOf` spec compliant. (@HalidOdat)
+- [BUG #598](https://github.com/boa-dev/boa/pull/598):
+ Made `String.prototype.lastIndexOf()` spec compliant (@HalidOdat)
+- [BUG #583](https://github.com/boa-dev/boa/pull/583):
+ Fix string prototype `trim` methods (@HalidOdat)
+- [BUG #728](https://github.com/boa-dev/boa/pull/728):
+ Fix bug when setting the length on String objects (@jasonwilliams)
+- [BUG #710](https://github.com/boa-dev/boa/pull/710):
+ Fix panic when a self mutating function is constructing an object (@HalidOdat)
+- [BUG #699](https://github.com/boa-dev/boa/pull/699):
+ Fix `Value::to_json` order of items in array (@sele9)
+- [BUG #610](https://github.com/boa-dev/boa/pull/610):
+ Fix: `String.prototype.replace` substitutions (@RageKnify)
+- [BUG #645](https://github.com/boa-dev/boa/pull/645):
+ Fix undefined constant expression evaluation (@jcdickinson)
+- [BUG #643](https://github.com/boa-dev/boa/pull/643):
+ Change default return type from null to undefined (@54k1)
+- [BUG #642](https://github.com/boa-dev/boa/pull/642):
+ Missing `constructor` field in ordinary functions (@54k1)
+- [BUG #604](https://github.com/boa-dev/boa/pull/604):
+ Missing `__proto__` field in functions instances (@54k1)
+- [BUG #561](https://github.com/boa-dev/boa/pull/561):
+ Throw a `TypeError` when a non-object is called (@joshwd36)
+- [BUG #748](https://github.com/boa-dev/boa/pull/748):
+ Fix parse error throwing a `TypeError`, instead of `SyntaxError` (@iamsaquib8)
+- [BUG #737](https://github.com/boa-dev/boa/pull/737):
+ Make `Object.toString()` spec compliant (@RageKnify)
+
+Internal Improvements:
+
+- [INTERNAL #567](https://github.com/boa-dev/boa/pull/567):
+ Add ECMAScript test suite (test262) (@Razican)
+- [INTERNAL #559](https://github.com/boa-dev/boa/pull/559):
+ New Lexer (@Lan2u @HalidOdat @Razican)
+- [INTERNAL #712](https://github.com/boa-dev/boa/pull/712):
+ Refactor: `Value::to_object` to return `GcObject` (@RageKnify)
+- [INTERNAL #544](https://github.com/boa-dev/boa/pull/544):
+ Removed `console`s dependency of `InternalState` (@HalidOdat)
+- [INTERNAL #556](https://github.com/boa-dev/boa/pull/556):
+ Added benchmark for goal symbol switching (@Razican)
+- [INTERNAL #578](https://github.com/boa-dev/boa/pull/580):
+ Extract `prototype` from internal slots (@HalidOdat)
+- [INTERNAL #553](https://github.com/boa-dev/boa/pull/553):
+ Refactor Property Descriptor flags (@HalidOdat)
+- [INTERNAL #592](https://github.com/boa-dev/boa/pull/592):
+ `RegExp` specialization (@HalidOdat)
+- [INTERNAL #626](https://github.com/boa-dev/boa/pull/626):
+ Refactor `Function` (@HalidOdat @Razican)
+- [INTERNAL #564](https://github.com/boa-dev/boa/pull/581):
+ Add benchmarks for "uglified" JS (@neeldug)
+- [INTERNAL #706](https://github.com/boa-dev/boa/pull/706):
+ Cache well known symbols (@HalidOdat)
+- [INTERNAL #723](https://github.com/boa-dev/boa/pull/723):
+ Add fast path for string concatenation (@RageKnify)
+- [INTERNAL #689](https://github.com/boa-dev/boa/pull/689):
+ Move `object` module to root (@HalidOdat)
+- [INTERNAL #684](https://github.com/boa-dev/boa/pull/684):
+ Move `property` module to root (@HalidOdat)
+- [INTERNAL #674](https://github.com/boa-dev/boa/pull/674):
+ Move `value` module to root (@HalidOdat)
+- [INTERNAL #693](https://github.com/boa-dev/boa/pull/693):
+ Rename `Object::prototype()` and `Object::set_prototype()` (@RageKnify)
+- [INTERNAL #665](https://github.com/boa-dev/boa/pull/665):
+ `approx_eq!` macro for `expm1` tests. (@neeldung)
+- [INTERNAL #581](https://github.com/boa-dev/boa/pull/581):
+ Added CLEAN_JS and MINI_JS benches (@neeldung)
+- [INTERNAL #640](https://github.com/boa-dev/boa/pull/640):
+ Benchmark refactor (@neeldung)
+- [INTERNAL #635](https://github.com/boa-dev/boa/pull/635):
+ Add missing ops to exec module (@jarredholman)
+- [INTERNAL #616](https://github.com/boa-dev/boa/pull/616):
+ Remove `Value::as_num_to_power()` (@HalidOdat)
+- [INTERNAL #601](https://github.com/boa-dev/boa/pull/601):
+ Removed internal_slots from object (@HalidOdat)
+- [INTERNAL #560](https://github.com/boa-dev/boa/pull/560):
+ Added benchmarks for full program execution (@Razican)
+- [INTERNAL #547](https://github.com/boa-dev/boa/pull/547):
+ Merged `create` into `init` for builtins (@HalidOdat)
+- [INTERNAL #538](https://github.com/boa-dev/boa/pull/538):
+ Cleanup and added test for `String.prototype.concat` (@HalidOdat)
+- [INTERNAL #739](https://github.com/boa-dev/boa/pull/739):
+ Add release action (@jasonwilliams)
+- [INTERNAL #744](https://github.com/boa-dev/boa/pull/744):
+ Add MacOS check and test to CI (@neeldug)
+
+# [# 0.9.0 (2020-07-03) - Move to Organisation, 78% faster execution time](https://github.com/boa-dev/boa/compare/v0.8.0...v0.9.0)
+
+Feature Enhancements:
+
+- [FEATURE #414](https://github.com/boa-dev/boa/issues/414):
+ Implement `Number` object constants (@Lan2u) (@HalidOdat)
+- [FEATURE #345](https://github.com/boa-dev/boa/issues/345):
+ Implement the optional `replacer` parameter in `JSON.stringify( value[, replacer [, space] ] )` (@n14little)
+- [FEATURE #480](https://github.com/boa-dev/boa/issues/480):
+ Implement global `Infinity` property (@AnirudhKonduru)
+- [FEATURE #410](https://github.com/boa-dev/boa/pull/410):
+ Add support for the reviver function to JSON.parse (@abhijeetbhagat)
+- [FEATURE #425](https://github.com/boa-dev/boa/pull/425):
+ Specification compliant `ToString` (`to_string`) (@HalidOdat)
+- [FEATURE #442](https://github.com/boa-dev/boa/pull/442):
+ Added `TypeError` implementation (@HalidOdat)
+- [FEATURE #450](https://github.com/boa-dev/boa/pull/450):
+ Specification compliant `ToBigInt` (`to_bigint`) (@HalidOdat)
+- [FEATURE #455](https://github.com/boa-dev/boa/pull/455):
+ TemplateLiteral Basic lexer implementation (@croraf)
+- [FEATURE #447](https://github.com/boa-dev/boa/issues/447):
+ parseInt, parseFloat implementation (@Lan2u)
+- [FEATURE #468](https://github.com/boa-dev/boa/pull/468):
+ Add BigInt.asIntN() and BigInt.asUintN() functions (@Tropid)
+- [FEATURE #428](https://github.com/boa-dev/boa/issues/428):
+ [Feature Request] - Create benchmark for Array manipulation (@abhijeetbhagat)
+- [FEATURE #439](https://github.com/boa-dev/boa/issues/439):
+ Implement break handling in switch statements (@Lan2u)
+- [FEATURE #301](https://github.com/boa-dev/boa/issues/301):
+ Implementing the switch statement in the new parser (@Lan2u)
+- [FEATURE #120](https://github.com/boa-dev/boa/issues/120):
+ Implement `globalThis` (@zanayr)
+- [FEATURE #513](https://github.com/boa-dev/boa/issues/513):
+ Implement `Object.is()` method (@tylermorten)
+- [FEATURE #481](https://github.com/boa-dev/boa/issues/481):
+ Implement global `undefined` property (@croraf)
+
+Bug Fixes:
+
+- [BUG #412](https://github.com/boa-dev/boa/pull/412):
+ Fixed parsing if statement without else block preceded by a newline (@HalidOdat)
+- [BUG #409](https://github.com/boa-dev/boa/pull/409):
+ Fix function object constructable/callable (@HalidOdat)
+- [BUG #403](https://github.com/boa-dev/boa/issues/403)
+ `Value::to_json()` does not handle `undefined` correctly (@n14little)
+- [BUG #443](https://github.com/boa-dev/boa/issues/443):
+ HasOwnProperty should call GetOwnProperty and not GetProperty (@n14little)
+- [BUG #210](https://github.com/boa-dev/boa/issues/210):
+ builtinfun.length undefined (@Croraf)
+- [BUG #466](https://github.com/boa-dev/boa/issues/466):
+ Change `ToPrimitive()` (`to_primitive()`) hint to be an enum, instead of string (@HalidOdat)
+- [BUG #421](https://github.com/boa-dev/boa/issues/421):
+ `NaN` is lexed as a number, not as an identifier (@croraf)
+- [BUG #454](https://github.com/boa-dev/boa/issues/454):
+ Function declaration returns the function, it should return `undefined` (@croraf)
+- [BUG #482](https://github.com/boa-dev/boa/issues/482):
+ Field access should propagate the exception (`Err(_)`) (@neeldug)
+- [BUG #463](https://github.com/boa-dev/boa/issues/463):
+ Use of undefined variable should throw an error (@croraf)
+- [BUG #502](https://github.com/boa-dev/boa/pull/502):
+ Fixed global objects initialization order (@HalidOdat)
+- [BUG #509](https://github.com/boa-dev/boa/issues/509):
+ JSON.stringify(undefined) panics (@n14little)
+- [BUG #514](https://github.com/boa-dev/boa/issues/514):
+ Clean up `Math` Methods (@n14little)
+- [BUG #511](https://github.com/boa-dev/boa/issues/511):
+ [Call] Usage of "this" in methods is not supported (@jasonwilliams)
+
+Internal Improvements
+
+- [INTERNAL #435](https://github.com/boa-dev/boa/issues/435):
+ Optimize type comparisons (@Lan2u)
+- [INTERNAL #296](https://github.com/boa-dev/boa/issues/296):
+ using measureme for profiling the interpreter (@jasonwilliams)
+- [INTERNAL #419](https://github.com/boa-dev/boa/pull/419):
+ Object specialization (fast paths for many objects) (@HalidOdat)
+- [INTERNAL #392](https://github.com/boa-dev/boa/pull/392):
+ Execution and Node modulization (@Razican)
+- [INTERNAL #465](https://github.com/boa-dev/boa/issues/465):
+ Refactoring Value (decouple `Gc` from `Value`) (@HalidOdat)
+- [INTERNAL #416](https://github.com/boa-dev/boa/pull/416) & [INTERNAL #423](https://github.com/boa-dev/boa/commit/c8218dd91ef3181e048e7a2659a4fbf8d53c7174):
+ Update links to boa-dev (@pedropaulosuzuki)
+- [INTERNAL #378](https://github.com/boa-dev/boa/issues/378):
+ Code Coverage! (@Lan2u)
+- [INTERNAL #431](https://github.com/boa-dev/boa/pull/431):
+ Updates to PR Benchmarks (@Razican)
+- [INTERNAL #427 #429 #430](https://github.com/boa-dev/boa/commit/64dbf13afd15f12f958daa87a3d236dc9af1a9aa):
+ Added new benchmarks (@Razican)
+
+# [# 0.8.0 (2020-05-23) - BigInt, Modularized Parser, Faster Hashing](https://github.com/boa-dev/boa/compare/v0.7.0...v0.8.0)
+
+`v0.8.0` brings more language implementations, such as do..while, function objects and also more recent EcmaScript additions, like BigInt.
+We have now moved the Web Assembly build into the `wasm` package, plus added a code of conduct for those contributing.
+
+The parser has been even more modularized in this release making it easier to add new parsing rules.
+
+Boa has migrated it's object implemention to FXHash which brings much improved results over the built-in Rust hashmaps (at the cost of less DOS Protection).
+
+Feature Enhancements:
+
+- [FEATURE #121](https://github.com/boa-dev/boa/issues/121):
+ `BigInt` Implemented (@HalidOdat)
+- [FEATURE #293](https://github.com/boa-dev/boa/pull/293):
+ Improved documentation of all modules (@HalidOdat)
+- [FEATURE #302](https://github.com/boa-dev/boa/issues/302):
+ Implement do..while loop (@ptasz3k)
+- [FEATURE #318](https://github.com/boa-dev/boa/pull/318):
+ Added continous integration for windows (@HalidOdat)
+- [FEATURE #290](https://github.com/boa-dev/boa/pull/290):
+ Added more build profiles (@Razican)
+- [FEATURE #323](https://github.com/boa-dev/boa/pull/323):
+ Aded more benchmarks (@Razican)
+- [FEATURE #326](https://github.com/boa-dev/boa/pull/326):
+ Rename Boa CLI (@sphinxc0re)
+- [FEATURE #312](https://github.com/boa-dev/boa/pull/312):
+ Added jemallocator for linux targets (@Razican)
+- [FEATURE #339](https://github.com/boa-dev/boa/pull/339):
+ Improved Method parsing (@muskuloes)
+- [FEATURE #352](https://github.com/boa-dev/boa/pull/352):
+ create boa-wasm package (@muskuloes)
+- [FEATURE #304](https://github.com/boa-dev/boa/pull/304):
+ Modularized parser
+- [FEATURE #141](https://github.com/boa-dev/boa/issues/141):
+ Implement function objects (@jasonwilliams)
+- [FEATURE #365](https://github.com/boa-dev/boa/issues/365):
+ Implement for loop execution (@Razican)
+- [FEATURE #356](https://github.com/boa-dev/boa/issues/356):
+ Use Fx Hash to speed up hash maps in the compiler (@Razican)
+- [FEATURE #321](https://github.com/boa-dev/boa/issues/321):
+ Implement unary operator execution (@akryvomaz)
+- [FEATURE #379](https://github.com/boa-dev/boa/issues/379):
+ Automatic auditing of Boa (@n14little)
+- [FEATURE #264](https://github.com/boa-dev/boa/issues/264):
+ Implement `this` (@jasonwilliams)
+- [FEATURE #395](https://github.com/boa-dev/boa/pull/395):
+ impl abstract-equality-comparison (@hello2dj)
+- [FEATURE #359](https://github.com/boa-dev/boa/issues/359):
+ impl typeof (@RestitutorOrbis)
+- [FEATURE #390](https://github.com/boa-dev/boa/pull/390):
+ Modularize try statement parsing (@abhijeetbhagat)
+
+Bug fixes:
+
+- [BUG #308](https://github.com/boa-dev/boa/issues/308):
+ Assignment operator not working in tests (a = a +1) (@ptasz3k)
+- [BUG #322](https://github.com/boa-dev/boa/issues/322):
+ Benchmarks are failing in master (@Razican)
+- [BUG #325](https://github.com/boa-dev/boa/pull/325):
+ Put JSON functions on the object, not the prototype (@coolreader18)
+- [BUG #331](https://github.com/boa-dev/boa/issues/331):
+ We only get `Const::Num`, never `Const::Int` (@HalidOdat)
+- [BUG #209](https://github.com/boa-dev/boa/issues/209):
+ Calling `new Array` with 1 argument doesn't work properly (@HalidOdat)
+- [BUG #266](https://github.com/boa-dev/boa/issues/266):
+ Panic assigning named function to variable (@Razican)
+- [BUG #397](https://github.com/boa-dev/boa/pull/397):
+ fix `NaN` is lexed as identifier, not as a number (@attliaLin)
+- [BUG #362](https://github.com/boa-dev/boa/pull/362):
+ Remove Monaco Editor Webpack Plugin and Manually Vendor Editor Workers (@subhankar-panda)
+- [BUG #406](https://github.com/boa-dev/boa/pull/406):
+ Dependency Upgrade (@Razican)
+- [BUG #407](https://github.com/boa-dev/boa/pull/407):
+ `String()` wasn't defaulting to empty string on call (@jasonwilliams)
+- [BUG #404](https://github.com/boa-dev/boa/pull/404):
+ Fix for 0 length new String(@tylermorten)
+
+Code Of Conduct:
+
+- [COC #384](https://github.com/boa-dev/boa/pull/384):
+ Code of conduct added (@Razican)
+
+Security:
+
+- [SEC #391](https://github.com/boa-dev/boa/pull/391):
+ run security audit daily at midnight. (@n14little)
+
+# [# 0.7.0 (2020-04-13) - New Parser is 67% faster](https://github.com/boa-dev/boa/compare/v0.6.0...v0.7.0)
+
+`v0.7.0` brings a REPL, Improved parser messages and a new parser!
+This is now the default behaviour of Boa, so running Boa without a file argument will bring you into a javascript shell.
+Tests have also been moved to their own files, we had a lot of tests in some modules so it was time to separate.
+
+## New Parser
+
+Most of the work in this release has been on rewriting the parser. A big task taken on by [HalidOdat](https://github.com/HalidOdat), [Razican](https://github.com/Razican) and [myself](https://github.com/jasonwilliams).
+
+The majority of the old parser was 1 big function (called [`parse`](https://github.com/boa-dev/boa/blob/019033eff066e8c6ba9456139690eb214a0bf61d/boa/src/syntax/parser.rs#L353)) which had some pattern matching on each token coming in.\
+The easy branches could generate expressions (which were basically AST Nodes), the more involved branches would recursively call into the same function, until eventually you had an expression generated.
+
+This only worked so far, eventually debugging parsing problems were difficult, also more bugs were being raised against the parser which couldn't be fixed.
+
+We decided to break the parser into more of a state-machine. The initial decision for this was inspired by [Fedor Indutny](https://github.com/indutny) who did a talk at (the last) JSConf EU about how he broke up the old node-parser to make it more maintanable. He goes into more detail here https://www.youtube.com/watch?v=x3k_5Mi66sY&feature=youtu.be&t=530
+
+The new parser has functions to match the states of parsing in the spec. For example https://tc39.es/ecma262/#prod-VariableDeclaration has a matching function `read_variable_declaration`. This not only makes it better to maintain but easier for new contributors to get involed, as following the parsing logic of the spec is easier than before.
+
+Once finished some optimisations were added by [HalidOdat](https://github.com/HalidOdat) to use references to the tokens instead of cloning them each time we take them from the lexer.\
+This works because the tokens live just as long as the parser operations do, so we don't need to copy the tokens.\
+What this brings is a huge performance boost, the parser is 67% faster than before!
+
+
+
+Feature enhancements:
+
+- [FEATURE #281](https://github.com/boa-dev/boa/pull/281):
+ Rebuild the parser (@jasonwilliams, @Razican, @HalidOdat)
+- [FEATURE #278](https://github.com/boa-dev/boa/pull/278):
+ Added the ability to dump the token stream or ast in bin. (@HalidOdat)
+- [FEATURE #253](https://github.com/boa-dev/boa/pull/253):
+ Implement Array.isArray (@cisen)
+- [FEATURE](https://github.com/boa-dev/boa/commit/edab5ca6cc10d13265f82fa4bc05d6b432a362fc)
+ Switch to normal output instead of debugged output (stdout/stdout) (@jasonwilliams)
+- [FEATURE #258](https://github.com/boa-dev/boa/pull/258):
+ Moved test modules to their own files (@Razican)
+- [FEATURE #267](https://github.com/boa-dev/boa/pull/267):
+ Add print & REPL functionality to CLI (@JohnDoneth)
+- [FEATURE #268](https://github.com/boa-dev/boa/pull/268):
+ Addition of forEach() (@jasonwilliams) (@xSke)
+- [FEATURE #262](https://github.com/boa-dev/boa/pull/262):
+ Implement Array.prototype.filter (@Nickforall)
+- [FEATURE #261](https://github.com/boa-dev/boa/pull/261):
+ Improved parser error messages (@Razican)
+- [FEATURE #277](https://github.com/boa-dev/boa/pull/277):
+ Add a logo to the project (@HalidOdat)
+- [FEATURE #260](https://github.com/boa-dev/boa/pull/260):
+ Add methods with f64 std equivelant to Math object (@Nickforall)
+
+Bug fixes:
+
+- [BUG #249](https://github.com/boa-dev/boa/pull/249):
+ fix(parser): handle trailing comma in object literals (@gomesalexandre)
+- [BUG #244](https://github.com/boa-dev/boa/pull/244):
+ Fixed more Lexer Panics (@adumbidiot)
+- [BUG #256](https://github.com/boa-dev/boa/pull/256):
+ Fixed comments lexing (@Razican)
+- [BUG #251](https://github.com/boa-dev/boa/issues/251):
+ Fixed empty returns (@Razican)
+- [BUG #272](https://github.com/boa-dev/boa/pull/272):
+ Fix parsing of floats that start with a zero (@Nickforall)
+- [BUG #240](https://github.com/boa-dev/boa/issues/240):
+ Fix parser panic
+- [BUG #273](https://github.com/boa-dev/boa/issues/273):
+ new Class().method() has incorrect precedence
+
+Documentation Updates:
+
+- [DOC #297](https://github.com/boa-dev/boa/pull/297):
+ Better user contributed documentation
+
+# [# 0.6.0 (2020-02-14) - Migration to Workspace Architecture + lexer/parser improvements](https://github.com/boa-dev/boa/compare/v0.5.1...v0.6.0)
+
+The lexer has had several fixes in this release, including how it parses numbers, scientific notation should be improved.
+On top of that the lexer no longer panics on errors including Syntax Errors (thanks @adumbidiot), instead you get some output on where the error happened.
+
+## Moving to a workspace architecture
+
+Boa offers both a CLI and a library, initially these were all in the same binary. The downside is
+those who want to embed boa as-is end up with all of the command-line dependencies.
+So the time has come to separate out the two, this is normal procedure, this should be analogous to ripgrep
+and the regex crate.
+Cargo has great support for workspaces, so this shouldn't be an issue.
+
+## Benchmarks
+
+We now have [benchmarks which run against master](https://boa-dev.github.io/boa/dev/bench)!
+Thanks to Github Actions these will run automatically a commit is merged.
+
+Feature enhancements:
+
+- [FEATURE #218](https://github.com/boa-dev/boa/pull/218):
+ Implement Array.prototype.toString (@cisen)
+- [FEATURE #216](https://github.com/boa-dev/boa/commit/85e9a3526105a600358bd53811e2b022987c6fc8):
+ Keep accepting new array elements after spread.
+- [FEATURE #220](https://github.com/boa-dev/boa/pull/220):
+ Documentation updates. (@croraf)
+- [FEATURE #226](https://github.com/boa-dev/boa/pull/226):
+ add parser benchmark for expressions. (@jasonwilliams)
+- [FEATURE #217](https://github.com/boa-dev/boa/pull/217):
+ String.prototype.replace() implemented
+- [FEATURE #247](https://github.com/boa-dev/boa/pull/247):
+ Moved to a workspace architecture (@Razican)
+
+Bug fixes:
+
+- [BUG #222](https://github.com/boa-dev/boa/pull/222):
+ Fixed clippy errors (@IovoslavIovchev)
+- [BUG #228](https://github.com/boa-dev/boa/pull/228):
+ [lexer: single-line-comment] Fix bug when single line comment is last line of file (@croraf)
+- [BUG #229](https://github.com/boa-dev/boa/pull/229):
+ Replace error throwing with panic in "Lexer::next()" (@croraf)
+- [BUG #232/BUG #238](https://github.com/boa-dev/boa/pull/232):
+ Clippy checking has been scaled right back to just Perf and Style (@jasonwilliams)
+- [BUG #227](https://github.com/boa-dev/boa/pull/227):
+ Array.prototype.toString should be called by ES value (@cisen)
+- [BUG #242](https://github.com/boa-dev/boa/pull/242):
+ Fixed some panics in the lexer (@adumbidiot)
+- [BUG #235](https://github.com/boa-dev/boa/pull/235):
+ Fixed arithmetic operations with no space (@gomesalexandre)
+- [BUG #245](https://github.com/boa-dev/boa/pull/245):
+ Fixed parsing of floats with scientific notation (@adumbidiot)
+
+# [# 0.5.1 (2019-12-02) - Rest / Spread (almost)](https://github.com/boa-dev/boa/compare/v0.5.0...v0.5.1)
+
+Feature enhancements:
+
+- [FEATURE #151](https://github.com/boa-dev/boa/issues/151):
+ Implement the Rest/Spread operator (functions and arrays).
+- [FEATURE #193](https://github.com/boa-dev/boa/issues/193):
+ Implement macro for setting builtin functions
+- [FEATURE #211](https://github.com/boa-dev/boa/pull/211):
+ Better Display support for all Objects (pretty printing)
+
+# [# 0.5.0 (2019-11-06) - Hacktoberfest Release](https://github.com/boa-dev/boa/compare/v0.4.0...v0.5.1)
+
+Feature enhancements:
+
+- [FEATURE #119](https://github.com/boa-dev/boa/issues/119):
+ Introduce realm struct to hold realm context and global object.
+- [FEATURE #89](https://github.com/boa-dev/boa/issues/89):
+ Implement exponentiation operator. Thanks @arbroween
+- [FEATURE #47](https://github.com/boa-dev/boa/issues/47):
+ Add tests for comments in source code. Thanks @Emanon42
+- [FEATURE #137](https://github.com/boa-dev/boa/issues/137):
+ Use Monaco theme for the demo page
+- [FEATURE #114](https://github.com/boa-dev/boa/issues/114):
+ String.match(regExp) is implemented (@muskuloes)
+- [FEATURE #115](https://github.com/boa-dev/boa/issues/115):
+ String.matchAll(regExp) is implemented (@bojan88)
+- [FEATURE #163](https://github.com/boa-dev/boa/issues/163):
+ Implement Array.prototype.every() (@letmutx)
+- [FEATURE #165](https://github.com/boa-dev/boa/issues/165):
+ Implement Array.prototype.find() (@letmutx)
+- [FEATURE #166](https://github.com/boa-dev/boa/issues/166):
+ Implement Array.prototype.findIndex() (@felipe-fg)
+- [FEATURE #39](https://github.com/boa-dev/boa/issues/39):
+ Implement block scoped variable declarations (@barskern)
+- [FEATURE #161](https://github.com/boa-dev/boa/pull/161):
+ Enable obj[key] = value syntax.
+- [FEATURE #179](https://github.com/boa-dev/boa/issues/179):
+ Implement the Tilde operator (@letmutx)
+- [FEATURE #189](https://github.com/boa-dev/boa/pull/189):
+ Implement Array.prototype.includes (incl tests) (@simonbrahan)
+- [FEATURE #180](https://github.com/boa-dev/boa/pull/180):
+ Implement Array.prototype.slice (@muskuloes @letmutx)
+- [FEATURE #152](https://github.com/boa-dev/boa/issues/152):
+ Short Function syntax (no arguments)
+- [FEATURE #164](https://github.com/boa-dev/boa/issues/164):
+ Implement Array.prototype.fill() (@bojan88)
+- Array tests: Tests implemented for shift, unshift and reverse, pop and push (@muskuloes)
+- Demo page has been improved, new font plus change on input. Thanks @WofWca
+- [FEATURE #182](https://github.com/boa-dev/boa/pull/182):
+ Implement some Number prototype methods (incl tests) (@pop)
+- [FEATURE #34](https://github.com/boa-dev/boa/issues/34):
+ Number object and Constructore are implemented (including methods) (@pop)
+- [FEATURE #194](https://github.com/boa-dev/boa/pull/194):
+ Array.prototype.map (@IovoslavIovchev)
+- [FEATURE #90](https://github.com/boa-dev/boa/issues/90):
+ Symbol Implementation (@jasonwilliams)
+
+Bug fixes:
+
+- [BUG #113](https://github.com/boa-dev/boa/issues/113):
+ Unassigned variables have default of undefined (@pop)
+- [BUG #61](https://github.com/boa-dev/boa/issues/61):
+ Clippy warnings/errors fixed (@korpen)
+- [BUG #147](https://github.com/boa-dev/boa/pull/147):
+ Updated object global
+- [BUG #154](https://github.com/boa-dev/boa/issues/154):
+ Correctly handle all whitespaces within the lexer
+- Tidy up Globals being added to Global Object. Thanks @DomParfitt
+
+# 0.4.0 (2019-09-25)
+
+v0.4.0 brings quite a big release. The biggest feature to land is the support of regular expressions.
+Functions now have the arguments object supported and we have a [`debugging`](docs/debugging.md) section in the docs.
+
+Feature enhancements:
+
+- [FEATURE #6](https://github.com/boa-dev/boa/issues/6):
+ Support for regex literals. (Big thanks @999eagle)
+- [FEATURE #13](https://github.com/boa-dev/boa/issues/13):
+ toLowerCase, toUpperCase, substring, substr and valueOf implemented (thanks @arbroween)
+- Support for `arguments` object within functions
+- `StringData` instead of `PrimitieData` to match spec
+- Native function signatures changed, operations added to match spec
+- Primitives can now be boxed/unboxed when methods are ran on them
+- Spelling edits (thanks @someguynamedmatt)
+- Ability to set global values before interpreter starts (thanks @999eagle)
+- Assign operators implemented (thanks @oll3)
+-
+
+Bug fixes:
+
+- [BUG #57](https://github.com/boa-dev/boa/issues/57):
+ Fixed issue with stackoverflow by implementing early returns.
+- Allow to re-assign value to an existing binding. (Thanks @oll3)
+
+# 0.3.0 (2019-07-26)
+
+- UnexpectedKeyword(Else) bug fixed https://github.com/boa-dev/boa/issues/38
+- Contributing guide added
+- Ability to specify file - Thanks @callumquick
+- Travis fixes
+- Parser Tests - Thanks @Razican
+- Migrate to dyn traits - Thanks @Atul9
+- Added implementations for Array.prototype: concat(), push(), pop() and join() - Thanks @callumquick
+- Some clippy Issues fixed - Thanks @Razican
+- Objects have been refactored to use structs which are more closely aligned with the specification
+- Benchmarks have been added
+- String and Array specific console.log formats - Thanks @callumquick
+- isPropertyKey implementation added - Thanks @KrisChambers
+- Unit Tests for Array and Strings - Thanks @GalAster
+- typo fix - Thanks @palerdot
+- dist cleanup, thanks @zgotsch
+
+# 0.2.1 (2019-06-30)
+
+Some String prototype methods are implemented.
+Thanks to @lennartbuit we have
+trim/trimStart/trimEnd added to the string prototype
+
+Feature enhancements:
+
+- [String.prototype.concat ( ...args )](https://tc39.es/ecma262/#sec-string.prototype.slice)
+- [String.prototype.endsWith ( searchString [ , endPosition ] )](https://tc39.es/ecma262/#sec-string.prototype.endswith)
+- [String.prototype.includes ( searchString [ , position ] )](https://tc39.es/ecma262/#sec-string.prototype.includes)
+- [String.prototype.indexOf ( searchString [ , position ] )](https://tc39.es/ecma262/#sec-string.prototype.indexof)
+- [String.prototype.lastIndexOf ( searchString [ , position ] )](https://tc39.es/ecma262/#sec-string.prototype.lastindexof)
+- [String.prototype.repeat ( count )](https://tc39.es/ecma262/#sec-string.prototype.repeat)
+- [String.prototype.slice ( start, end )](https://tc39.es/ecma262/#sec-string.prototype.slice)
+- [String.prototype.startsWith ( searchString [ , position ] )](https://tc39.es/ecma262/#sec-string.prototype.startswith)
+
+Bug fixes:
+
+- Plenty
+
+# 0.2.0 (2019-06-10)
+
+Working state reached
+
+- Tests on the lexer, conforms with puncturators and keywords from TC39 specification
+- wasm-bindgen added with working demo in Web Assembly
+- snapshot of boa in a working state for the first time
diff --git a/javascript-engine/external/boa/CODE_OF_CONDUCT.md b/javascript-engine/external/boa/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..a3654c1
--- /dev/null
+++ b/javascript-engine/external/boa/CODE_OF_CONDUCT.md
@@ -0,0 +1,133 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual
+identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+- Focusing on what is best not just for us as individuals, but for the overall
+ community
+
+Examples of unacceptable behavior include:
+
+- The use of sexualized language or imagery, and sexual attention or advances of
+ any kind
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email address,
+ without their explicit permission
+- Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+[discord](https://discord.gg/tUFFk9Y) by contacting anyone in the _@boa_dev_
+group (check the yellow usernames).
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series of
+actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or permanent
+ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within the
+community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.1, available at
+[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder][mozilla coc].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][faq]. Translations are available at
+[https://www.contributor-covenant.org/translations][translations].
+
+[homepage]: https://www.contributor-covenant.org
+[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
+[mozilla coc]: https://github.com/mozilla/diversity
+[faq]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
diff --git a/javascript-engine/external/boa/CONTRIBUTING.md b/javascript-engine/external/boa/CONTRIBUTING.md
new file mode 100644
index 0000000..407431c
--- /dev/null
+++ b/javascript-engine/external/boa/CONTRIBUTING.md
@@ -0,0 +1,115 @@
+# Contributing to Boa
+
+Boa welcomes contribution from everyone. Here are the guidelines if you are
+thinking of helping out:
+
+## Contributions
+
+Contributions to Boa or its dependencies should be made in the form of GitHub
+pull requests. Each pull request will be reviewed by a core contributor
+(someone with permission to land patches) and either landed in the main tree or
+given feedback for changes that would be required. All contributions should
+follow this format.
+
+Should you wish to work on an issue, please claim it first by commenting on
+the GitHub issue that you want to work on it. This is to prevent duplicated
+efforts from contributors on the same issue.
+
+Head over to [issues][issues] and check for "good first issue" labels to find
+good tasks to start with. If you come across words or jargon that do not make
+sense, please ask!
+
+If you don't already have Rust installed [_rustup_][rustup] is the recommended
+tool to use. It will install Rust and allow you to switch between _nightly_,
+_stable_ and _beta_. You can also install additional components. In Linux, you
+can run:
+
+```shell
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+```
+
+Then simply clone this project and `cargo build`.
+
+### Running the compiler
+
+You can execute a Boa console by running `cargo run`, and you can compile a list
+of JavaScript files by running `cargo run -- file1.js file2.js` and so on.
+
+### Debugging
+
+Knowing how to debug the interpreter should help you resolve problems quite quickly.
+See [Debugging](./docs/debugging.md).
+
+### Web Assembly
+
+If you want to develop on the web assembly side you can run `yarn serve` and then go
+to .
+
+### boa-unicode
+
+Boa uses the library `boa-unicode` to query Unicode character properties and classes in lexer and parser. See [boa_unicode/README.md](./boa_unicode/README.md) for development and more information.
+
+### Setup
+
+#### VSCode Plugins
+
+Either the [Rust (RLS)][rls_vscode] or the [Rust Analyzer][rust-analyzer_vscode]
+extensions are preferred. RLS is easier to set up but some of the development is
+moving towards Rust Analyzer. Both of these plugins will help you with your Rust
+Development
+
+#### Tasks
+
+There are some pre-defined tasks in [tasks.json](.vscode/tasks.json)
+
+- Build - shift+cmd/ctrl+b should build and run cargo. You should be able to make changes and run this task.
+- Test - (there is no shortcut, you'll need to make one) - Runs `Cargo Test`.
+ I personally set a shortcut of shift+cmd+option+T (or shift+ctrl+alt+T)
+
+If you don't want to install everything on your machine, you can use the Dockerfile.
+Start VSCode in container mode (you may need the docker container plugin) and use the Dockerfile.
+
+## Testing
+
+Boa provides its own test suite, and can also run the official ECMAScript test suite. To run the Boa test
+suite, you can just run the normal `cargo test`, and to run the full ECMAScript test suite, you can run it
+with this command:
+
+```shell
+cargo run --release --bin boa_tester -- run -v 2> error.log
+```
+
+Note that this requires the `test262` submodule to be checked out, so you will need to run the following first:
+
+```shell
+git submodule init && git submodule update
+```
+
+This will run the test suite in verbose mode (you can remove the `-v` part to run it in non-verbose mode),
+and output nice colorings in the terminal. It will also output any panic information into the `error.log` file.
+
+You can get some more verbose information that tells you the exact name of each test that is being run, useful
+for debugging purposes by setting up the verbose flag twice, for example `-vv`. If you want to know the output of
+each test that is executed, you can use the triple verbose (`-vvv`) flag.
+
+If you want to only run one sub-suite or even one test (to just check if you fixed/broke something specific),
+you can do it with the `-s` parameter, and then passing the path to the sub-suite or test that you want to run. Note
+that the `-s` parameter value should be a path relative to the `test262` directory. For example, to run the number
+type tests, use `-s test/language/types/number`.
+
+Finally, if you're using the verbose flag and running a sub suite with a small number of tests, then the output will
+be more readable if you disable parallelism with the `-d` flag. All together it might look something like:
+
+```shell
+cargo run --release --bin boa_tester -- run -vv -d -s test/language/types/number 2> error.log
+```
+
+## Communication
+
+We have a Discord server, feel free to ask questions here:
+
+
+[issues]: https://github.com/boa-dev/boa/issues
+[rustup]: https://rustup.rs/
+[rls_vscode]: https://marketplace.visualstudio.com/items?itemName=rust-lang.rust
+[rust-analyzer_vscode]: https://marketplace.visualstudio.com/items?itemName=matklad.rust-analyzer
diff --git a/javascript-engine/external/boa/Cargo.toml b/javascript-engine/external/boa/Cargo.toml
new file mode 100644
index 0000000..8813a82
--- /dev/null
+++ b/javascript-engine/external/boa/Cargo.toml
@@ -0,0 +1,64 @@
+[workspace]
+members = [
+ "boa_cli",
+ "boa_engine",
+ "boa_ast",
+ "boa_parser",
+ "boa_gc",
+ "boa_interner",
+ "boa_profiler",
+ "boa_tester",
+ "boa_unicode",
+ "boa_wasm",
+ "boa_examples",
+ "boa_macros",
+ "boa_icu_provider",
+]
+
+[workspace.package]
+edition = "2021"
+version = "0.16.0"
+rust-version = "1.66"
+authors = ["boa-dev"]
+repository = "https://github.com/boa-dev/boa"
+license = "Unlicense/MIT"
+description = "Boa is a Javascript lexer, parser and Just-in-Time compiler written in Rust. Currently, it has support for some of the language."
+
+[workspace.dependencies]
+boa_engine = { version = "0.16.0", path = "boa_engine" }
+boa_interner = { version = "0.16.0", path = "boa_interner" }
+boa_gc = { version = "0.16.0", path = "boa_gc" }
+boa_profiler = { version = "0.16.0", path = "boa_profiler" }
+boa_unicode = { version = "0.16.0", path = "boa_unicode" }
+boa_macros = { version = "0.16.0", path = "boa_macros" }
+boa_ast = { version = "0.16.0", path = "boa_ast" }
+boa_parser = { version = "0.16.0", path = "boa_parser" }
+boa_icu_provider = { version = "0.16.0", path = "boa_icu_provider" }
+
+[workspace.metadata.workspaces]
+allow_branch = "main"
+
+# The ci profile, designed to reduce size of target directory
+[profile.ci]
+inherits = "dev"
+debug = false
+incremental = false
+
+# The release profile, used for `cargo build --release`.
+[profile.release]
+# Enables "fat" LTO, for faster release builds
+lto = "fat"
+# Makes sure that all code is compiled together, for LTO
+codegen-units = 1
+
+# The test profile, used for `cargo test`.
+[profile.test]
+# Enables thin local LTO and some optimizations.
+opt-level = 1
+
+# The benchmark profile, used for `cargo bench`.
+[profile.bench]
+# Enables "fat" LTO, for faster benchmark builds
+lto = "fat"
+# Makes sure that all code is compiled together, for LTO
+codegen-units = 1
diff --git a/javascript-engine/external/boa/LICENSE-MIT b/javascript-engine/external/boa/LICENSE-MIT
new file mode 100644
index 0000000..d87a9e8
--- /dev/null
+++ b/javascript-engine/external/boa/LICENSE-MIT
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Jason Williams
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/javascript-engine/external/boa/LICENSE-UNLICENSE b/javascript-engine/external/boa/LICENSE-UNLICENSE
new file mode 100644
index 0000000..cf1ab25
--- /dev/null
+++ b/javascript-engine/external/boa/LICENSE-UNLICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to
diff --git a/javascript-engine/external/boa/README.md b/javascript-engine/external/boa/README.md
new file mode 100644
index 0000000..8909738
--- /dev/null
+++ b/javascript-engine/external/boa/README.md
@@ -0,0 +1,115 @@
+# Boa
+
+