SIGN IN SIGN UP

React Compiler: avoid deep ast clone and quadratic-time codegen (#37206)

tl;dr this reduces peak memory allocation by 5-15%, and reduces codegen
time by 30-70% depending on payload. On heavy components with deep ASTs
the impact is more exaggerated.

## Summary

Codegen of temp vars records the expressions they replaced, so that they
can be unwound. In the TS version this uses a `Map` and stores pointers
to AST nodes - relatively cheap. For borrow-checking reasons, the Rust
version clones the AST. This results in recurring deep clones, making
codegen accidentally quadratic and using significant amounts of memory.

This introduces a convenience data structure for emitting temp vars in
an unwindable manner, without heavy AST allocation.

It also avoids a separate AST deep clone when propagating null values.

## How did you test this change?

All fixtures pass with byte-identical outputs.

Ran this against real codebases and pathological benchmark cases,
confirming byte-identical output as well.
A
Andrew Imm committed
b939280bb3e2d79f62fd62aa264cbf2a3d5b90a2
Parent: 8c94e0e
Committed by GitHub <noreply@github.com> on 8/24/2026, 5:38:48 PM