isReorderableExpression() — react Function Reference
Architecture documentation for the isReorderableExpression() function in BuildHIR.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 3887db6f_f2e4_b0fc_02d3_7b45061f6669["isReorderableExpression()"] e04c04d6_37a7_1dc3_7fae_7d07660d0af9["BuildHIR.ts"] 3887db6f_f2e4_b0fc_02d3_7b45061f6669 -->|defined in| e04c04d6_37a7_1dc3_7fae_7d07660d0af9 c81fab67_1775_af2a_75cf_07d609a0d0be["lowerReorderableExpression()"] c81fab67_1775_af2a_75cf_07d609a0d0be -->|calls| 3887db6f_f2e4_b0fc_02d3_7b45061f6669 c753d1dc_3d72_6c26_43d1_a3614937be80["resolveIdentifier()"] 3887db6f_f2e4_b0fc_02d3_7b45061f6669 -->|calls| c753d1dc_3d72_6c26_43d1_a3614937be80 041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"] 3887db6f_f2e4_b0fc_02d3_7b45061f6669 -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e style 3887db6f_f2e4_b0fc_02d3_7b45061f6669 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts lines 2971–3140
function isReorderableExpression(
builder: HIRBuilder,
expr: NodePath<t.Expression>,
allowLocalIdentifiers: boolean,
): boolean {
switch (expr.node.type) {
case 'Identifier': {
const binding = builder.resolveIdentifier(expr as NodePath<t.Identifier>);
if (binding.kind === 'Identifier') {
return allowLocalIdentifiers;
} else {
// global, definitely safe
return true;
}
}
case 'TSInstantiationExpression': {
const innerExpr = (expr as NodePath<t.TSInstantiationExpression>).get(
'expression',
) as NodePath<t.Expression>;
return isReorderableExpression(builder, innerExpr, allowLocalIdentifiers);
}
case 'RegExpLiteral':
case 'StringLiteral':
case 'NumericLiteral':
case 'NullLiteral':
case 'BooleanLiteral':
case 'BigIntLiteral': {
return true;
}
case 'UnaryExpression': {
const unary = expr as NodePath<t.UnaryExpression>;
switch (expr.node.operator) {
case '!':
case '+':
case '-': {
return isReorderableExpression(
builder,
unary.get('argument'),
allowLocalIdentifiers,
);
}
default: {
return false;
}
}
}
case 'TSAsExpression':
case 'TSNonNullExpression':
case 'TypeCastExpression': {
return isReorderableExpression(
builder,
(expr as NodePath<t.TypeCastExpression>).get('expression'),
allowLocalIdentifiers,
);
}
case 'LogicalExpression': {
const logical = expr as NodePath<t.LogicalExpression>;
return (
isReorderableExpression(
builder,
logical.get('left'),
allowLocalIdentifiers,
) &&
isReorderableExpression(
builder,
logical.get('right'),
allowLocalIdentifiers,
)
);
}
case 'ConditionalExpression': {
const conditional = expr as NodePath<t.ConditionalExpression>;
return (
isReorderableExpression(
builder,
conditional.get('test'),
allowLocalIdentifiers,
) &&
isReorderableExpression(
builder,
conditional.get('consequent'),
Domain
Subdomains
Called By
Source
Frequently Asked Questions
What does isReorderableExpression() do?
isReorderableExpression() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts.
Where is isReorderableExpression() defined?
isReorderableExpression() is defined in compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts at line 2971.
What does isReorderableExpression() call?
isReorderableExpression() calls 2 function(s): invariant, resolveIdentifier.
What calls isReorderableExpression()?
isReorderableExpression() is called by 1 function(s): lowerReorderableExpression.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free