Home / Function/ mergeMacroArguments() — react Function Reference

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

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