Commit Graph

92 Commits

Author SHA1 Message Date
oxc-guard 7ebbdddce7 chore(submodules): update submodule SHAs to latest commits (#25505)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `b363f29` → `be13516`
- babel: `06b6eae` → `1eac448`
- estree-conformance: `f7a4e0c` → `8d4e1fa`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2026-08-11 16:17:31 +00:00
oxc-guard[bot] 4e7007118d chore(submodules): update submodule SHAs to latest commits (#25261)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `d1d583d` → `b363f29`
- babel: `c86e9e4` → `06b6eae`
- TypeScript: `637d574` → `b465fdb`
- estree-conformance: `e8fd120` → `f7a4e0c`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: oxc-guard[bot] <276638029+oxc-guard[bot]@users.noreply.github.com>
2026-08-03 22:09:18 +01:00
oxc-guard[bot] 17cb5c13c5 chore(submodules): update submodule SHAs to latest commits (#24463)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `de8e621` → `d1d583d`
- babel: `1fb0b77` → `c86e9e4`
- TypeScript: `7964e22` → `637d574`
- estree-conformance: `6514ad7` → `e8fd120`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: oxc-guard[bot] <276638029+oxc-guard[bot]@users.noreply.github.com>
2026-07-13 14:24:36 +01:00
camc314 c3057dac59 fix(transformer): preserve generated class binding spans (#24220)
## Summary

- preserve outer and inner class binding spans during legacy decorator lowering
- add a span-aware traversal binding generator for transformed source-backed bindings
- update semantic coverage snapshots, removing stale `Span { start: 0, end: 0 }` mismatches
2026-07-07 06:53:38 +00:00
camc314 4b16e1a342 fix(transformer/async-to-generator): preserve direct eval scope flags (#24136)
## Summary

- propagate `DirectEval` when async-to-generator lowering inserts wrapper scopes
- update the Test262 semantic snapshot for the newly passing cases

## Known edge case

A direct eval nested in a function-valued default parameter of an async method can still leave a stale flag when that parameter scope is reparented. This should be addressed by the new function body scope logic
2026-07-03 17:11:56 +00:00
camc314 018c0e57ec fix(transformer): hoist lowered async declarations (#22770)
Fixes semantic scope mismatches when async function declarations are lowered inside sloppy block scopes.

Before this change, `async_to_generator` kept the original async function binding, and the generated helper binding, in the current block scope. After transform those declarations are no longer async:

```js
with (obj) {
  async function ref() {}
}
```

becomes roughly:

```js
with (obj) {
  function ref() {
    return _ref.apply(this, arguments);
  }
  function _ref() {
    _ref = babelHelpers.asyncToGenerator(function* () {});
    return _ref.apply(this, arguments);
  }
}
```

A fresh semantic rebuild treats those lowered plain function declarations with Annex B hoisting rules, so in sloppy block scopes their bindings can belong to the enclosing var scope instead of the block scope. The transformed semantic tree was still using the pre-lowered block placement, which caused rebuild mismatches in Test262 coverage.

This PR makes `async_to_generator` choose the same binding scope that a rebuilt semantic tree would use for the emitted plain function declarations, while preserving the existing behavior for TypeScript, strict mode, var scopes, and cases where the hoist scope already has a binding.
2026-07-02 19:47:32 +00:00
oxc-guard 9e72aa0312 chore(submodules): update submodule SHAs to latest commits (#23451)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `05bb032` → `de8e621`
- babel: `2688fbd` → `1fb0b77`
- TypeScript: `7539c04` → `7964e22`
- estree-conformance: `ca42c3d` → `6514ad7`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2026-06-15 14:31:01 +00:00
oxc-guard b4f9cb9d8c chore(submodules): update submodule SHAs to latest commits (#23118)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `7e115f4` → `05bb032`
- babel: `d9fe348` → `2688fbd`
- TypeScript: `e5509e2` → `7539c04`
- estree-conformance: `faf089d` → `ca42c3d`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2026-06-08 14:49:36 +00:00
Cameron e1d064e498 fix(transformer/class-properties): reparent lifted private method helpers (#22716)
## Summary

Fixes semantic scope metadata for private method helper functions that
are lifted out of classes nested inside static field initializers.

The class-properties transform converts a private method into a helper
function declaration and emits that helper outside the class. For a
nested class inside a static field initializer, `current_scope_id()`
points at the nested class scope, but the helper is actually emitted
into the surrounding hoist scope. That made semantic rebuild disagree
with the transformed AST.

## Before

```js
class Outer {
  static value = class Inner {
    static #method() {}
  };
}
```

The helper function was reparented as if it still lived under the nested
class scope:

```mermaid
flowchart TD
  Program["enclosing hoist scope"] --> Outer["Outer class scope"]
  Outer --> Field["static field initializer"]
  Field --> Inner["Inner class scope"]
  Inner --> Helper["lifted helper function scope"]
  Helper -.-> Problem["incorrect parent + strict-mode source"]
```

In code, the old logic always used the current scope and current scope
flags:

```rust
let new_parent_id = ctx.current_scope_id();
ctx.scoping_mut().change_scope_parent_id(scope_id, Some(new_parent_id));
let make_sloppy_mode = !ctx.current_scope_flags().is_strict_mode();
```

That is correct for normal private methods, but not for private methods
inside a class expression that appears in a static field initializer.

## After

When the transform is running under a static `PropertyDefinitionValue`,
the helper is parented to the current hoist scope instead:

```rust
let new_parent_id = if Self::is_inside_static_property_initializer(ctx) {
    ctx.current_hoist_scope_id()
} else {
    ctx.current_scope_id()
};
ctx.scoping_mut().change_scope_parent_id(scope_id, Some(new_parent_id));
let make_sloppy_mode = !ctx.scoping().scope_flags(new_parent_id).is_strict_mode();
```

The predicate checks the field is actually static:

```rust
matches!(ancestor, Ancestor::PropertyDefinitionValue(property) if *property.r#static())
```

The resulting scope shape now matches where the helper is emitted:

```mermaid
flowchart TD
  Program["enclosing hoist scope"] --> Helper["lifted helper function scope"]
  Program --> Outer["Outer class scope"]
  Outer --> Field["static field initializer"]
  Field --> Inner["Inner class scope"]
```

The strict/sloppy adjustment also reads from the selected parent scope,
so the helper's flags match the output location rather than the original
nested class context.

## Validation

- `just fmt`
- `cargo test -p oxc_transformer`
- `just coverage` was run before review. It aborted later with a stack
overflow / signal 6 in `target/coverage/oxc_coverage`; before the abort,
the targeted `semantic_test262` failures were removed from the generated
snapshot output.

AI assistance: Codex was used to cherry-pick, review, test, and draft
this PR description.
2026-05-26 13:44:11 +08:00
oxc-guard[bot] 50baca037c chore(submodules): update submodule SHAs to latest commits (#22721)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `78fc3f8` → `7e115f4`
- babel: `3d34928` → `d9fe348`
- TypeScript: `f350b52` → `e5509e2`
- estree-conformance: `576e7d8` → `faf089d`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: oxc-guard[bot] <276638029+oxc-guard[bot]@users.noreply.github.com>
2026-05-25 22:16:39 +08:00
camc314 7baed9c4b7 fix(transformer/private-method): clear inherited strict flags (#22508)
Fixes private method transforms so scopes inherited from a transformed private method are converted back to sloppy mode when the surrounding scope is sloppy.

Previously we only cleared `StrictMode` on the private method function scope itself. That left child scopes, such as async/generator wrapper scopes, marked as strict even though the transformed output is no longer inside a class method. This caused semantic rebuild mismatches across Babel and Test262 coverage.

Nested classes are still left strict, since class bodies are always strict mode.
2026-05-25 09:39:48 +00:00
oxc-guard[bot] ec7de07b08 chore(submodules): update submodule SHAs to latest commits (#22550)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `ccaac10` → `78fc3f8`
- babel: `4079bcd` → `3d34928`
- estree-conformance: `9c67f5e` → `576e7d8`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: oxc-guard[bot] <276638029+oxc-guard[bot]@users.noreply.github.com>
2026-05-19 10:46:02 +08:00
camc314 c73c159e16 fix(transformer/async-to-generator): reparent parameter initializer scopes (#22507)
Fixes a semantic mismatch in `async_to_generator` for async methods with parameter default initializers.

Before this change, the transform reused the original method scope as the inner generator scope and moved parameter bindings to the wrapper scope. Scopes created inside parameter defaults were left parented under the generator, even though the transformed AST places those defaults with the wrapper parameters.

For example:

```js
class C {
  async method(value = function fallback() {}) {}
}
```

Conceptually this became:

```js
class C {
  method(value = function fallback() {}) {
    // `value` belongs to this wrapper scope.

    return asyncToGenerator(function* () {
      // Before: the scope for `fallback` was still parented here,
      // because this generator reused the original async method scope.
    })();
  }
}
```

A fresh semantic rebuild from the transformed AST sees it differently:

```js
class C {
  method(value = function fallback() {
    // After rebuild: `fallback` is created from the parameter default,
    // so its direct parent is the wrapper method scope.
  }) {
    return asyncToGenerator(function* () {
      // The generator should only own body scopes.
    })();
  }
}
```

This updates `BindingMover` so that when parameter bindings move to the wrapper, direct scopes created inside parameter-side expressions are reparented there too. It still stops at function/class scope boundaries, so nested body scopes are not traversed or moved.
2026-05-17 19:36:14 +00:00
camc314 ecfd3ca7c5 fix(transformer/async-to-generator): move only parameter bindings (#22503)
Previously, given:

```js
class C {
  async method(x = function y() {}) {}
}
```

The async-to-generator transform generates:

```js
class C {
  method(x = function y() {}) {
    return babelHelpers.asyncToGenerator(function* () {})();
  }
}
```

The method parameter stays on the outer wrapper method, while only the original body moves into the inner generator function.

Before this change, `BindingMover` walked the full parameter AST while moving those parameter bindings. That meant it also visited default initializer expressions, so bindings created inside the initializer, like `y` above, could be moved out of their own function/class scope and into the wrapper method scope.

After transform, rebuilt semantics would disagree with the transformed scope tree because the parameter binding was correct, but nested initializer bindings had the wrong owning scope.

This PR makes `BindingMover` only visit the binding positions for formal parameters, rest parameters, and the left side of assignment patterns. It skips initializer expressions so nested function/class bindings stay in the scopes created for those expressions.
2026-05-17 17:22:46 +00:00
camc314 b8fbc1f4a1 fix(transformer/object-rest-spread): correct scope id when moving bindings (#22419)
Previously, given:
```
for (var { x, ...rest } of iterable) {}
```

The destructuring pattern appears in the `for` head, but `var` bindings are not owned by that scope - `x` and `rest` are hoisted into the current hoist scope.

After transform:

```
for (var _ref of iterable) {
  var x = _ref.x;
  var rest = _objectWithoutProperties(_ref, _excluded);
}
```

The bindings moved into the loop scope, but since we were passing the `for` loop's scope, `move_binding_by_symbol_id` was a no-op as the var decls were not defined in the `for` loop's scope.

This PR get's the declared scope of the symbol and uses it rather than assuming that the var is scoped to the function
2026-05-14 12:07:25 +00:00
oxc-guard e68f4fa1c3 chore(submodules): update submodule SHAs to latest commits (#22417)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `d0c1b45` → `ccaac10`
- babel: `6402dbb` → `4079bcd`
- estree-conformance: `d968f2c` → `9c67f5e`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2026-05-14 10:36:57 +00:00
camc314 dda33deea8 fix(transformer/explicit-resource-management): align lexical binding scopes (#22320)
Part of #9699
2026-05-14 09:18:42 +00:00
camc314 8e79de8f86 fix(transformer): preserve for-await statement bodies (#22361) 2026-05-12 18:28:15 +00:00
camc314 67ab1c9288 fix(transformer/es2018/for-await): hoist for-await generated bindings (#22355)
`for await` lowering emits several temporary bindings as `var`, but the transformer was registering those generated symbols in the current block scope instead of the nearest hoist scope.

For example, this input:

```js
async function* f(iter) {
  {
    for await (const value of iter) {
      value;
    }
  }
}
```

is lowered into code shaped like this:

```js
async function* f(iter) {
  {
    var _iteratorAbruptCompletion = false;
    var _didIteratorError = false;
    var _iteratorError;

    try {
      for (
        var _iterator = _asyncIterator(iter), _step;
        //  ^^^^^^^^^                         ^^^^^
        //  These are `var` declarations, so semantically they belong to
        //  the function/hoist scope, not the inner block scope.
        _iteratorAbruptCompletion = !(_step = await _iterator.next()).done;
        _iteratorAbruptCompletion = false
      ) {
        const value = _step.value;
        value;
      }
    } catch (err) {
      _didIteratorError = true;
      _iteratorError = err;
    }
  }
}
```

Before this PR, the AST transform generated the right JavaScript, but its semantic metadata recorded `_iterator`, `_step`, `_didIteratorError`, `_iteratorError`, and `_iteratorAbruptCompletion` in the current block scope:

That made the transformed semantic data disagree with semantic data rebuilt from the emitted AST.
2026-05-12 17:37:47 +00:00
camc314 c3ceb4ab8a fix(transformer/object-rest-spread): use hoisted scope for for-of temp refs (#22347)
The transform rewrites cases like:

```js
for ({ ...rest } of [{}]) {}
```

to use a generated `var` binding in the loop head:

```js
for (var _ref of [{}]) {
  // ...
}
```

Previously, the generated `_ref` binding was being created in the loop statment scope (`current_scope_id`), this is incorrect because it is being emitted as `var`. The rebuilt semantic correctly shows it being hoisted into the current var-hoist scope.
2026-05-12 08:20:45 +00:00
camc314 4e880de872 fix(transformer/object-rest-spread): declare temp vars for computed keys (#22284)
Given some code like
```js
const {
  [({ ...rest }) => {
    let { ...b } = {};
  }]: a,
  [({ ...d } = {})]: c,
} = {};

export {}; // necessary so we are in strict mode
```
It would previously be transformed to:
```js
const { [(_ref) => {
	let rest = _extends({}, (_objectDestructuringEmpty(_ref), _ref));
	let _ref2 = {}, b = _extends({}, (_objectDestructuringEmpty(_ref2), _ref2));
}]: a, [(_ref3 = {}, {} = _ref3, d = _extends({}, (_objectDestructuringEmpty(_ref3), _ref3)), _ref3)]: c } = {};
export {};
```

This is a problem because there was no declaration to `_ref3`

This causes runtime errors.

After this PR, we now emit:

This new code includes `var _ref3`, fixing the unresolved reference issue.

```js
var _ref3;
const {
  [_ref => {
    let rest = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
    let _ref2 = {},
      b = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref2), _ref2));
  }]: a,
  [(_ref3 = {}, {} = _ref3, d = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref3), _ref3)), _ref3)]: c
} = {};

```

This aligns with Babel.

----

This has been fixed by walking up to find the containing statement, and inserting the var declaration before it.

Previously, the `var` declaration would only be inserted if we were inside `ExpressionStatementExpression` which was not guaranteed.
2026-05-11 09:14:25 +00:00
oxc-guard[bot] 550052a096 chore(submodules): update submodule SHAs to latest commits (#22170)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `2b2ecea` → `d0c1b45`
- babel: `c543b03` → `6402dbb`
- TypeScript: `c7a0ae1` → `f350b52`
- estree-conformance: `e4104a1` → `d968f2c`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: oxc-guard[bot] <276638029+oxc-guard[bot]@users.noreply.github.com>
2026-05-06 09:19:12 +01:00
Boshen 3fca6febc6 chore(submodules): update submodule SHAs to latest commits (#21455)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `ff0d161` → `2b2ecea`
- babel: `91b4ce3` → `c543b03`
- TypeScript: `7b8cb3b` → `c7a0ae1`
- estree-conformance: `d5e48e7` → `e4104a1`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2026-04-15 09:08:25 +00:00
Boshen 5f6ce21874 chore(submodules): update submodule SHAs to latest commits (#21105)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `5c82069` → `ff0d161`
- babel: `0124e7c` → `91b4ce3`
- TypeScript: `4f7b417` → `7b8cb3b`
- estree-conformance: `dc0f79b` → `d5e48e7`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2026-04-07 06:54:12 +00:00
Dunqing 9a5ff7320d fix(semantic): hoist Annex B block-scoped function declarations to var scope (#20728)
This PR replaces the mangler-level fix in #20705 with a semantic-level fix that is simpler and allows better name reuse.

## Summary

In sloppy mode JavaScript, function declarations inside blocks (`if`, `try`, `switch`, `{}`) have **Annex B.3.2.1** semantics: they create an implicit `var`-like binding in the enclosing function scope at block exit. The semantic analysis was not modeling this hoisting, which caused the mangler to assign conflicting names to block-scoped functions and outer `var` bindings — changing program behavior at runtime.

### How the fix works

Hoist plain (non-async, non-generator) function declarations from block scopes to the enclosing var scope during binding, using the **same pattern as `var` hoisting** (binder.rs lines 46-98):

1. `move_binding(block_scope, var_scope, name)` — moves the binding
2. `set_symbol_scope_id(symbol_id, var_scope)` — updates the symbol's scope
3. `hoisting_variables.insert(block_scope, name, symbol_id)` — keeps a hoisting entry in the block scope for redeclaration checks

This makes the mangler handle Annex B functions naturally alongside other var-scope bindings, with **zero mangler changes needed**. Name reuse from sibling scopes is preserved (unlike the mangler-level fix which was overly conservative).

### Guards

- `is_declaration` — function expressions are bound in their own (var) scope
- `!self.r#async && !self.generator` — Annex B only applies to plain functions
- `!builder.source_type.is_typescript()` — Annex B is JavaScript-only
- `!scope_flags.is_var()` — already in a var scope, no hoisting needed
- `!scope_flags.is_strict_mode()` — no Annex B in strict mode / modules

Fixes #20610. Fixes #14316.

Downstream: [vitejs/vite#22009](https://github.com/vitejs/vite/issues/22009), [rolldown/rolldown#8791](https://github.com/rolldown/rolldown/issues/8791).

## Test plan

- 13 sloppy-mode mangler snapshot test cases (all pass without mangler changes)
- 975 linter tests pass
- 40 semantic unit tests pass
- Parser conformance: improved (babel negative 1687→1689, test262 negative stays 100%)
- Semantic conformance: ~10 new mismatches in `semantic_test262` — these are transformer rebuild differences where the transformed JS output correctly gets Annex B hoisting that the original TS parse didn't have
2026-03-26 01:21:36 +00:00
Boshen 75f4a3e593 chore(submodules): update submodule SHAs to latest commits (#20651) 2026-03-23 18:23:15 +08:00
Boshen f42be37c91 chore(submodules): update submodule SHAs to latest commits (#20518)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `63829c6` → `3a9ecbe`
- babel: `87a048d` → `31b3d95`
- TypeScript: `c9e7428` → `9059e5b`
- estree-conformance: `4daa9d7` → `9a4ddfb`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-03-20 13:13:40 +08:00
Boshen 7e83da9f2f chore(submodules): update submodule SHAs to latest commits (#20268) 2026-03-12 19:07:19 +08:00
Boshen f467298373 chore(submodules): update submodule SHAs to latest commits (#19951) 2026-03-06 14:45:41 +08:00
Boshen 529fbac105 chore(submodules): update submodule SHAs to latest commits (#19662) 2026-02-24 15:34:23 +08:00
camc314 08b0218dd6 chore(submodules): update submodule SHAs to latest commits (#19518) 2026-02-18 14:56:36 +00:00
Boshen 333d4fb167 chore(submodules): update submodule SHAs to latest commits (#18841)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `fff41f0` → `dd6138f`
- babel: `6ef16ca` → `92c052d`
- TypeScript: `7f6a846` → `95e3aaa`
- estree-conformance: `389cb2a` → `6611520`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2026-02-03 04:30:00 +00:00
Boshen b225b29cc1 chore(submodules): update submodule SHAs to latest commits (#18334)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `6f55d0c` → `fff41f0`
- babel: `fc58af4` → `6ef16ca`
- TypeScript: `f5ccf43` → `7f6a846`
- estree-conformance: `4980d9b` → `389cb2a`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2026-01-22 16:13:31 +00:00
Dunqing 30a4899dd8 feat(oxc)!: remove CompilerInterface::semantic_child_scope_ids (#18361)
No usage in the Oxc and Rolldown (see https://github.com/rolldown/rolldown/pull/7995), and it will be removed in #18362, so remove this first.
2026-01-22 07:46:26 +00:00
Boshen 9fff61b940 fix(coverage): skip annexB assignmenttargettype tests in test262 conformance (#18157)
## Summary
- Skip annexB assignmenttargettype tests in test262 conformance suite
- These tests require call expressions to be valid assignment targets in non-strict mode (e.g., `f() = 1`, `f()++`, `for (f() in [1]) {}`)
- This is an Annex B "web reality" feature that oxc intentionally does not support

## Test plan
- [x] `cargo coverage -- parser` shows 100% pass rate (46556/46556)
- [x] All affected snapshots updated

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-18 02:09:41 +00:00
Boshen c98e5b77e4 fix(parser): parse for (using of = ...) as using declaration (#18142)
## Summary

- Fix parsing of `for (using of = null;;)` as a using declaration where `of` is the binding identifier
- Previously, the parser incorrectly treated `of` as the keyword starting a for-of loop

The fix uses a lookahead to check if the token after `of` is `=`, `;`, or `:`, matching TypeScript's parser behavior.

## Test plan

- `cargo coverage -- parser` - conformance tests pass
- `cargo test -p oxc_parser` - unit tests pass

🤖 Generated with [Claude Code](https://claude.ai/code)
2026-01-18 00:42:17 +00:00
Boshen 830b757f81 feat(regular_expression): add Unicode 17.0 script properties (#18140)
## Summary

Add support for 4 new scripts introduced in Unicode 17.0:
- `Beria_Erfe` (`Berf`)
- `Sidetic` (`Sidt`)
- `Tai_Yo` (`Tayo`)
- `Tolong_Siki` (`Tols`)

## Test plan

- [x] 8 parser_test262 tests now pass (from 46547 → 46555 positive passed)
- [x] 1 minifier_node_compat test now passes (from 930 → 931 positive passed)
- [x] 8 semantic_test262 tests now pass (from 44911 → 44919 positive passed)
- [x] `cargo test -p oxc_regular_expression` passes

🤖 Generated with [Claude Code](https://claude.ai/code)
2026-01-17 16:47:06 +00:00
Boshen 8687b0959f chore(submodules): update submodule SHAs to latest commits (#17978)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `9079aee` → `6f55d0c`
- babel: `761c250` → `fc58af4`
- TypeScript: `f3770c9` → `f5ccf43`
- estree-conformance: `87a8e99` → `4980d9b`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-01-14 15:13:29 +08:00
Boshen 66b47b1a5b chore(submodules): update submodule SHAs to latest commits (#17274)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `84082e2` → `9079aee`
- babel: `84d21e4` → `a6b5863`
- TypeScript: `b78f089` → `2dfdbba`
- estree-conformance: `4f260c1` → `18b46dd`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2025-12-22 21:38:11 +08:00
overlookmotel d1ce274d39 test(estree): update estree-conformance submodule (#17066)
Bump `estree-conformance` and `test262` submodules.

`estree-conformance` submodule now contains snapshots for tokens conformance testing: https://github.com/oxc-project/estree-conformance/pull/131 & https://github.com/oxc-project/estree-conformance/pull/134
2025-12-18 16:03:24 +00:00
Boshen 3bd05545af chore(submodules): update submodule SHAs to latest commits (#16909)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `c0cf527` → `947fee3`
- babel: `3591b24` → `84d21e4`
- TypeScript: `c21f73f` → `0a07132`
- estree-conformance: `1f2816b` → `e0aa1b4`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2025-12-15 15:45:25 +00:00
Boshen 0a3bb7bede chore(submodules): update submodule SHAs to latest commits (#16617)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `d0994d6` → `c0cf527`
- babel: `7958603` → `3591b24`
- TypeScript: `669c25c` → `c21f73f`
- estree-conformance: `3e67aec` → `1f2816b`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: graphite-app <96075541+graphite-app@users.noreply.github.com>
2025-12-10 15:28:16 +08:00
Boshen 3827464d2e chore(submodules): update submodule SHAs to latest commits (#16454)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `26058a0` → `d0994d6`
- babel: `99dcba5` → `7958603`
- estree-conformance: `21042b0` → `3e67aec`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2025-12-03 15:59:20 +00:00
Boshen f25f031fbf chore(submodules): update submodule SHAs to latest commits (#16084)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `c125a8d` → `26058a0`
- babel: `c92c491` → `99dcba5`
- TypeScript: `cc2610f` → `669c25c`
- prettier: `d7fe2da` → `864bb7c`
- acorn-test262: `fd0b12c` → `0435714`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: graphite-app <96075541+graphite-app@users.noreply.github.com>
2025-11-25 13:19:40 +08:00
Boshen 82471c8d5a chore(submodules): update submodule SHAs to latest commits (#15825)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `fd594a0` → `c125a8d`
- babel: `777ded7` → `c92c491`
- TypeScript: `48244d8` → `cc2610f`
- prettier: `9e9f65e` → `d7fe2da`
- acorn-test262: `9cce4c9` → `fd0b12c`
- node-compat-table: `6822522` → `499beb6`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2025-11-18 03:31:03 +00:00
Boshen 9b8f41459e chore(submodules): update submodule SHAs to latest commits (#15586)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `d2940bd` → `fd594a0`
- babel: `4cc3d88` → `777ded7`
- TypeScript: `8ea03f8` → `48244d8`
- prettier: `011791f` → `9e9f65e`
- acorn-test262: `994d763` → `9cce4c9`
- node-compat-table: `17ac85c` → `6822522`


This PR is automatically generated by the [update_submodules
workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2025-11-11 17:43:08 +08:00
Boshen bf09033cf6 chore(submodules): update submodule SHAs to latest commits (#15012)
Updates submodule dependencies to their latest commits.

## Changes

- test262: `baa48a4` → `d2940bd`
- babel: `41d9651` → `4cc3d88`
- TypeScript: `261630d` → `8ea03f8`
- prettier: `7584432` → `011791f`
- acorn-test262: `090bba4` → `994d763`
- node-compat-table: `ed0d6ba` → `17ac85c`

This PR is automatically generated by the [update_submodules workflow](https://github.com/oxc-project/oxc/blob/main/.github/workflows/update_submodules.yml).
2025-10-28 02:38:20 +00:00
Boshen f897e303eb chore(tasks): update test262, babel and TypeScript (#13217) 2025-08-20 01:22:35 +00:00
Dunqing e095e99cb9 fix(semantic): panics when function is the part of IfStatement (#12190)
close: #10015

Also, removed weird SymbolId!
2025-07-11 14:33:06 +00:00
Boshen 13825c03bc chore(coverage): bump test262, babel and typescript versions (#11163) 2025-05-20 01:51:51 +00:00