Skip to content

fix(ecmascript): mark new Symbol as non side-effect free#17568

Merged
graphite-app[bot] merged 1 commit into
mainfrom
c/01-01-fix_ecmascript_mark_new_symbol_as_non_side-effect_free
Jan 4, 2026
Merged

fix(ecmascript): mark new Symbol as non side-effect free#17568
graphite-app[bot] merged 1 commit into
mainfrom
c/01-01-fix_ecmascript_mark_new_symbol_as_non_side-effect_free

Conversation

@camc314

@camc314 camc314 commented Jan 1, 2026

Copy link
Copy Markdown
Contributor

Screenshot 2026-01-01 at 22.03.21.png

new Symbol throws an error

@github-actions github-actions Bot added A-minifier Area - Minifier C-bug Category - Bug labels Jan 1, 2026

camc314 commented Jan 1, 2026

Copy link
Copy Markdown
Contributor Author

How to use the Graphite Merge Queue

Add either label to this PR to merge it via the merge queue:

  • 0-merge - adds this PR to the back of the merge queue
  • hotfix - for urgent hot fixes, skip the queue and merge this PR next

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@camc314
camc314 marked this pull request as ready for review January 1, 2026 22:03
Copilot AI review requested due to automatic review settings January 1, 2026 22:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes the incorrect classification of new Symbol as side-effect free. According to the ECMAScript specification, Symbol is not a constructor and throws a TypeError when invoked with the new operator, making it a side effect that must be preserved during minification.

  • Removed Symbol from the is_pure_constructor function to correctly identify new Symbol as having side effects
  • Updated test expectations to reflect that new Symbol should be marked as having side effects (true), while Symbol() without new remains side-effect free

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
crates/oxc_ecmascript/src/side_effects/expressions.rs Removed Symbol from the is_pure_constructor list since it throws when used with new
crates/oxc_minifier/tests/ecmascript/may_have_side_effects.rs Moved new Symbol test from side-effect free (false) to has side effects (true)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@codspeed-hq

codspeed-hq Bot commented Jan 1, 2026

Copy link
Copy Markdown

CodSpeed Performance Report

Merging #17568 will not alter performance

Comparing c/01-01-fix_ecmascript_mark_new_symbol_as_non_side-effect_free (0262b49) with main (5f189f8)

Summary

✅ 42 untouched
⏩ 3 skipped1

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@sapphi-red sapphi-red added the 0-merge Merge with Graphite Merge Queue label Jan 4, 2026

sapphi-red commented Jan 4, 2026

Copy link
Copy Markdown
Member

Merge activity

@graphite-app
graphite-app Bot force-pushed the c/01-01-fix_ecmascript_mark_new_symbol_as_non_side-effect_free branch from 0262b49 to 1044116 Compare January 4, 2026 09:40
@graphite-app
graphite-app Bot merged commit 1044116 into main Jan 4, 2026
20 checks passed
@graphite-app
graphite-app Bot deleted the c/01-01-fix_ecmascript_mark_new_symbol_as_non_side-effect_free branch January 4, 2026 09:46
@graphite-app graphite-app Bot removed the 0-merge Merge with Graphite Merge Queue label Jan 4, 2026
graphite-app Bot pushed a commit that referenced this pull request Jan 5, 2026
### 🚀 Features

- 659c23e linter: Init note field boilerplate  (#17589) (Shrey Sudhir)
- 6870b64 parser: Add TS1363 error code (#17609) (Sysix)
- 23680a3 mangler: Skip mangling only in scopes affected by direct eval (#17612) (camc314)
- a7e1643 parser: Add TS2528 error code to duplicate_default_export diagnostic (#17558) (camc314)

### 🐛 Bug Fixes

- 1044116 ecmascript: Mark `new Symbol` as non side-effect free (#17568) (camc314)
- ab5e4ca isolated-declarations: Strip default values from rest parameter binding patterns (#17602) (camc314)
- 68b2e54 minifier: Prevent incorrect ??= transformation when member base is mutated (#17472) (copilot-swe-agent)

### ⚡ Performance

- 6067143 semantic: Remove hash when checking identifier (#17564) (camchenry)
- a28ab3d semantic: Avoid bounds check when checking string literal (#17545) (camc314)
- 04809d1 semantic: Use SIMD for finding backslashes in `check_string_literal` (#17534) (camchenry)
- 49ad2f0 semantic: Mark all diagnostic functions as `#[cold]` (#17487) (camc314)
- ea82b50 transformer: Mark all diagnostic functions as `#[cold]` (#17486) (camc314)
- d968e51 semantic: Mark `checker::check` as `inline(always)` (#17459) (camc314)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-minifier Area - Minifier C-bug Category - Bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants