mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
[compiler] add fire imports (#31797)
Summary:
Adds import {useFire} from 'react' when fire syntax is used.
This is experimentation and may not become a stable feature in the
compiler.
--
---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with [ReviewStack](https://reviewstack.dev/facebook/react/pull/31797).
* #31811
* #31798
* __->__ #31797
This commit is contained in:
@@ -564,6 +564,11 @@ export function compileProgram(
|
||||
if (environment.enableChangeDetectionForDebugging != null) {
|
||||
externalFunctions.push(environment.enableChangeDetectionForDebugging);
|
||||
}
|
||||
|
||||
const hasFireRewrite = compiledFns.some(c => c.compiledFn.hasFireRewrite);
|
||||
if (environment.enableFire && hasFireRewrite) {
|
||||
externalFunctions.push({source: 'react', importSpecifierName: 'useFire'});
|
||||
}
|
||||
} catch (err) {
|
||||
handleError(err, pass, null);
|
||||
return;
|
||||
|
||||
@@ -787,6 +787,7 @@ export class Environment {
|
||||
fnType: ReactFunctionType;
|
||||
useMemoCacheIdentifier: string;
|
||||
hasLoweredContextAccess: boolean;
|
||||
hasFireRewrite: boolean;
|
||||
|
||||
#contextIdentifiers: Set<t.Identifier>;
|
||||
#hoistedIdentifiers: Set<t.Identifier>;
|
||||
@@ -811,6 +812,7 @@ export class Environment {
|
||||
this.#shapes = new Map(DEFAULT_SHAPES);
|
||||
this.#globals = new Map(DEFAULT_GLOBALS);
|
||||
this.hasLoweredContextAccess = false;
|
||||
this.hasFireRewrite = false;
|
||||
|
||||
if (
|
||||
config.disableMemoizationForDebugging &&
|
||||
|
||||
+6
@@ -103,6 +103,11 @@ export type CodegenFunction = {
|
||||
* This is true if the compiler has the lowered useContext calls.
|
||||
*/
|
||||
hasLoweredContextAccess: boolean;
|
||||
|
||||
/**
|
||||
* This is true if the compiler has compiled a fire to a useFire call
|
||||
*/
|
||||
hasFireRewrite: boolean;
|
||||
};
|
||||
|
||||
export function codegenFunction(
|
||||
@@ -355,6 +360,7 @@ function codegenReactiveFunction(
|
||||
prunedMemoValues: countMemoBlockVisitor.prunedMemoValues,
|
||||
outlined: [],
|
||||
hasLoweredContextAccess: fn.env.hasLoweredContextAccess,
|
||||
hasFireRewrite: fn.env.hasFireRewrite,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ import {BuiltInFireId, DefaultNonmutatingHook} from '../HIR/ObjectShape';
|
||||
/*
|
||||
* TODO(jmbrown):
|
||||
* In this stack:
|
||||
* - Insert useFire import
|
||||
* - Assert no lingering fire calls
|
||||
* - Ensure a fired function is not called regularly elsewhere in the same effect
|
||||
*
|
||||
@@ -226,6 +225,7 @@ function replaceFireFunctions(fn: HIRFunction, context: Context): void {
|
||||
|
||||
if (rewriteInstrs.size > 0 || deleteInstrs.size > 0) {
|
||||
hasRewrite = true;
|
||||
fn.env.hasFireRewrite = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -21,6 +21,7 @@ function Component(props) {
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { useFire } from "react";
|
||||
import { c as _c } from "react/compiler-runtime"; // @enableFire
|
||||
import { fire } from "react";
|
||||
|
||||
|
||||
+1
@@ -30,6 +30,7 @@ function Component(props) {
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { useFire } from "react";
|
||||
import { c as _c } from "react/compiler-runtime"; // @enableFire
|
||||
import { fire } from "react";
|
||||
|
||||
|
||||
+1
@@ -29,6 +29,7 @@ function Component(props) {
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { useFire } from "react";
|
||||
import { c as _c } from "react/compiler-runtime"; // @enableFire
|
||||
import { fire } from "react";
|
||||
|
||||
|
||||
+1
@@ -22,6 +22,7 @@ function Component(props) {
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { useFire } from "react";
|
||||
import { c as _c } from "react/compiler-runtime"; // @enableFire
|
||||
import { fire } from "react";
|
||||
|
||||
|
||||
+1
@@ -26,6 +26,7 @@ function Component({bar, baz}) {
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { useFire } from "react";
|
||||
import { c as _c } from "react/compiler-runtime"; // @enableFire
|
||||
import { fire } from "react";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user