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
Defined In
Calls
- Err()
- Ok()
- create()
- eachInstructionOperand()
- eachInstructionValueOperand()
- eachPatternOperand()
- eachTerminalOperand()
- get()
- guardCheck()
- hasAnyErrors()
- hasChanged()
- invariant()
- isErr()
- isEventHandlerType()
- isOk()
- joinRefAccessTypes()
- map()
- nextRefId()
- push()
- pushDiagnostic()
- refTypeOfType()
- resetChanged()
- retainWhere()
- set()
- unwrap()
- validateNoDirectRefValueAccess()
- validateNoRefPassedToFunction()
- validateNoRefUpdate()
- validateNoRefValueAccess()
- withDetails()
Called By
Source
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