mergeMacroArguments() — react Function Reference
Architecture documentation for the mergeMacroArguments() function in MemoizeFbtAndMacroOperandsInSameScope.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD b0ed4f5a_2555_809c_2cff_f361912c64fa["mergeMacroArguments()"] fb4e4a7f_2a4f_a45a_81e6_48b5748e5365["MemoizeFbtAndMacroOperandsInSameScope.ts"] b0ed4f5a_2555_809c_2cff_f361912c64fa -->|defined in| fb4e4a7f_2a4f_a45a_81e6_48b5748e5365 9f7211c0_d97a_9601_5b29_f9ec90a9b7d9["memoizeFbtAndMacroOperandsInSameScope()"] 9f7211c0_d97a_9601_5b29_f9ec90a9b7d9 -->|calls| b0ed4f5a_2555_809c_2cff_f361912c64fa 9ec88100_5ac2_cfe7_e45a_4a85373411bd["visitOperands()"] b0ed4f5a_2555_809c_2cff_f361912c64fa -->|calls| 9ec88100_5ac2_cfe7_e45a_4a85373411bd ccad5c6d_a5e9_e31e_85ed_401010b8538e["expandFbtScopeRange()"] b0ed4f5a_2555_809c_2cff_f361912c64fa -->|calls| ccad5c6d_a5e9_e31e_85ed_401010b8538e style b0ed4f5a_2555_809c_2cff_f361912c64fa fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/MemoizeFbtAndMacroOperandsInSameScope.ts lines 162–274
function mergeMacroArguments(
fn: HIRFunction,
macroTags: Map<IdentifierId, MacroDefinition>,
macroKinds: Map<Macro, MacroDefinition>,
): Set<IdentifierId> {
const macroValues = new Set<IdentifierId>(macroTags.keys());
for (const block of Array.from(fn.body.blocks.values()).reverse()) {
for (let i = block.instructions.length - 1; i >= 0; i--) {
const instr = block.instructions[i]!;
const {lvalue, value} = instr;
switch (value.kind) {
case 'DeclareContext':
case 'DeclareLocal':
case 'Destructure':
case 'LoadContext':
case 'LoadLocal':
case 'PostfixUpdate':
case 'PrefixUpdate':
case 'StoreContext':
case 'StoreLocal': {
// Instructions that never need to be merged
break;
}
case 'CallExpression':
case 'MethodCall': {
const scope = lvalue.identifier.scope;
if (scope == null) {
continue;
}
const callee =
value.kind === 'CallExpression' ? value.callee : value.property;
const macroDefinition =
macroTags.get(callee.identifier.id) ??
macroTags.get(lvalue.identifier.id);
if (macroDefinition != null) {
visitOperands(
macroDefinition,
scope,
lvalue,
value,
macroValues,
macroTags,
);
}
break;
}
case 'JsxExpression': {
const scope = lvalue.identifier.scope;
if (scope == null) {
continue;
}
let macroDefinition;
if (value.tag.kind === 'Identifier') {
macroDefinition = macroTags.get(value.tag.identifier.id);
} else {
macroDefinition = macroKinds.get(value.tag.name);
}
macroDefinition ??= macroTags.get(lvalue.identifier.id);
if (macroDefinition != null) {
visitOperands(
macroDefinition,
scope,
lvalue,
value,
macroValues,
macroTags,
);
}
break;
}
default: {
const scope = lvalue.identifier.scope;
if (scope == null) {
continue;
}
const macroDefinition = macroTags.get(lvalue.identifier.id);
if (macroDefinition != null) {
visitOperands(
macroDefinition,
scope,
lvalue,
Domain
Subdomains
Called By
Source
Frequently Asked Questions
What does mergeMacroArguments() do?
mergeMacroArguments() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/MemoizeFbtAndMacroOperandsInSameScope.ts.
Where is mergeMacroArguments() defined?
mergeMacroArguments() is defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/MemoizeFbtAndMacroOperandsInSameScope.ts at line 162.
What does mergeMacroArguments() call?
mergeMacroArguments() calls 2 function(s): expandFbtScopeRange, visitOperands.
What calls mergeMacroArguments()?
mergeMacroArguments() is called by 1 function(s): memoizeFbtAndMacroOperandsInSameScope.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free