Home / Function/ collectTemporaries() — react Function Reference

collectTemporaries() — react Function Reference

Architecture documentation for the collectTemporaries() function in DropManualMemoization.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  533a7910_d29b_7d0b_f466_45a408400f6f["collectTemporaries()"]
  dbbffa67_2b06_b242_b8f0_f66f49b12888["DropManualMemoization.ts"]
  533a7910_d29b_7d0b_f466_45a408400f6f -->|defined in| dbbffa67_2b06_b242_b8f0_f66f49b12888
  f7d1065c_fe0b_6eca_1692_3de9f53ad7b0["dropManualMemoization()"]
  f7d1065c_fe0b_6eca_1692_3de9f53ad7b0 -->|calls| 533a7910_d29b_7d0b_f466_45a408400f6f
  613eb182_0851_51b8_80a5_ce81e47d6cb1["collectMaybeMemoDependencies()"]
  533a7910_d29b_7d0b_f466_45a408400f6f -->|calls| 613eb182_0851_51b8_80a5_ce81e47d6cb1
  style 533a7910_d29b_7d0b_f466_45a408400f6f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts lines 124–183

function collectTemporaries(
  instr: Instruction,
  env: Environment,
  sidemap: IdentifierSidemap,
): void {
  const {value, lvalue} = instr;
  switch (value.kind) {
    case 'FunctionExpression': {
      sidemap.functions.set(
        instr.lvalue.identifier.id,
        instr as TInstruction<FunctionExpression>,
      );
      break;
    }
    case 'LoadGlobal': {
      const global = env.getGlobalDeclaration(value.binding, value.loc);
      const hookKind = global !== null ? getHookKindForType(env, global) : null;
      const lvalId = instr.lvalue.identifier.id;
      if (hookKind === 'useMemo' || hookKind === 'useCallback') {
        sidemap.manualMemos.set(lvalId, {
          kind: hookKind,
          loadInstr: instr as TInstruction<LoadGlobal>,
        });
      } else if (value.binding.name === 'React') {
        sidemap.react.add(lvalId);
      }
      break;
    }
    case 'PropertyLoad': {
      if (sidemap.react.has(value.object.identifier.id)) {
        const property = value.property;
        if (property === 'useMemo' || property === 'useCallback') {
          sidemap.manualMemos.set(instr.lvalue.identifier.id, {
            kind: property as 'useMemo' | 'useCallback',
            loadInstr: instr as TInstruction<PropertyLoad>,
          });
        }
      }
      break;
    }
    case 'ArrayExpression': {
      if (value.elements.every(e => e.kind === 'Identifier')) {
        sidemap.maybeDepsLists.set(instr.lvalue.identifier.id, {
          loc: value.loc,
          deps: value.elements as Array<Place>,
        });
      }
      break;
    }
  }
  const maybeDep = collectMaybeMemoDependencies(
    value,
    sidemap.maybeDeps,
    sidemap.optionals.has(lvalue.identifier.id),
  );
  // We don't expect named lvalues during this pass (unlike ValidatePreservingManualMemo)
  if (maybeDep != null) {
    sidemap.maybeDeps.set(lvalue.identifier.id, maybeDep);
  }
}

Subdomains

Frequently Asked Questions

What does collectTemporaries() do?
collectTemporaries() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts.
Where is collectTemporaries() defined?
collectTemporaries() is defined in compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts at line 124.
What does collectTemporaries() call?
collectTemporaries() calls 1 function(s): collectMaybeMemoDependencies.
What calls collectTemporaries()?
collectTemporaries() is called by 1 function(s): dropManualMemoization.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free