fix(es/compat): Preserve SyntaxContext in ES3 reserved word transformation
This commit improves the ES3 reserved word transformation pass to use the
explicit `with_prefix` method when renaming identifiers, ensuring that the
SyntaxContext field is preserved properly.
## Background
The ES3 reserved word pass renames identifiers that are reserved in ES3
(like `char`, `byte`, `int`, etc.) by prefixing them with underscore to
avoid conflicts in ES3 environments. Previously, the code directly modified
the `sym` field: `i.sym = format!("_{}", i.sym).into()`. While this did
preserve the `ctxt` field implicitly, it was not as explicit and clear as
using the dedicated `with_prefix` method.
## Changes
- Use `Ident::with_prefix("_")` instead of direct `sym` field modification
- Add comprehensive test cases covering:
- Multiple reserved words in exports (nextjs_issue_86076 test)
- Mixed export syntax with function, const, and class
- Multiple reserved words exported together
- Variable declarations with reserved words
## Testing
All existing tests pass, and new tests verify the transformation works
correctly for various scenarios including the Next.js issue #86076 case.
Related: vercel/next.js#86076
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>