nameAnonymousFunctionsImpl() — react Function Reference
Architecture documentation for the nameAnonymousFunctionsImpl() function in NameAnonymousFunctions.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD c18a8e9e_0d24_b666_ab97_a1b16b7337dd["nameAnonymousFunctionsImpl()"] 9deec7b5_c4fb_24c9_f7fb_2d8a554df1d5["NameAnonymousFunctions.ts"] c18a8e9e_0d24_b666_ab97_a1b16b7337dd -->|defined in| 9deec7b5_c4fb_24c9_f7fb_2d8a554df1d5 5674ef82_836d_cade_810a_eb2124782cde["nameAnonymousFunctions()"] 5674ef82_836d_cade_810a_eb2124782cde -->|calls| c18a8e9e_0d24_b666_ab97_a1b16b7337dd style c18a8e9e_0d24_b666_ab97_a1b16b7337dd fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/Transform/NameAnonymousFunctions.ts lines 52–179
function nameAnonymousFunctionsImpl(fn: HIRFunction): Array<Node> {
// Functions that we track to generate names for
const functions: Map<IdentifierId, Node> = new Map();
// Tracks temporaries that read from variables/globals/properties
const names: Map<IdentifierId, string> = new Map();
// Tracks all function nodes to bubble up for later renaming
const nodes: Array<Node> = [];
for (const block of fn.body.blocks.values()) {
for (const instr of block.instructions) {
const {lvalue, value} = instr;
switch (value.kind) {
case 'LoadGlobal': {
names.set(lvalue.identifier.id, value.binding.name);
break;
}
case 'LoadContext':
case 'LoadLocal': {
const name = value.place.identifier.name;
if (name != null && name.kind === 'named') {
names.set(lvalue.identifier.id, name.value);
}
const func = functions.get(value.place.identifier.id);
if (func != null) {
functions.set(lvalue.identifier.id, func);
}
break;
}
case 'PropertyLoad': {
const objectName = names.get(value.object.identifier.id);
if (objectName != null) {
names.set(
lvalue.identifier.id,
`${objectName}.${String(value.property)}`,
);
}
break;
}
case 'FunctionExpression': {
const inner = nameAnonymousFunctionsImpl(value.loweredFunc.func);
const node: Node = {
fn: value,
generatedName: null,
inner,
};
/**
* Bubble-up all functions, even if they're named, so that we can
* later generate names for any inner anonymous functions
*/
nodes.push(node);
if (value.name == null) {
// but only generate names for anonymous functions
functions.set(lvalue.identifier.id, node);
}
break;
}
case 'StoreContext':
case 'StoreLocal': {
const node = functions.get(value.value.identifier.id);
const variableName = value.lvalue.place.identifier.name;
if (
node != null &&
node.generatedName == null &&
variableName != null &&
variableName.kind === 'named'
) {
node.generatedName = variableName.value;
functions.delete(value.value.identifier.id);
}
break;
}
case 'CallExpression':
case 'MethodCall': {
const callee =
value.kind === 'MethodCall' ? value.property : value.callee;
const hookKind = getHookKind(fn.env, callee.identifier);
let calleeName: string | null = null;
if (hookKind != null && hookKind !== 'Custom') {
calleeName = hookKind;
} else {
calleeName = names.get(callee.identifier.id) ?? '(anonymous)';
}
Domain
Subdomains
Called By
Source
Frequently Asked Questions
What does nameAnonymousFunctionsImpl() do?
nameAnonymousFunctionsImpl() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Transform/NameAnonymousFunctions.ts.
Where is nameAnonymousFunctionsImpl() defined?
nameAnonymousFunctionsImpl() is defined in compiler/packages/babel-plugin-react-compiler/src/Transform/NameAnonymousFunctions.ts at line 52.
What calls nameAnonymousFunctionsImpl()?
nameAnonymousFunctionsImpl() is called by 1 function(s): nameAnonymousFunctions.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free