mirror of https://github.com/boa-dev/boa.git
Tree:
040e51a3fc
add-vhs-ci
benchmarks
control-flow-graph
expect-lints
feature/node_span
feature/snapshot
features
gh-readonly-queue/main/pr-2877-b0ddf5eed00a53281d67fc7d846233fc0d99ce9c
gh-readonly-queue/main/pr-3144-8e48cec73fae708420b9af88813d4870243c491a
main
nan-boxing
optimization/static-shapes
real_conformance
reduce-environment-allocations
refactor/interner
refactor/register-vm
releases/0.17
releases/0.19
semver_checks
tco
utility-crate
wasm-debugger
v0.10
v0.11
v0.12
v0.13
v0.14
v0.15
v0.16
v0.17
v0.17.1
v0.17.2
v0.17.3
v0.18
v0.19
v0.19.1
v0.2.0
v0.2.1
v0.3.0
v0.4.0
v0.5.0
v0.5.1
v0.6.0
v0.7.0
v0.8.0
v0.9.0
${ noResults }
414 Commits (040e51a3fc944495f59ee04668e1be64c78bb28c)
Author | SHA1 | Message | Date |
---|---|---|---|
dependabot[bot] | 7a5da521d2 |
Bump once_cell from 1.12.0 to 1.13.0 (#2165)
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.12.0 to 1.13.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/matklad/once_cell/blob/master/CHANGELOG.md">once_cell's changelog</a>.</em></p> <blockquote> <h2>1.13.0</h2> <ul> <li>Add <code>Lazy::get</code>, similar to <code>OnceCell::get</code>.</li> </ul> <h2>1.12.1</h2> <ul> <li>Remove incorrect <code>debug_assert</code>.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
2 years ago |
dependabot[bot] | cdaffa788a |
Bump serde from 1.0.137 to 1.0.138 (#2159)
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.137 to 1.0.138. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/serde-rs/serde/releases">serde's releases</a>.</em></p> <blockquote> <h2>v1.0.138</h2> <ul> <li>Documentation improvements</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
2 years ago |
dependabot[bot] | 8657dd2b11 |
Bump serde_json from 1.0.81 to 1.0.82 (#2152)
Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.81 to 1.0.82. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/serde-rs/json/releases">serde_json's releases</a>.</em></p> <blockquote> <h2>v1.0.82</h2> <ul> <li>Implement <code>From<Option<T>></code> for serde_json::Value where <code>T: Into<Value></code> (<a href="https://github-redirect.dependabot.com/serde-rs/json/issues/900">#900</a>, thanks <a href="https://github.com/kvnvelasco"><code>@kvnvelasco</code></a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
2 years ago |
dependabot[bot] | 91b28ec156 |
Bump anyhow from 1.0.57 to 1.0.58 (#2132)
Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.57 to 1.0.58. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dtolnay/anyhow/releases">anyhow's releases</a>.</em></p> <blockquote> <h2>1.0.58</h2> <ul> <li>Fix some broken links in documentation</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
2 years ago |
Iban Eguia | 0454ddec19 |
Execution stack & promises (#2107)
This PR overrides #1923. It also removes the `queues` dependency added there, and rebases it to the latest `main` branch state. It adds the following: - A job queue (in `Context`) - The constructor [`Promise`](https://tc39.es/ecma262/#sec-promise-executor) - [`Promise.race`](https://tc39.es/ecma262/#sec-promise.race) - [`Promise.reject`](https://tc39.es/ecma262/#sec-promise.reject) - [`Promise.resolve`](https://tc39.es/ecma262/#sec-promise.resolve) - [`get Promise [ @@species ]`](https://tc39.es/ecma262/#sec-get-promise-@@species) - [`Promise.prototype [ @@toStringTag ]`](https://tc39.es/ecma262/#sec-promise.prototype-@@tostringtag) - [`Promise.prototype.then`](https://tc39.es/ecma262/#sec-promise.prototype.then) - [`Promise.prototype.finally`](https://tc39.es/ecma262/#sec-promise.prototype.finally) - [`Promise.prototype.catch`](https://tc39.es/ecma262/#sec-promise.prototype.catch) - The additional needed infrastructure - [`PerformPromiseThen ( promise, onFulfilled, onRejected [ , resultCapability ] )`](https://tc39.es/ecma262/#sec-performpromisethen) - [`TriggerPromiseReactions ( reactions, argument )`](https://tc39.es/ecma262/#sec-triggerpromisereactions) - [`PerformPromiseRace ( iteratorRecord, constructor, resultCapability, promiseResolve )`](https://tc39.es/ecma262/#sec-performpromiserace) - [`RejectPromise ( promise, reason )`](https://tc39.es/ecma262/#sec-rejectpromise) - [`FulfillPromise ( promise, value )`](https://tc39.es/ecma262/#sec-fulfillpromise) - [`IfAbruptRejectPromise ( value, capability )`](https://tc39.es/ecma262/#sec-ifabruptrejectpromise) - [`CreateResolvingFunctions ( promise )`](https://tc39.es/ecma262/#sec-createresolvingfunctions) - [`NewPromiseCapability ( C )`](https://tc39.es/ecma262/#sec-newpromisecapability) - [`NewPromiseReactionJob ( reaction, argument )`](https://tc39.es/ecma262/#sec-newpromisereactionjob) - [`NewPromiseResolveThenableJob ( promiseToResolve, thenable, then )`](https://tc39.es/ecma262/#sec-newpromiseresolvethenablejob) - [`PromiseResolve ( C, x )`](https://tc39.es/ecma262/#sec-promise-resolve) - A test case showcasing the run-to-completion semantics. An example program that shows the control flow with this addition is: ```javascript new Promise((res, rej) => { console.log("A"); res(undefined); }).then((_) => console.log("B")); console.log("C"); ``` Which would output: ``` A C B ``` |
2 years ago |
Iban Eguia | 1dbd31e2b7 |
Added changelog, updated dependencies, bumped version number for 0.15 (#2102)
This Pull Request bumps the version number to 0.15, adds the changelog for this new versions and updates all dependencies to the latest versions. |
2 years ago |
jedel1043 | 518bad8109 |
Integrate ICU4X into `Intl` module (#2083)
<!--- Thank you for contributing to Boa! Please fill out the template below, and remove or add any information as you feel neccesary. ---> This Pull Request integrates an `ICU4X` data provider API in our codebase, to make use of the internationalization APIs that this crate provides. It changes the following: - Creates an API for pluggable icu data providers at `Context` creation, adding an `Icu` struct to store the provider (and some other internationalization tools) at runtime. - Slightly changes locale related functions to preserve the `Locale` type and ensure correctness. (Will make some other changes related to this). - Integrates the `sys_locale` crate to fetch the current default locale of an user instead of always returning `en-US`. |
2 years ago |
dependabot[bot] | 55060c664a |
Bump regex from 1.5.5 to 1.5.6 (#2086)
Bumps [regex](https://github.com/rust-lang/regex) from 1.5.5 to 1.5.6. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/regex/blob/master/CHANGELOG.md">regex's changelog</a>.</em></p> <blockquote> <h1>1.5.6 (2022-05-20)</h1> <p>This release includes a few bug fixes, including a bug that produced incorrect matches when a non-greedy <code>?</code> operator was used.</p> <ul> <li>[BUG <a href="https://github-redirect.dependabot.com/rust-lang/regex/issues/680">#680</a>](<a href="https://github-redirect.dependabot.com/rust-lang/regex/issues/680">rust-lang/regex#680</a>): Fixes a bug where <code>[[:alnum:][:^ascii:]]</code> dropped <code>[:alnum:]</code> from the class.</li> <li>[BUG <a href="https://github-redirect.dependabot.com/rust-lang/regex/issues/859">#859</a>](<a href="https://github-redirect.dependabot.com/rust-lang/regex/issues/859">rust-lang/regex#859</a>): Fixes a bug where <code>Hir::is_match_empty</code> returned <code>false</code> for <code>\b</code>.</li> <li>[BUG <a href="https://github-redirect.dependabot.com/rust-lang/regex/issues/862">#862</a>](<a href="https://github-redirect.dependabot.com/rust-lang/regex/issues/862">rust-lang/regex#862</a>): Fixes a bug where 'ab??' matches 'ab' instead of 'a' in 'ab'.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
2 years ago |
dependabot[bot] | c9391c1226 |
Bump once_cell from 1.11.0 to 1.12.0 (#2085)
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.11.0 to 1.12.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/matklad/once_cell/blob/master/CHANGELOG.md">once_cell's changelog</a>.</em></p> <blockquote> <h2>1.12.0</h2> <ul> <li>Add <code>OnceCell::wait</code>, a blocking variant of <code>get</code>.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
2 years ago |
raskad | 45dd2d416c |
Remove `strict` flag from `Context` (#2069)
The `Context` currently contains a `strict` flag that indicates is global strict mode is active. This is redundant to the strict flag that is set on every function and causes some non spec compliant situations. This pull request removes the strict flag from `Context` and fixes some resulting errors. Detailed changes: - Remove strict flag from `Context` - Make 262 tester compliant with the strict section in [test262/INTERPRETING.md]( |
2 years ago |
dependabot[bot] | fcf456e5de |
Bump once_cell from 1.10.0 to 1.11.0 (#2081)
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.10.0 to 1.11.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/matklad/once_cell/blob/master/CHANGELOG.md">once_cell's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <h2>Unreleased</h2> <ul> <li></li> </ul> <h2>1.11</h2> <ul> <li>Add <code>OnceCell::with_value</code> to create initialized <code>OnceCell</code> in <code>const</code> context.</li> <li>Improve <code>Clone</code> implementation for <code>OnceCell</code>.</li> <li>Rewrite <code>parking_lot</code> version on top of <code>parking_lot_core</code>, for even smaller cells!</li> </ul> <h2>1.10</h2> <ul> <li>upgrade <code>parking_lot</code> to <code>0.12.0</code> (note that this bumps MSRV with <code>parking_lot</code> feature enabled to <code>1.49.0</code>).</li> </ul> <h2>1.9</h2> <ul> <li>Added an <code>atomic-polyfill</code> optional dependency to compile <code>race</code> on platforms without atomics</li> </ul> <h2>1.8.0</h2> <ul> <li>Add <code>try_insert</code> API -- a version of <code>set</code> that returns a reference.</li> </ul> <h2>1.7.2</h2> <ul> <li>Improve code size when using parking_lot feature.</li> </ul> <h2>1.7.1</h2> <ul> <li>Fix <code>race::OnceBox<T></code> to also impl <code>Default</code> even if <code>T</code> doesn't impl <code>Default</code>.</li> </ul> <h2>1.7.0</h2> <ul> <li>Hide the <code>race</code> module behind (default) <code>race</code> feature. Turns out that adding <code>race</code> by default was a breaking change on some platforms without atomics. In this release, we make the module opt-out. Technically, this is a breaking change for those who use <code>race</code> with <code>no_default_features</code>. Given that the <code>race</code> module itself only several days old, the breakage is deemed acceptable.</li> </ul> <h2>1.6.0</h2> <ul> <li>Add <code>Lazy::into_value</code></li> <li>Stabilize <code>once_cell::race</code> module for "first one wins" no_std-compatible initialization flavor.</li> <li>Migrate from deprecated <code>compare_and_swap</code> to <code>compare_exchange</code>.</li> </ul> <h2>1.5.2</h2> <ul> <li><code>OnceBox</code> API uses <code>Box<T></code>. This a breaking change to unstable API.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
2 years ago |
Iban Eguia | 456da4949a |
Fixing build for changes in clippy for Rust 1.61 (#2082)
This fixes the CI after the upgrade to Rust 1.61. I had to "allow" the `use_self` lint, due to https://github.com/rust-lang/rust-clippy/issues/8845 and https://github.com/rust-lang/rust-clippy/issues/6902. It removed some false negatives, though, so I fixed some of the usage. |
2 years ago |
dependabot[bot] | f90f5479ef |
Bump rayon from 1.5.2 to 1.5.3 (#2073)
Bumps [rayon](https://github.com/rayon-rs/rayon) from 1.5.2 to 1.5.3. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rayon-rs/rayon/blob/master/RELEASES.md">rayon's changelog</a>.</em></p> <blockquote> <h1>Release rayon 1.5.3 (2022-05-13)</h1> <ul> <li>The new <code>ParallelSliceMut::par_sort_by_cached_key</code> is a stable sort that caches the keys for each item -- a parallel version of <code>slice::sort_by_cached_key</code>.</li> </ul> <h1>Release rayon-core 1.9.3 (2022-05-13)</h1> <ul> <li>Fixed a use-after-free race in job notification.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
2 years ago |
dependabot[bot] | 404670b69e |
Bump serde_yaml from 0.8.23 to 0.8.24 (#2060)
Bumps [serde_yaml](https://github.com/dtolnay/serde-yaml) from 0.8.23 to 0.8.24. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dtolnay/serde-yaml/releases">serde_yaml's releases</a>.</em></p> <blockquote> <h2>0.8.24</h2> <ul> <li>Work around <code>indexmap</code>/<code>autocfg</code> not always properly detecting whether a <code>std</code> sysroot crate is available (<a href="https://github-redirect.dependabot.com/dtolnay/serde-yaml/issues/243">#243</a>, thanks <a href="https://github.com/cuviper"><code>@cuviper</code></a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | bae970ff17 |
Bump serde_json from 1.0.80 to 1.0.81 (#2059)
Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.80 to 1.0.81. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/serde-rs/json/releases">serde_json's releases</a>.</em></p> <blockquote> <h2>v1.0.81</h2> <ul> <li>Work around <code>indexmap</code>/<code>autocfg</code> not always properly detecting whether a <code>std</code> sysroot crate is available (<a href="https://github-redirect.dependabot.com/serde-rs/json/issues/885">#885</a>, thanks <a href="https://github.com/cuviper"><code>@cuviper</code></a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | 72ae29b0fa |
Bump serde from 1.0.136 to 1.0.137 (#2052)
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.136 to 1.0.137. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/serde-rs/serde/releases">serde's releases</a>.</em></p> <blockquote> <h2>v1.0.137</h2> <ul> <li>Update documentation links to some data formats whose repos have moved (<a href="https://github-redirect.dependabot.com/serde-rs/serde/issues/2201">#2201</a>, thanks <a href="https://github.com/atouchet"><code>@atouchet</code></a>)</li> <li>Fix declared <code>rust-version</code> of serde and serde_test (<a href="https://github-redirect.dependabot.com/serde-rs/serde/issues/2168">#2168</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | 8b6f3561e4 |
Bump serde_json from 1.0.79 to 1.0.80 (#2051)
Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.79 to 1.0.80. <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
raskad | 8b66988574 |
Move redeclaration errors to parser (#2027)
This Pull Request changes the following: - Implement redeclaration errors in the parser - Remove redeclaration errors from the compiler (this is a big step towards #1907) - Fix some failing tests on the way This requires a slight change in our public api. The Parser new requires a full `Context` instead of just the `Interner` for parsing new code. This is required, because if multiple scripts are parsed (e.g. every input in the REPL) global variables must be checked for redeclarations. |
3 years ago |
Jason Williams | 01bd50fa72 |
cargo workspaces fixes #2001 (#2026)
This adds cargo-workspaces to our repo for easier publishing. (I think we may need to do a dry run of this first to test) fixes https://github.com/boa-dev/boa/issues/2001 |
3 years ago |
dependabot[bot] | e0a552aaf2 |
Bump anyhow from 1.0.56 to 1.0.57 (#2038)
Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.56 to 1.0.57. <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | a357a18fcc |
Bump rayon from 1.5.1 to 1.5.2 (#2029)
Bumps [rayon](https://github.com/rayon-rs/rayon) from 1.5.1 to 1.5.2. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rayon-rs/rayon/blob/master/RELEASES.md">rayon's changelog</a>.</em></p> <blockquote> <h1>Release rayon 1.5.2 / rayon-core 1.9.2 (2022-04-13)</h1> <ul> <li>The new <code>ParallelSlice::par_rchunks()</code> and <code>par_rchunks_exact()</code> iterate slice chunks in reverse, aligned the against the end of the slice if the length is not a perfect multiple of the chunk size. The new <code>ParallelSliceMut::par_rchunks_mut()</code> and <code>par_rchunks_exact_mut()</code> are the same for mutable slices.</li> <li>The <code>ParallelIterator::try_*</code> methods now support <code>std::ops::ControlFlow</code> and <code>std::task::Poll</code> items, mirroring the unstable <code>Try</code> implementations in the standard library.</li> <li>The <code>ParallelString</code> pattern-based methods now support <code>&[char]</code> patterns, which match when any character in that slice is found in the string.</li> <li>A soft limit is now enforced on the number of threads allowed in a single thread pool, respecting internal bit limits that already existed. The current maximum is publicly available from the new function <code>max_num_threads()</code>.</li> <li>Fixed several Stacked Borrow and provenance issues found by <code>cargo miri</code>.</li> </ul> <h2>Contributors</h2> <p>Thanks to all of the contributors for this release!</p> <ul> <li><a href="https://github.com/atouchet"><code>@atouchet</code></a></li> <li><a href="https://github.com/bluss"><code>@bluss</code></a></li> <li><a href="https://github.com/cuviper"><code>@cuviper</code></a></li> <li><a href="https://github.com/fzyzcjy"><code>@fzyzcjy</code></a></li> <li><a href="https://github.com/nyanzebra"><code>@nyanzebra</code></a></li> <li><a href="https://github.com/paolobarbolini"><code>@paolobarbolini</code></a></li> <li><a href="https://github.com/RReverser"><code>@RReverser</code></a></li> <li><a href="https://github.com/saethlin"><code>@saethlin</code></a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/rayon-rs/rayon/commits">compare view</a></li> </ul> </details> <br /> [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rayon&package-manager=cargo&previous-version=1.5.1&new-version=1.5.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> |
3 years ago |
raskad | 76ef1a8829 |
Remove `git2` and `hex` dependencies (#1992)
This removes the only use of the `git2` and `hex` dependencies by reading the test262 submodule commit id directly from the `.git` directory. Because `git2` depends on a lot of other crates, this removes a bunch of dependencies. |
3 years ago |
Iban Eguia | 6fb144520f |
Added better error handling for the Boa tester (#1984)
Trying to fix the issue in #1982, I noticed that we didn't have a proper error handling for the boa tester. This adds the `anyhow` dependency to the tester, which makes it much easier to handle errors and bubble them up with attached context. Thanks to this I was able to easily find out the issue, and I think it could be useful to have it. It gives errors such as this one: ``` Error: could not read the suite test caused by: error reading sub-suite ./test262/test/built-ins caused by: error reading sub-suite ./test262/test/built-ins/ShadowRealm caused by: error reading sub-suite ./test262/test/built-ins/ShadowRealm/WrappedFunction caused by: error reading test ./test262/test/built-ins/ShadowRealm/WrappedFunction/throws-typeerror-on-revoked-proxy.js caused by: while scanning a block scalar, found a tab character where an indentation space is expected at line 4 column 3 caused by: while scanning a block scalar, found a tab character where an indentation space is expected at line 4 column 3 ``` |
3 years ago |
NorbertGarfield | 5a2703b2d3 |
Retrieve feature-based results for Test262 runs (#1980)
This Pull Request fixes/closes #1645. It changes the following: - Add `features` field to `SuiteResult` structure - Fetch features from `TestSuite` and propagate them via `SuiteResult` - Add `FeaturesInfo` structure and serialize it to `features.json` |
3 years ago |
Aaron Ross | 520b81ea66 |
add README for crates.io publish (#1952)
This Pull Request closes #1948. It changes the following: - set `readme` in `boa_engine` so `README.md` will be published to crates.io - remove unnecessary `exclude` field from `Cargo.toml` in all apps I was unsure whether using a path outside of the workspace root was allowed for `readme` since it [doesn't get included in the release tarball](https://github.com/rust-lang/cargo/issues/5911), but this exact path is used by [juniper](https://github.com/graphql-rust/juniper/blob/master/juniper/Cargo.toml#L13) and [seems to work there](https://crates.io/crates/juniper). I believe `cargo publish` does a bit more than just uploading the tarball, including pulling the `readme` from any arbitrary path. The default behaviour of `cargo package`/`cargo publish` if neither `exclude` or `include` is specified is to include all files from the package root, excluding - dotfiles - .gitignore'd files - subpackages (any subdirectory with a `Cargo.toml` file) - the `/target` directory There's no need to explicitly exclude files from the parent directory since they're already excluded by default. This can be verified by running `cargo package --list` inside any workspace app: ```plain $ cd boa_wasm $ cargo package --list .gitignore Cargo.toml Cargo.toml.orig src/lib.rs ``` You can read more [here](https://doc.rust-lang.org/cargo/reference/manifest.html#the-exclude-and-include-fields). |
3 years ago |
jasonwilliams | 16f3a0bd29 |
give everything a version
|
3 years ago |
Jason Williams |
be901735e5
|
generated changelog for 0.14 (#1882)
Co-authored-by: João Borges <rageknify@gmail.com> |
3 years ago |
dependabot[bot] | 09bfabb0b0 |
Bump git2 from 0.14.1 to 0.14.2 (#1919)
Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.14.1 to 0.14.2. <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | f7920cdca8 |
Bump regex from 1.5.4 to 1.5.5 (#1915)
Bumps [regex](https://github.com/rust-lang/regex) from 1.5.4 to 1.5.5. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/regex/blob/master/CHANGELOG.md">regex's changelog</a>.</em></p> <blockquote> <h1>1.5.5 (2022-03-08)</h1> <p>This releases fixes a security bug in the regex compiler. This bug permits a vector for a denial-of-service attack in cases where the regex being compiled is untrusted. There are no known problems where the regex is itself trusted, including in cases of untrusted haystacks.</p> <ul> <li><a href="https://github.com/rust-lang/regex/security/advisories/GHSA-m5pq-gvj9-9vr8">SECURITY #GHSA-m5pq-gvj9-9vr8</a>: Fixes a bug in the regex compiler where empty sub-expressions subverted the existing mitigations in place to enforce a size limit on compiled regexes. The Rust Security Response WG published an advisory about this: <a href="https://groups.google.com/g/rustlang-security-announcements/c/NcNNL1Jq7Yw">https://groups.google.com/g/rustlang-security-announcements/c/NcNNL1Jq7Yw</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
raskad | 7f90829f88 |
Compile StatementList after parse passes on negative tests (#1906)
This fixes an issue with 262 negative tests, that should produce a syntax errors. Currently we only parse the test code is such cases. If the parsing does not return an error, we do not compile the code further. This caused some panics. Most of them are fixed by now, the last ones will be fixed with #1860. |
3 years ago |
dependabot[bot] | 60b74e1f51 |
Bump once_cell from 1.9.0 to 1.10.0 (#1893)
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.9.0 to 1.10.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/matklad/once_cell/blob/master/CHANGELOG.md">once_cell's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <h2>1.11</h2> <ul> <li>Add <code>OnceCell::with_value</code> to create initialized <code>OnceCell</code> at compile time.</li> <li>Improve <code>Clone</code> implementation for <code>OnceCell</code>.</li> </ul> <h2>1.10</h2> <ul> <li>upgrade <code>parking_lot</code> to <code>0.12.0</code> (note that this bumps MSRV with <code>parking_lot</code> feature enabled to <code>1.49.0</code>).</li> </ul> <h2>1.9</h2> <ul> <li>Added an <code>atomic-polyfill</code> optional dependency to compile <code>race</code> on platforms without atomics</li> </ul> <h2>1.8.0</h2> <ul> <li>Add <code>try_insert</code> API -- a version of <code>set</code> that returns a reference.</li> </ul> <h2>1.7.2</h2> <ul> <li>Improve code size when using parking_lot feature.</li> </ul> <h2>1.7.1</h2> <ul> <li>Fix <code>race::OnceBox<T></code> to also impl <code>Default</code> even if <code>T</code> doesn't impl <code>Default</code>.</li> </ul> <h2>1.7.0</h2> <ul> <li>Hide the <code>race</code> module behind (default) <code>race</code> feature. Turns out that adding <code>race</code> by default was a breaking change on some platforms without atomics. In this release, we make the module opt-out. Technically, this is a breaking change for those who use <code>race</code> with <code>no_default_features</code>. Given that the <code>race</code> module itself only several days old, the breakage is deemed acceptable.</li> </ul> <h2>1.6.0</h2> <ul> <li>Add <code>Lazy::into_value</code></li> <li>Stabilize <code>once_cell::race</code> module for "first one wins" no_std-compatible initialization flavor.</li> <li>Migrate from deprecated <code>compare_and_swap</code> to <code>compare_exchange</code>.</li> </ul> <h2>1.5.2</h2> <ul> <li><code>OnceBox</code> API uses <code>Box<T></code>. This a breaking change to unstable API.</li> </ul> <h2>1.5.1</h2> <ul> <li>MSRV is increased to <code>1.36.0</code>.</li> <li>document <code>once_cell::race</code> module.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | d7ed2fe5c9 |
Bump git2 from 0.14.0 to 0.14.1 (#1878)
Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.14.0 to 0.14.1. <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | 7aa001ae8f |
Update git2 requirement from 0.13.25 to 0.14.0 in /boa_tester (#1868)
Updates the requirements on [git2](https://github.com/rust-lang/git2-rs) to permit the latest version. <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
Halid Odat | 9dda8d3eae |
Toggleable `JsValue` internals displaying (#1865)
This PR makes `JsValue` (object) only display owned properties, cleans up object printing. This can be toggled with `value.display().internals(true)` `>> ({x: 1, y: ""})` _Before:_ <details> <pre> { x: 1, y: "", __proto__: { hasOwnProperty: { length: 1, name: "hasOwnProperty", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, propertyIsEnumerable: { length: 1, name: "propertyIsEnumerable", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, toString: { length: 0, name: "toString", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, valueOf: { length: 0, name: "valueOf", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, isPrototypeOf: { length: 1, name: "isPrototypeOf", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, constructor: { create: { length: 2, name: "create", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, setPrototypeOf: { length: 2, name: "setPrototypeOf", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, getPrototypeOf: { length: 1, name: "getPrototypeOf", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, defineProperty: { length: 3, name: "defineProperty", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, defineProperties: { length: 2, name: "defineProperties", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, assign: { length: 2, name: "assign", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, is: { length: 2, name: "is", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, keys: { length: 1, name: "keys", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, values: { length: 1, name: "values", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, entries: { length: 1, name: "entries", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, seal: { length: 1, name: "seal", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, isSealed: { length: 1, name: "isSealed", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, freeze: { length: 1, name: "freeze", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, isFrozen: { length: 1, name: "isFrozen", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, preventExtensions: { length: 1, name: "preventExtensions", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, isExtensible: { length: 1, name: "isExtensible", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, getOwnPropertyDescriptor: { length: 2, name: "getOwnPropertyDescriptor", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, getOwnPropertyDescriptors: { length: 1, name: "getOwnPropertyDescriptors", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, getOwnPropertyNames: { length: 1, name: "getOwnPropertyNames", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, getOwnPropertySymbols: { length: 1, name: "getOwnPropertySymbols", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, hasOwn: { length: 2, name: "hasOwn", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, fromEntries: { length: 1, name: "fromEntries", __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, length: 1, name: "Object", prototype: [Cycle], __proto__: { name: "", length: 0, apply: { length: 1, name: "apply", __proto__: [Cycle] }, bind: { length: 1, name: "bind", __proto__: [Cycle] }, call: { length: 1, name: "call", __proto__: [Cycle] }, toString: { length: 0, name: "toString", __proto__: [Cycle] }, constructor: { length: 1, name: "Function", prototype: [Cycle], __proto__: [Cycle] }, Symbol(Symbol.hasInstance): { length: 1, name: "[Symbol.iterator]", __proto__: [Cycle] }, __proto__: [Cycle] } }, __proto__: null } } </pre> </details> _After:_ ```text { x: 1, y: "" } ``` |
3 years ago |
Iban Eguia |
4d2772d6a0
|
Rename "Boa" to boa_engine, moved GC and profiler to their crates (#1844)
* Separated GC and Profiler * Fixed prettierignore * Removed re-exports, fixed benchmarks, added some caches * Removed empty line * Update boa_engine/Cargo.toml Co-authored-by: raskad <32105367+raskad@users.noreply.github.com> * Fixed the profiler * Removed empty file Co-authored-by: raskad <32105367+raskad@users.noreply.github.com> |
3 years ago |
raskad | 29cd909f88 |
Refactor the environment for runtime performance (#1829)
This is an attempt to refactor the environments to be more performant at runtime. The idea is, to shift the dynamic hashmap environment lookups from runtime to compile time. Currently the environments hold hashmaps that contain binding identifiers, values and additional information that is needed to identify some errors. Because bindings in outer environments are accessible from inner environments, this can lead to a traversal through all environments (in the worst case to the global environment). This change to the environment structure pushes most of the work that is needed to access bindings to the compile time. At compile time, environments and bindings in the environments are being assigned indices. These indices are then stored instead of the `Sym` that is currently used to access bindings. At runtime, the indices are used to access bindings in a fixed size `Vec` per environment. This brings multiple benefits: - No hashmap access needed at runtime - The number of bindings per environment is known at compile time. Environments only need a single allocation, as their size is constant. - Potential for optimizations with `unsafe` https://doc.rust-lang.org/std/vec/struct.Vec.html#method.get_unchecked Additionally, this changes the global object to have it's bindings directly stored on the `Realm`. This should reduce some overhead from access trough gc objects and makes some optimizations for the global object possible. The benchmarks look not that great on the first sight. But if you look closer, I think it is apparent, that this is a positive change. The difference is most apparent on Mini and Clean as they are longer (still not near any real life js but less specific that most other benchmarks): | Test | Base | PR | % | |------|--------------|------------------|---| | Clean js (Compiler) | **1929.1±5.37ns** | 4.1±0.02µs | **+112.53%** | | Clean js (Execution) | 1487.4±7.50µs | **987.3±3.78µs** | **-33.62%** | The compile time is up in all benchmarks, as expected. The percentage is huge, but if we look at the real numbers, we can see that this is an issue of orders of magnitude. While compile is up `112.53%`, the real change is `~+2µs`. Execution is only down `33.62%`, but the real time changed by `~-500µs`. Co-authored-by: Iban Eguia <razican@protonmail.ch> |
3 years ago |
Iban Eguia | 748465d17b |
Unwrap removal (#1842)
This removes all the calls to `unwrap()` in the codebase, which made me found a couple of places where it wasn't needed, and could be improved. I also noticed we don't have dependabot updates for the test262 submodule and the interner dependencies, so I added those. I added lints so that no new unwraps are added. |
3 years ago |
dependabot[bot] | 3d9c8b229d |
Bump serde_json from 1.0.78 to 1.0.79 (#1838)
Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.78 to 1.0.79. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/serde-rs/json/releases">serde_json's releases</a>.</em></p> <blockquote> <h2>v1.0.79</h2> <ul> <li>Allow <code>RawValue</code> deserialization to propagate <code>\u</code> escapes for unmatched surrogates, which can later by deserialized to Vec<u8> (<a href="https://github-redirect.dependabot.com/serde-rs/json/issues/830">#830</a>, thanks <a href="https://github.com/lucacasonato"><code>@lucacasonato</code></a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
Iban Eguia | 53ef07b1a6 |
Using the new formatting arguments from Rust 1.58 (#1834)
In [Rust 1.58](https://blog.rust-lang.org/2022/01/13/Rust-1.58.0.html#captured-identifiers-in-format-strings), capturing of bindings were added to format strings. This makes things more clear, so I added this where possible. |
3 years ago |
Iban Eguia | 60b7eb8934 |
General code clean-up and new lint addition (#1809)
This PR adds some Clippy lints. Mainly, it adds the list of pedantic lints excluding some lints that were causing too many warnings. I also denied some useful restriction and pedantic lints, to make sure we use `Self` all the possible times (for better maintainability), and that we pass elements by reference where possible, for example, or that the documentation is properly written. This might even have some small performance gains. I also added a perfect hash function for the CLI keywords, which should be more efficient than a `HashSet`. This is something we could use elsewhere too. |
3 years ago |
Iban Eguia | e37cb6c9f6 |
Updated dependencies (#1803)
The main idea behind this is to upgrade the Unicode version from 13 to 14. I also upgraded the rest of the dependencies, so this closes #1802, #1800 and #1799. |
3 years ago |
dependabot[bot] | 090d7ace80 |
Bump serde from 1.0.134 to 1.0.135 (#1797)
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.134 to 1.0.135. <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | 4eb29c966a |
Bump serde_json from 1.0.76 to 1.0.78 (#1796)
Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.76 to 1.0.78. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/serde-rs/json/releases">serde_json's releases</a>.</em></p> <blockquote> <h2>v1.0.78</h2> <ul> <li>Support deserializing as <code>&RawValue</code> in map key position, which would previously fail with <em>"invalid type: newtype struct"</em> (<a href="https://github-redirect.dependabot.com/serde-rs/json/issues/851">#851</a>)</li> </ul> <h2>v1.0.77</h2> <ul> <li>Include discord invite links in the published readme</li> <li>Improve compile error on compiling with neither <code>std</code> nor <code>alloc</code> feature enabled</li> <li>Include integration tests in published package (<a href="https://github-redirect.dependabot.com/serde-rs/json/issues/578">#578</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
Iban Eguia | e92cff5920 |
Interner support in the parser (#1765)
This builds on top of #1758 to try to bring #1763 to life. Something that should probably be done here would be to convert `JsString` to a `Sym` internally. Then, further optimizations could be done adding common strings to a custom interner type (those that we know statically). This is definitely work in progress, but I would like to have feedback on the API, and feel free to contribute. Co-authored-by: raskad <32105367+raskad@users.noreply.github.com> |
3 years ago |
Iban Eguia | 48185f393d |
Lexer string interning (#1758)
This Pull Request is part of #279. It adds a string interner to Boa, which allows many types to not contain heap-allocated strings, and just contain a `NonZeroUsize` instead. This can move types to the stack (hopefully I'll be able to move `Token`, for example, maybe some `Node` types too. Note that the internet is for now only available in the lexer. Next steps (in this PR or future ones) would include also using interning in the parser, and finally in execution. The idea is that strings should be represented with a `Sym` until they are displayed. Talking about display. I have changed the `ParseError` type in order to not contain anything that could contain a `Sym` (basically tokens), which might be a bit faster, but what is important is that we don't depend on the interner when displaying errors. The issue I have now is in order to display tokens. This requires the interner if we want to know identifiers, for example. The issue here is that Rust doesn't allow using a `fmt::Formatter` (only in nightly), which is making my head hurt. Maybe someone of you can find a better way of doing this. Then, about `cursor.expect()`, this is the only place where we don't have the expected token type as a static string, so it's failing to compile. We have the option of changing the type definition of `ParseError` to contain an owned string, but maybe we can avoid this by having a `&'static str` come from a `TokenKind` with the default values, such as "identifier" for an identifier. I wanted for you to think about it and maybe we can just add that and avoid allocations there. Oh, and this depends on the VM-only branch, so that has to be merged before :) Another thing to check: should the interner be in its own module? |
3 years ago |
dependabot[bot] | dc005e17ef |
Bump structopt from 0.3.25 to 0.3.26 (#1786)
Bumps [structopt](https://github.com/TeXitoi/structopt) from 0.3.25 to 0.3.26. <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
dependabot[bot] | 5c4d970119 |
Bump serde_json from 1.0.73 to 1.0.75 (#1785)
Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.73 to 1.0.75. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/serde-rs/json/releases">serde_json's releases</a>.</em></p> <blockquote> <h2>v1.0.74</h2> <ul> <li>Allow creating RawValues from references to unsized values (<a href="https://github-redirect.dependabot.com/serde-rs/json/issues/841">#841</a>, thanks <a href="https://github.com/EFanZh"><code>@EFanZh</code></a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
3 years ago |
RageKnify |
7f18d7a851
|
Refactor: optimize println!()
Clippy 1.58.0 complains about `format!()` inside `println!()` being inefficient |
3 years ago |
Jason Williams |
dfb3df5bf2
|
Start removing non-VM path (#1747)
|
3 years ago |
Iban Eguia | 039c46ba7b |
Removed a bunch of warnings and clippy errors (#1754)
This Pull Request fixes some warnings and clips errors. It conflicts with the VM/non-VM PR, so should probably go in first, so that this branch gets properly updated and we get the list of real warnings/errors there. |
3 years ago |