- Implement `new.target` expression by @raskad in [#2299](https://github.com/boa-dev/boa/pull/2299)
- Parse static async private methods in classes by @raskad in [#2315](https://github.com/boa-dev/boa/pull/2315)
- Implement `JsDataView` by @nekevss in [#2308](https://github.com/boa-dev/boa/pull/2308)
- Upgrade clap to 4.0, add value hints for zsh and fish by @Razican in [#2336](https://github.com/boa-dev/boa/pull/2336)
- Implement `JsRegExp` by @nekevss in [#2326](https://github.com/boa-dev/boa/pull/2326)
- Create new lazy Error type by @jedel1043 in [#2283](https://github.com/boa-dev/boa/pull/2283)
- Fixed some documentation and clippy warnings in tests by @Razican in [#2362](https://github.com/boa-dev/boa/pull/2362)
- Removed the "VM Implementation" headline for Test262 by @Razican in [#2364](https://github.com/boa-dev/boa/pull/2364)
- Modified the `loadfile` example to show how Boa can read bytes by @Razican in [#2363](https://github.com/boa-dev/boa/pull/2363)
- Implement `LabelledStatement` by @jedel1043 in [#2349](https://github.com/boa-dev/boa/pull/2349)
- Split vm/opcode into modules by @nekevss in [#2343](https://github.com/boa-dev/boa/pull/2343)
- Removed some duplicate code, added `ToIndentedString` by @Razican in [#2367](https://github.com/boa-dev/boa/pull/2367)
- Document the AST by @jedel1043 in [#2377](https://github.com/boa-dev/boa/pull/2377)
- Implement member accessors in initializer of for loops by @jedel1043 in [#2381](https://github.com/boa-dev/boa/pull/2381)
- Implement `JsGenerator` and wrapper docs clean up by @nekevss in [#2380](https://github.com/boa-dev/boa/pull/2380)
- Add named evaluation of logical assignments by @raskad in [#2389](https://github.com/boa-dev/boa/pull/2389)
- Implement optional chains by @jedel1043 in [#2390](https://github.com/boa-dev/boa/pull/2390)
- Implement delete for references by @jedel1043 in [#2395](https://github.com/boa-dev/boa/pull/2395)
- Implement AST Visitor pattern (attempt #3) by @addisoncrump in [#2392](https://github.com/boa-dev/boa/pull/2392)
- Implement async arrow functions by @raskad in [#2393](https://github.com/boa-dev/boa/pull/2393)
- Pretty print promise objects by @jedel1043 in [#2407](https://github.com/boa-dev/boa/pull/2407)
- Parser Idempotency Fuzzer by @addisoncrump in [#2400](https://github.com/boa-dev/boa/pull/2400)
- Safe wrapper for `JsDate` by @anuvratsingh in [#2181](https://github.com/boa-dev/boa/pull/2181)
- Fix some Date tests by @jedel1043 in [#2431](https://github.com/boa-dev/boa/pull/2431)
- Boa Gc implementation draft by @nekevss in [#2394](https://github.com/boa-dev/boa/pull/2394)
- VM Fuzzer by @addisoncrump in [#2401](https://github.com/boa-dev/boa/pull/2401)
- Implement the `WeakRef` builtin by @jedel1043 in [#2438](https://github.com/boa-dev/boa/pull/2438)
- Refactor the `Date` builtin by @jedel1043 in [#2449](https://github.com/boa-dev/boa/pull/2449)
- Implement instruction flowgraph generator by @HalidOdat in [#2422](https://github.com/boa-dev/boa/pull/2422)
- `JsArrayBuffer` take method and docs by @nekevss in [#2454](https://github.com/boa-dev/boa/pull/2454)
- Set function names in object literal methods by @raskad in [#2460](https://github.com/boa-dev/boa/pull/2460)
- Redesign Intl API and implement some services by @jedel1043 in [#2478](https://github.com/boa-dev/boa/pull/2478)
- Cleanup `Context` APIs by @jedel1043 in [#2504](https://github.com/boa-dev/boa/pull/2504)
- Prepare `Promises` for new host hooks and job queue API by @jedel1043 in [#2528](https://github.com/boa-dev/boa/pull/2528)
- Implement host hooks and job queues APIs by @jedel1043 in [#2529](https://github.com/boa-dev/boa/pull/2529)
- First batch of `no_std` support for some sub-crates by @jedel1043 in [#2544](https://github.com/boa-dev/boa/pull/2544)
- Create `Source` to abstract JS code sources by @jedel1043 in [#2579](https://github.com/boa-dev/boa/pull/2579)
- Move increment and decrement operations to `Update` expression by @raskad in [#2565](https://github.com/boa-dev/boa/pull/2565)
- Implement binary `in` operation with private names by @raskad in [#2582](https://github.com/boa-dev/boa/pull/2582)
- Module parsing by @Razican in [#2411](https://github.com/boa-dev/boa/pull/2411)
- Implement `WeakSet` by @lupd in [#2586](https://github.com/boa-dev/boa/pull/2586)
- Implement `WeakMap` by @raskad in [#2597](https://github.com/boa-dev/boa/pull/2597)
- API to construct a `NativeFunction` from a native async function by @jedel1043 in [#2542](https://github.com/boa-dev/boa/pull/2542)
- Add `--strict` flag to cli by @HalidOdat in [#2689](https://github.com/boa-dev/boa/pull/2689)
- Add timeout to CI by @HalidOdat in [#2691](https://github.com/boa-dev/boa/pull/2691)
- Add ES5 and ES6 Conformance calculation to boa_tester by @ZackMitkin in [#2690](https://github.com/boa-dev/boa/pull/2690)
- Improve tester display for multiple editions by @jedel1043 in [#2720](https://github.com/boa-dev/boa/pull/2720)
- Implement `JsPromise` wrapper by @jedel1043 in [#2758](https://github.com/boa-dev/boa/pull/2758)
- Initial version of a JS -> Rust conversion trait. by @Razican in [#2276](https://github.com/boa-dev/boa/pull/2276)
- Implement `escape` and `unescape` by @jedel1043 in [#2768](https://github.com/boa-dev/boa/pull/2768)
- Implement debug object for CLI by @HalidOdat in [#2772](https://github.com/boa-dev/boa/pull/2772)
- Make `Realm` shareable between functions by @jedel1043 in [#2801](https://github.com/boa-dev/boa/pull/2801)
- Implement Annex-B string html methods by @HalidOdat in [#2798](https://github.com/boa-dev/boa/pull/2798)
- Implement annex-b `trimLeft` and `trimRight` string methods by @HalidOdat in [#2806](https://github.com/boa-dev/boa/pull/2806)
- Implement HTML comments and gate behind the `annex-b` feature by @jedel1043 in [#2817](https://github.com/boa-dev/boa/pull/2817)
- Implement `Intl.Segmenter` by @jedel1043 in [#2840](https://github.com/boa-dev/boa/pull/2840)
- Implement var initializers in for-in loops by @jedel1043 in [#2842](https://github.com/boa-dev/boa/pull/2842)
- Improve debug output of `JsNativeError` and `Realm` by @jedel1043 in [#2894](https://github.com/boa-dev/boa/pull/2894)
- Implement runtime limits for loops by @HalidOdat in [#2857](https://github.com/boa-dev/boa/pull/2857)
- Implement runtime limits for recursion by @HalidOdat in [#2904](https://github.com/boa-dev/boa/pull/2904)
- Implement annexB Block-Level Function Declarations by @raskad in [#2910](https://github.com/boa-dev/boa/pull/2910)
- Implement module execution by @jedel1043 in [#2922](https://github.com/boa-dev/boa/pull/2922)
- Type safe root shape by @HalidOdat in [#2940](https://github.com/boa-dev/boa/pull/2940)
- Implement dynamic imports by @jedel1043 in [#2932](https://github.com/boa-dev/boa/pull/2932)
- Implement pseudo-property `import.meta` by @jedel1043 in [#2956](https://github.com/boa-dev/boa/pull/2956)
- Implement `with` and object environments by @raskad in [#2692](https://github.com/boa-dev/boa/pull/2692)
- Add hooks to get the current time and timezone by @jedel1043 in [#2824](https://github.com/boa-dev/boa/pull/2824)
- Make `JsSymbol` thread-safe by @jedel1043 in [#2539](https://github.com/boa-dev/boa/pull/2539)
- Added a Boa runtime by @Razican in [#2743](https://github.com/boa-dev/boa/pull/2743)
- Implement `TryFromJs` for `JsObject` wrappers by @Razican in [#2809](https://github.com/boa-dev/boa/pull/2809)
- Allow passing owned `HostHooks` and `JobQueues` to `Context` by @jedel1043 in [#2811](https://github.com/boa-dev/boa/pull/2811)
- Implement `String.prototype.toLocaleUpper/LowerCase` by @jedel1043 in [#2822](https://github.com/boa-dev/boa/pull/2822)
- Implement constant folding optimization by @HalidOdat in [#2679](https://github.com/boa-dev/boa/pull/2679)
- Implement `Hidden classes` by @HalidOdat in [#2723](https://github.com/boa-dev/boa/pull/2723)
- show object kind, name and address when using dbg! by @jasonwilliams in [#2960](https://github.com/boa-dev/boa/pull/2960)
- Add convenience methods to `ModuleLoader` by @jedel1043 in [#3007](https://github.com/boa-dev/boa/pull/3007)
- Allow `JobQueue` to concurrently run jobs by @jedel1043 in [#3036](https://github.com/boa-dev/boa/pull/3036)
- Make `IntegerIndexed::byte_offset` public by @CryZe in [#3017](https://github.com/boa-dev/boa/pull/3017)
- Allow awaiting `JsPromise` from Rust code by @jedel1043 in [#3011](https://github.com/boa-dev/boa/pull/3011)
- Cache `cargo-tarpaulin` binary by @jedel1043 in [#3071](https://github.com/boa-dev/boa/pull/3071)
- add link to the main logo by @jasonwilliams in [#3082](https://github.com/boa-dev/boa/pull/3082)
### Bug Fixes
- Add unicode terminator to line comment by @creampnx-x in [#2301](https://github.com/boa-dev/boa/pull/2301)
- Fix function property order by @raskad in [#2305](https://github.com/boa-dev/boa/pull/2305)
- Fix some Array spec deviations by @raskad in [#2306](https://github.com/boa-dev/boa/pull/2306)
- Fix double conversion to primitive in `ToNumeric` by @raskad in [#2310](https://github.com/boa-dev/boa/pull/2310)
- Fixing the output for the test diffs in PRs by @Razican in [#2320](https://github.com/boa-dev/boa/pull/2320)
- Fix Regex literal parsing in MemberExpression by @tunz in [#2328](https://github.com/boa-dev/boa/pull/2328)
- Fix error in `Proxy` set implementation by @raskad in [#2369](https://github.com/boa-dev/boa/pull/2369)
- Allow LineTerminator before Semicolon in `continue` by @raskad in [#2371](https://github.com/boa-dev/boa/pull/2371)
- Fix var collisions in strict eval calls by @jedel1043 in [#2382](https://github.com/boa-dev/boa/pull/2382)
- Set `in` to `true` when parsing AssignmentExpression in ConditionalExpression by @raskad in [#2386](https://github.com/boa-dev/boa/pull/2386)
- Skip prototype field definition for arrow function by @raskad in [#2388](https://github.com/boa-dev/boa/pull/2388)
- Remove invalid optimization in addition by @raskad in [#2387](https://github.com/boa-dev/boa/pull/2387)
- Fix order dependent execution in assignment. by @HalidOdat in [#2378](https://github.com/boa-dev/boa/pull/2378)
- Add early error for `yield` in `GeneratorExpression` parameters by @raskad in [#2413](https://github.com/boa-dev/boa/pull/2413)
- Handle `__proto__` fields in object literals by @raskad in [#2423](https://github.com/boa-dev/boa/pull/2423)
- Fix built-ins/Array/prototype/toString/non-callable-join-string-tag.js test case by @akavi in [#2458](https://github.com/boa-dev/boa/pull/2458)
- Fix `PartialEq` for `JsBigInt` and `f64` by @raskad in [#2461](https://github.com/boa-dev/boa/pull/2461)
- Allow class expressions without identifier by @raskad in [#2464](https://github.com/boa-dev/boa/pull/2464)
- Fix to weak_trace for `boa_tester` by @nekevss in [#2470](https://github.com/boa-dev/boa/pull/2470)
- Fix unary operations on `this` by @veera-sivarajan in [#2507](https://github.com/boa-dev/boa/pull/2507)
- Fix postfix operator line terminator parsing by @raskad in [#2520](https://github.com/boa-dev/boa/pull/2520)
- Remove `Literal::Undefined` by @veera-sivarajan in [#2518](https://github.com/boa-dev/boa/pull/2518)
- Add early errors for 'eval' or 'arguments' in parameters by @raskad in [#2515](https://github.com/boa-dev/boa/pull/2515)
- Pass a receiver value in property getter opcodes by @raskad in [#2516](https://github.com/boa-dev/boa/pull/2516)
- Add regex literal early errors by @raskad in [#2517](https://github.com/boa-dev/boa/pull/2517)
- `Break` Opcode and `ByteCompiler` changes by @nekevss in [#2523](https://github.com/boa-dev/boa/pull/2523)
- Refactor some class features by @raskad in [#2513](https://github.com/boa-dev/boa/pull/2513)
- Recognize Directive Prologues correctly by @raskad in [#2521](https://github.com/boa-dev/boa/pull/2521)
- Correctly parse consecutive semicolons by @raskad in [#2533](https://github.com/boa-dev/boa/pull/2533)
- Fix some HoistableDeclaration parsing errors by @raskad in [#2532](https://github.com/boa-dev/boa/pull/2532)
- Return the correct value from a statement list by @raskad in [#2554](https://github.com/boa-dev/boa/pull/2554)
- Fix error for static class methods named `prototype` by @raskad in [#2552](https://github.com/boa-dev/boa/pull/2552)
- Avoid creating `prototype` property on methods by @raskad in [#2553](https://github.com/boa-dev/boa/pull/2553)
- Fix double property access on assignment ops by @raskad in [#2551](https://github.com/boa-dev/boa/pull/2551)
- Add early errors for escaped identifiers by @raskad in [#2546](https://github.com/boa-dev/boa/pull/2546)
- Fix failing collator tests by @jedel1043 in [#2575](https://github.com/boa-dev/boa/pull/2575)
- fuzzer: bubble up NoInstructionsRemain error instead of trying to handle as exception by @Mrmaxmeier in [#2566](https://github.com/boa-dev/boa/pull/2566)
- Try-catch-block control flow fix/refactor by @nekevss in [#2568](https://github.com/boa-dev/boa/pull/2568)
- Fix doc tests and add CI check by @jedel1043 in [#2606](https://github.com/boa-dev/boa/pull/2606)
- Fix string to number conversion for `infinity` by @raskad in [#2607](https://github.com/boa-dev/boa/pull/2607)
- Fix exponent operator by @HalidOdat in [#2681](https://github.com/boa-dev/boa/pull/2681)
- Update `README.md` cli options by @HalidOdat in [#2678](https://github.com/boa-dev/boa/pull/2678)
- Fix incorrect `Number.MIN_VALUE` value by @HalidOdat in [#2682](https://github.com/boa-dev/boa/pull/2682)
- Correctly run async tests by @jedel1043 in [#2683](https://github.com/boa-dev/boa/pull/2683)
- Fix value to bigint conversion by @HalidOdat in [#2688](https://github.com/boa-dev/boa/pull/2688)
- Fix Object constructor by @raskad in [#2694](https://github.com/boa-dev/boa/pull/2694)
- Fix get function opcode traces by @HalidOdat in [#2708](https://github.com/boa-dev/boa/pull/2708)
- Add early errors to dynamic function constructors by @raskad in [#2716](https://github.com/boa-dev/boa/pull/2716)
- Add negative zero handling for `Map.delete` by @raskad in [#2726](https://github.com/boa-dev/boa/pull/2726)
- Fix remaining `Set` tests by @raskad in [#2725](https://github.com/boa-dev/boa/pull/2725)
- Fix update expressions getting values multiple times by @raskad in [#2733](https://github.com/boa-dev/boa/pull/2733)
- Make if statements return their completion values by @raskad in [#2739](https://github.com/boa-dev/boa/pull/2739)
- Fix super call execution order by @raskad in [#2724](https://github.com/boa-dev/boa/pull/2724)
- Fix deserialization of `SpecEdition` by @jedel1043 in [#2762](https://github.com/boa-dev/boa/pull/2762)
- Add `json-parse-with-source` feature to `boa_tester` by @HalidOdat in [#2778](https://github.com/boa-dev/boa/pull/2778)
- Fix `Symbol.prototype[@@iterator]` by @HalidOdat in [#2800](https://github.com/boa-dev/boa/pull/2800)
- Fix `String.prototype.replace()` order of `ToString` execution by @HalidOdat in [#2799](https://github.com/boa-dev/boa/pull/2799)
- Fix `ThrowTypeError` intrinsic by @HalidOdat in [#2797](https://github.com/boa-dev/boa/pull/2797)
- Fix `String.prototype.substr()` by @HalidOdat in [#2805](https://github.com/boa-dev/boa/pull/2805)
- Fix destructive for-of loop assignments by @raskad in [#2803](https://github.com/boa-dev/boa/pull/2803)
- Fix `TypedArray`s minus zero key by @HalidOdat in [#2808](https://github.com/boa-dev/boa/pull/2808)
- Fix sync generator yield expressions by @raskad in [#2838](https://github.com/boa-dev/boa/pull/2838)
- Fix async generators by @raskad in [#2853](https://github.com/boa-dev/boa/pull/2853)
- Catch 'eval' and 'arguments' in setter method parameter by @raskad in [#2858](https://github.com/boa-dev/boa/pull/2858)
- Fix `PropertyKey` index parse by @HalidOdat in [#2843](https://github.com/boa-dev/boa/pull/2843)
- Fix `Date.prototype[Symbol.primitive]` incorrect attributes by @HalidOdat in [#2862](https://github.com/boa-dev/boa/pull/2862)
- Allow `Date` object to store invalid `NativeDateTime` by @HalidOdat in [#2861](https://github.com/boa-dev/boa/pull/2861)
- Fix panic when calling toString with radix by @HalidOdat in [#2863](https://github.com/boa-dev/boa/pull/2863)
- Fix incorrect `LoopContinue` instruction in while-do loops by @HalidOdat in [#2866](https://github.com/boa-dev/boa/pull/2866)
- Initialize `var` bindings in runtime environments with `undefined` by @raskad in [#2860](https://github.com/boa-dev/boa/pull/2860)
- Bugfix/new.target is not understood by the parser as an expression #2793 by @projectnoa in [#2878](https://github.com/boa-dev/boa/pull/2878)
- Fix `RegExp` constructor return value when pattern is a regexp by @HalidOdat in [#2880](https://github.com/boa-dev/boa/pull/2880)
- `RegExp` constructor should call `IsRegExp()` by @HalidOdat in [#2881](https://github.com/boa-dev/boa/pull/2881)
- Fix `for-of` expression parsing by @HalidOdat in [#2882](https://github.com/boa-dev/boa/pull/2882)
- Disallow strict directives with escaped sequences by @jedel1043 in [#2892](https://github.com/boa-dev/boa/pull/2892)
- Make `typeof` throw when accessing uninitialized variables by @raskad in [#2902](https://github.com/boa-dev/boa/pull/2902)
- Fix wrong name of `Function.prototype[Symbol.hasInstance]` by @raskad in [#2905](https://github.com/boa-dev/boa/pull/2905)
- Fix remaining object literal tests by @raskad in [#2906](https://github.com/boa-dev/boa/pull/2906)
- Add SyntaxErrors in GlobalDeclarationInstantiation by @raskad in [#2908](https://github.com/boa-dev/boa/pull/2908)
- Fix switch `default` execution by @HalidOdat in [#2907](https://github.com/boa-dev/boa/pull/2907)
- Add loop and switch return values by @raskad in [#2828](https://github.com/boa-dev/boa/pull/2828)
- Allow escaped `let` as expression by @HalidOdat in [#2916](https://github.com/boa-dev/boa/pull/2916)
- Allow `let` name in for-in loop in non-strict mode by @HalidOdat in [#2915](https://github.com/boa-dev/boa/pull/2915)
- Fix lexical environments in for loops by @raskad in [#2917](https://github.com/boa-dev/boa/pull/2917)
- Fix `GetSubstitution` by @HalidOdat in [#2933](https://github.com/boa-dev/boa/pull/2933)
- Allow escaped `async` as binding name by @jedel1043 in [#2936](https://github.com/boa-dev/boa/pull/2936)
- Fix tagged template creation by @raskad in [#2925](https://github.com/boa-dev/boa/pull/2925)
- Implement Private Runtime Environments by @raskad in [#2929](https://github.com/boa-dev/boa/pull/2929)
- Fix remaining ES5 `built-ins/RegExp` tests by @HalidOdat in [#2957](https://github.com/boa-dev/boa/pull/2957)
- Fix remaining static module bugs by @jedel1043 in [#2955](https://github.com/boa-dev/boa/pull/2955)
- Deny Unicode Escapes in boolean and null expressions by @veera-sivarajan in [#2931](https://github.com/boa-dev/boa/pull/2931)
- Fix `Date` for dynamic timezones by @jedel1043 in [#2877](https://github.com/boa-dev/boa/pull/2877)
- Fix ES5 selector by @veera-sivaraja in [#2924](https://github.com/boa-dev/boa/pull/2924)
- Labelled ByteCompiler Fix by @nekevss in [#2534](https://github.com/boa-dev/boa/pull/2534)
- Fix verbose test display by @jedel1043 in [#2731](https://github.com/boa-dev/boa/pull/2731)
- Fix WASM playground by @jedel1043 in [#2992](https://github.com/boa-dev/boa/pull/2992)
- Correctly initialize functions inside modules by @jedel1043 in [#2993](https://github.com/boa-dev/boa/pull/2993)
- Allow `true`, `false` and `null` in object patterns by @jedel1043 in [#2994](https://github.com/boa-dev/boa/pull/2994)
- Fix panic in optional expressions with private identifiers by @raskad in [#2995](https://github.com/boa-dev/boa/pull/2995)
- Fix prompt on windows by @ShaneEverittM in [#2986](https://github.com/boa-dev/boa/pull/2986)
- Fix panic in constructor call by @raskad in [#3001](https://github.com/boa-dev/boa/pull/3001)
- Unify async iterators and iterators compilation by @jedel1043 in [#2976](https://github.com/boa-dev/boa/pull/2976)
- Correctly parse `yield import(..)` expressions by @jedel1043 in [#3006](https://github.com/boa-dev/boa/pull/3006)
- Return the correct value during a labelled break by @raskad in [#2996](https://github.com/boa-dev/boa/pull/2996)
- Fix panics on empty return values by @raskad in [#3018](https://github.com/boa-dev/boa/pull/3018)
- Add early error for `await` in class static blocks by @raskad in [#3019](https://github.com/boa-dev/boa/pull/3019)
- Fix class constructor return value by @raskad in [#3028](https://github.com/boa-dev/boa/pull/3028)
- Fix super property access by @raskad in [#3026](https://github.com/boa-dev/boa/pull/3026)
- Skip reversing arguments in SuperCallDerived by @dirkdev98 in [#3062](https://github.com/boa-dev/boa/pull/3062)
- Mark header of rooted ephemerons when tracing by @jedel1043 in [#3049](https://github.com/boa-dev/boa/pull/3049)
- Copy `ABOUT.md` file to all published crates by @jedel1043 in [#3074](https://github.com/boa-dev/boa/pull/3074)
- Correctly handle finally..loop..break by @dirkdev98 in [#3073](https://github.com/boa-dev/boa/pull/3073)
### Internal Improvements
- Direct conversion from `u8` to `Opcode` by @HalidOdat [#2951](https://github.com/boa-dev/boa/pull/2951)
- Fix links in readme by @raskad in [#2304](https://github.com/boa-dev/boa/pull/2304)
- Switch to workspace inherited properties by @jedel1043 in [#2297](https://github.com/boa-dev/boa/pull/2297)
- Separate JsObjectType implementors to their own module by @CalliEve in [#2324](https://github.com/boa-dev/boa/pull/2324)
- First prototype for new `JsString` using UTF-16 by @jedel1043 in [#1659](https://github.com/boa-dev/boa/pull/1659)
- Split `Node` into `Statement`, `Expression` and `Declaration` by @jedel1043 in [#2319](https://github.com/boa-dev/boa/pull/2319)
- Changes neccesary -> necessary by @nekevss in [#2370](https://github.com/boa-dev/boa/pull/2370)
- Cleanup and speed-up CI by @RageKnify in [#2376](https://github.com/boa-dev/boa/pull/2376)
- Reduce documentation size in blog by @jedel1043 in [#2383](https://github.com/boa-dev/boa/pull/2383)
- Generate `Opcode` impl using macro by @jedel1043 in [#2391](https://github.com/boa-dev/boa/pull/2391)
- Extract the ast to a crate by @jedel1043 in [#2402](https://github.com/boa-dev/boa/pull/2402)
- Replace `contains` and friends with visitors by @jedel1043 in [#2403](https://github.com/boa-dev/boa/pull/2403)
- Rewrite some patterns with let-else and ok_or_else by @jedel1043 in [#2404](https://github.com/boa-dev/boa/pull/2404)
- Fix async tests result values by @jedel1043 in [#2406](https://github.com/boa-dev/boa/pull/2406)
- Rewrite scope analysis operations using visitors by @jedel1043 in [#2408](https://github.com/boa-dev/boa/pull/2408)
- Make `JsString` conform to miri tests by @jedel1043 in [#2412](https://github.com/boa-dev/boa/pull/2412)
- Reduced boilerplate code in the parser by @Razican in [#2410](https://github.com/boa-dev/boa/pull/2410)
- Extract the parser into a crate by @jedel1043 in [#2409](https://github.com/boa-dev/boa/pull/2409)
- Switch tarpaulin to llvm engine by @RageKnify in [#2432](https://github.com/boa-dev/boa/pull/2432)
- Cleanup `boa_tester` by @jedel1043 in [#2440](https://github.com/boa-dev/boa/pull/2440)
- Restructure lint lists in `boa_ast` by @raskad in [#2433](https://github.com/boa-dev/boa/pull/2433)
- Restructure lints in multiple crates by @raskad in [#2447](https://github.com/boa-dev/boa/pull/2447)
- Restructure lint lists in `boa_engine` by @raskad in [#2455](https://github.com/boa-dev/boa/pull/2455)
- Fix rust 1.66.0 lints by @raskad in [#2486](https://github.com/boa-dev/boa/pull/2486)
- Divide byte compiler by @e-codes-stuff in [#2425](https://github.com/boa-dev/boa/pull/2425)
- Cleanup inline annotations by @jedel1043 in [#2493](https://github.com/boa-dev/boa/pull/2493)
- [profiler] Cache StringId by @tunz in [#2495](https://github.com/boa-dev/boa/pull/2495)
- Improve identifier parsing by @jedel1043 in [#2581](https://github.com/boa-dev/boa/pull/2581)
- Remove Syntax Errors from Bytecompiler by @raskad in [#2598](https://github.com/boa-dev/boa/pull/2598)
- fix: RUSTSEC-2020-0071 in boa_engine by @hanabi1224 in [#2627](https://github.com/boa-dev/boa/pull/2627)
- Migrate tests to new test API by @jedel1043 in [#2619](https://github.com/boa-dev/boa/pull/2619)
- [regexp] new tests for unicode flag by @selfisekai in [#2656](https://github.com/boa-dev/boa/pull/2656)
- Handle surrogates in `String.fromCodePoint` by @jedel1043 in [#2659](https://github.com/boa-dev/boa/pull/2659)
- Bump Test262 and add new features by @jedel1043 in [#2729](https://github.com/boa-dev/boa/pull/2729)
- Fix cross-realm construction bugs by @jedel1043 in [#2786](https://github.com/boa-dev/boa/pull/2786)
- Lift `InternalObjectMethods` from `Object` by @jedel1043 in [#2790](https://github.com/boa-dev/boa/pull/2790)
- Implement async functions using generators by @jedel1043 in [#2821](https://github.com/boa-dev/boa/pull/2821)
- Improve strictness of `GeneratorState` by @jedel1043 in [#2837](https://github.com/boa-dev/boa/pull/2837)
- Upgraded to ICU 1.2 by @Razican in [#2826](https://github.com/boa-dev/boa/pull/2826)
- Fix setting properties inside `with` blocks by @jedel1043 in [#2847](https://github.com/boa-dev/boa/pull/2847)
- Create a unique `PromiseCapability` on each async function call by @jedel1043 in [#2846](https://github.com/boa-dev/boa/pull/2846)
- Refactor binding handling APIs by @jedel1043 in [#2870](https://github.com/boa-dev/boa/pull/2870)
- Refactor guards into a `ContextCleanupGuard` abstraction by @jedel1043 in [#2890](https://github.com/boa-dev/boa/pull/2890)
- Refactor binding declarations by @raskad in [#2887](https://github.com/boa-dev/boa/pull/2887)
- Cleanup some bytecompiler code by @raskad in [#2918](https://github.com/boa-dev/boa/pull/2918)
- Fix `use_self` lints by @raskad in [#2946](https://github.com/boa-dev/boa/pull/2946)
- Remove unused lint allows by @raskad in [#2968](https://github.com/boa-dev/boa/pull/2968)
- Decouple bytecompiler from CodeBlock by @HalidOdat in [#2669](https://github.com/boa-dev/boa/pull/2669)
- Clarity changes for the VM by @nekevss in [#2531](https://github.com/boa-dev/boa/pull/2531)
- Bump bitflags to 2.0.0 by @Razican in [#2666](https://github.com/boa-dev/boa/pull/2666)
- Replace deprecated set-output command by @karol-jani in [#2500](https://github.com/boa-dev/boa/pull/2500)
- Documentation Updates by @nekevss in [#2463](https://github.com/boa-dev/boa/pull/2463)
- Fixed typo in the docs by @Razican in [#2450](https://github.com/boa-dev/boa/pull/2450)
- update tasks.json by @jasonwilliams in [#2313](https://github.com/boa-dev/boa/pull/2313)
- Updated the Code of Conduct by @Razican in [#2365](https://github.com/boa-dev/boa/pull/2365)
- Bump serde_json from 1.0.85 to 1.0.86 by @jedel1043 in [#2341](https://github.com/boa-dev/boa/pull/2341)
- Add test case for issue #2719 by @jedel1043 in [#2980](https://github.com/boa-dev/boa/pull/2980)
- Remove unneded `num_bindings` in `Opcode`s and `CodeBlock` by @HalidOdat in [#2967](https://github.com/boa-dev/boa/pull/2967)
- Added period to sentence by @nekevss in [#2939](https://github.com/boa-dev/boa/pull/2939)
- Prune collected shared shapes by @HalidOdat in [#2941](https://github.com/boa-dev/boa/pull/2941)
- Separate declarative environment kinds by @jedel1043 in [#2921](https://github.com/boa-dev/boa/pull/2921)
- Shrink environment binding locators by @HalidOdat in [#2950](https://github.com/boa-dev/boa/pull/2950)
- Extract "About Boa" section into a separate file by @jedel1043 in [#2938](https://github.com/boa-dev/boa/pull/2938)
- Remove `arguments_binding` field from `CodeBlock` by @HalidOdat in [#2969](https://github.com/boa-dev/boa/pull/2969)
- Remove redundant `param_count` field from `CallFrame` by @HalidOdat in [#2962](https://github.com/boa-dev/boa/pull/2962)
- Direct length access on arrays by @HalidOdat in [#2796](https://github.com/boa-dev/boa/pull/2796)
- Prevent allocation of field names by @HalidOdat in [#2901](https://github.com/boa-dev/boa/pull/2901)
- Added unit tests for `boa_ast::Punctuator` by @Razican in [#2884](https://github.com/boa-dev/boa/pull/2884)
- Added unit tests for `boa_ast::Keyword` by @Razican in [#2883](https://github.com/boa-dev/boa/pull/2883)
- Make update operations reuse the last found binding locator by @jedel1043 in [#2876](https://github.com/boa-dev/boa/pull/2876)
- Docs update for boa_runtime and console documentation by @nekevss in [#2891](https://github.com/boa-dev/boa/pull/2891)
- Direct array element access on `ByValue` instructions by @HalidOdat in [#2827](https://github.com/boa-dev/boa/pull/2827)
- Optimize `String.prototype.normalize` by @jedel1043 in [#2848](https://github.com/boa-dev/boa/pull/2848)
- Fix more Annex B tests by @jedel1043 in [#2841](https://github.com/boa-dev/boa/pull/2841)
- Enable github queues and remove bors.toml by @jedel1043 in [#2899](https://github.com/boa-dev/boa/pull/2899)
- Shrink size of `IndexedProperties` by @HalidOdat in [#2757](https://github.com/boa-dev/boa/pull/2757)
- Added an example usage to documentation by @Razican in [#2742](https://github.com/boa-dev/boa/pull/2742)
- Don't construct prototype if not needed by @HalidOdat in [#2751](https://github.com/boa-dev/boa/pull/2751)
- Implement `is_identifier_(start/part)` using `icu_properties` by @jedel1043 in [#2865](https://github.com/boa-dev/boa/pull/2865)
- Add boa logo to remaining hosted docs by @nekevss in [#2740](https://github.com/boa-dev/boa/pull/2740)
- Added a bunch more tests by @Razican in [#2885](https://github.com/boa-dev/boa/pull/2885)
- Updated dependencies, removes `remove_dir_all`, which is vulnerable by @Razican in [#2685](https://github.com/boa-dev/boa/pull/2685)
- Updated README by @Razican in [#2825](https://github.com/boa-dev/boa/pull/2825)
- Remove panics on module compilation by @jedel1043 in [#2730](https://github.com/boa-dev/boa/pull/2730)
- Update icu dependencies by @raskad in [#2574](https://github.com/boa-dev/boa/pull/2574)
- Pin tarpaulin version to 0.22 by @jedel1043 in [#2562](https://github.com/boa-dev/boa/pull/2562)
- Improve the design of ephemerons in our GC by @jedel1043 in [#2530](https://github.com/boa-dev/boa/pull/2530)
- Pass locale data provider by ref instead of boxing by @jedel1043 in [#2508](https://github.com/boa-dev/boa/pull/2508)
- Fast path for static property keys by @tunz in [#2604](https://github.com/boa-dev/boa/pull/2604)
- Replace `criterion::black_box` with `std::hint::black_box` by @jedel1043 in [#2494](https://github.com/boa-dev/boa/pull/2494)
- Shrink objects by using `ThinVec`s by @HalidOdat in [#2752](https://github.com/boa-dev/boa/pull/2752)
- Redesign native functions and closures API by @jedel1043 in [#2499](https://github.com/boa-dev/boa/pull/2499)
- Make the `wasmbind` feature of the `chrono` crate optional by @Razican in [#2810](https://github.com/boa-dev/boa/pull/2810)
- Use opcode table rather than match by @tunz in [#2501](https://github.com/boa-dev/boa/pull/2501)
- Align iterator loops to the spec by @jedel1043 in [#2686](https://github.com/boa-dev/boa/pull/2686)
- Add AST node for parenthesized expressions by @raskad in [#2738](https://github.com/boa-dev/boa/pull/2738)
- Optimize Get/SetPropertyByName by @tunz in [#2608](https://github.com/boa-dev/boa/pull/2608)
- Keep Integer type for inc/dec of an integer by @tunz in [#2615](https://github.com/boa-dev/boa/pull/2615)
- Implement `CompletionRecords` for the Vm by @nekevss in [#2618](https://github.com/boa-dev/boa/pull/2618)
- Feature flag on builtins console import by @nekevss in [#2584](https://github.com/boa-dev/boa/pull/2584)
- Fix documentation links by @Razican in [#2741](https://github.com/boa-dev/boa/pull/2741)
- Updated syn to 2.0.3 by @Razican in [#2702](https://github.com/boa-dev/boa/pull/2702)
- Cleanup intrinsics and move to realm by @jedel1043 in [#2555](https://github.com/boa-dev/boa/pull/2555)
- Rename `check_parser` and `Identifier` by @jedel1043 in [#2576](https://github.com/boa-dev/boa/pull/2576)
- Fix rust 1.67 lints by @raskad in [#2567](https://github.com/boa-dev/boa/pull/2567)
- Avoid unneeded bounds checks in bytecode address patching by @HalidOdat in [#2680](https://github.com/boa-dev/boa/pull/2680)
- Rust 1.68 clippy fixes by @nekevss in [#2646](https://github.com/boa-dev/boa/pull/2646)
- Fix rust 1.70 lints by @raskad in [#2990](https://github.com/boa-dev/boa/pull/2990)
- Simplify/Refactor exception handling and last statement value by @HalidOdat in [#3053](https://github.com/boa-dev/boa/pull/3053)
@ -1010,7 +1323,7 @@ Tests have also been moved to their own files, we had a lot of tests in some mod
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 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.
@ -1019,8 +1332,8 @@ We decided to break the parser into more of a state-machine. The initial decisio
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.\
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!