Home / Function/ validateNoRefAccessInRenderImpl() — react Function Reference

validateNoRefAccessInRenderImpl() — react Function Reference

Architecture documentation for the validateNoRefAccessInRenderImpl() function in ValidateNoRefAccessInRender.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  b2292640_a950_f66a_1a21_4fa1d74f094d["validateNoRefAccessInRenderImpl()"]
  8dbbe52d_b145_88fe_e0da_33d06180b558["ValidateNoRefAccessInRender.ts"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|defined in| 8dbbe52d_b145_88fe_e0da_33d06180b558
  184be6af_c134_eb6f_2164_724500e9cb16["validateNoRefAccessInRender()"]
  184be6af_c134_eb6f_2164_724500e9cb16 -->|calls| b2292640_a950_f66a_1a21_4fa1d74f094d
  87072b27_352c_d825_08de_c21a4abc3c23["refTypeOfType()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| 87072b27_352c_d825_08de_c21a4abc3c23
  648272d7_e6a6_0efe_25c4_d76434ffaafb["set()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| 648272d7_e6a6_0efe_25c4_d76434ffaafb
  e7653811_3330_bff9_8326_86d4e0b3d509["hasChanged()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| e7653811_3330_bff9_8326_86d4e0b3d509
  703ada51_efe0_2d7f_4d0e_20ccb2368f5b["resetChanged()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| 703ada51_efe0_2d7f_4d0e_20ccb2368f5b
  c447b97e_0b8e_b187_e3a8_4be412d6f495["retainWhere()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| c447b97e_0b8e_b187_e3a8_4be412d6f495
  58faf1c6_d9e6_ba3c_c4bb_dc4fce641e52["joinRefAccessTypes()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| 58faf1c6_d9e6_ba3c_c4bb_dc4fce641e52
  03dffe4e_b34b_74b6_636a_f8dfe1a2b604["get()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| 03dffe4e_b34b_74b6_636a_f8dfe1a2b604
  b2fc2985_a7ba_9865_c2a3_2a7531f27d44["eachInstructionValueOperand()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| b2fc2985_a7ba_9865_c2a3_2a7531f27d44
  594c64f2_5aa9_c1d1_2207_97a096d7ba71["validateNoDirectRefValueAccess()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| 594c64f2_5aa9_c1d1_2207_97a096d7ba71
  f5637d03_fd91_50b8_9da7_b2a24c91bab7["eachPatternOperand()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| f5637d03_fd91_50b8_9da7_b2a24c91bab7
  02303def_636f_c5b3_a751_1cf138fcea69["pushDiagnostic()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| 02303def_636f_c5b3_a751_1cf138fcea69
  ac13f5c1_be17_dd7a_6bd3_66d91c46aadf["create()"]
  b2292640_a950_f66a_1a21_4fa1d74f094d -->|calls| ac13f5c1_be17_dd7a_6bd3_66d91c46aadf
  style b2292640_a950_f66a_1a21_4fa1d74f094d fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoRefAccessInRender.ts lines 312–758

function validateNoRefAccessInRenderImpl(
  fn: HIRFunction,
  env: Env,
): Result<RefAccessType, CompilerError> {
  let returnValues: Array<undefined | RefAccessType> = [];
  let place;
  for (const param of fn.params) {
    if (param.kind === 'Identifier') {
      place = param;
    } else {
      place = param.place;
    }
    const type = refTypeOfType(place);
    env.set(place.identifier.id, type);
  }

  const interpolatedAsJsx = new Set<IdentifierId>();
  for (const block of fn.body.blocks.values()) {
    for (const instr of block.instructions) {
      const {value} = instr;
      if (value.kind === 'JsxExpression' || value.kind === 'JsxFragment') {
        if (value.children != null) {
          for (const child of value.children) {
            interpolatedAsJsx.add(child.identifier.id);
          }
        }
      }
    }
  }

  for (let i = 0; (i == 0 || env.hasChanged()) && i < 10; i++) {
    env.resetChanged();
    returnValues = [];
    const safeBlocks: Array<{block: BlockId; ref: RefId}> = [];
    const errors = new CompilerError();
    for (const [, block] of fn.body.blocks) {
      retainWhere(safeBlocks, entry => entry.block !== block.id);
      for (const phi of block.phis) {
        env.set(
          phi.place.identifier.id,
          joinRefAccessTypes(
            ...Array(...phi.operands.values()).map(
              operand =>
                env.get(operand.identifier.id) ?? ({kind: 'None'} as const),
            ),
          ),
        );
      }

      for (const instr of block.instructions) {
        switch (instr.value.kind) {
          case 'JsxExpression':
          case 'JsxFragment': {
            for (const operand of eachInstructionValueOperand(instr.value)) {
              validateNoDirectRefValueAccess(errors, operand, env);
            }
            break;
          }
          case 'ComputedLoad':
          case 'PropertyLoad': {
            if (instr.value.kind === 'ComputedLoad') {
              validateNoDirectRefValueAccess(errors, instr.value.property, env);
            }
            const objType = env.get(instr.value.object.identifier.id);
            let lookupType: null | RefAccessType = null;
            if (objType?.kind === 'Structure') {
              lookupType = objType.value;
            } else if (objType?.kind === 'Ref') {
              lookupType = {
                kind: 'RefValue',
                loc: instr.loc,
                refId: objType.refId,
              };
            }
            env.set(
              instr.lvalue.identifier.id,
              lookupType ?? refTypeOfType(instr.lvalue),
            );
            break;
          }
          case 'TypeCastExpression': {

Domain

Subdomains

Frequently Asked Questions

What does validateNoRefAccessInRenderImpl() do?
validateNoRefAccessInRenderImpl() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoRefAccessInRender.ts.
Where is validateNoRefAccessInRenderImpl() defined?
validateNoRefAccessInRenderImpl() is defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoRefAccessInRender.ts at line 312.
What does validateNoRefAccessInRenderImpl() call?
validateNoRefAccessInRenderImpl() calls 30 function(s): Err, Ok, create, eachInstructionOperand, eachInstructionValueOperand, eachPatternOperand, eachTerminalOperand, get, and 22 more.
What calls validateNoRefAccessInRenderImpl()?
validateNoRefAccessInRenderImpl() is called by 1 function(s): validateNoRefAccessInRender.

Analyze Your Own Codebase

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

Try Supermodel Free