Home / Function/ isReorderableExpression() — react Function Reference

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'),

Subdomains

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