Home / Function/ lowerOptionalMemberExpression() — react Function Reference

lowerOptionalMemberExpression() — react Function Reference

Architecture documentation for the lowerOptionalMemberExpression() function in BuildHIR.ts from the react codebase.

Function typescript MIRInfrastructure HIR calls 12 called by 2

Entity Profile

Dependency Diagram

graph TD
  bb81d73c_5996_9609_94fe_e0f8ad5e876d["lowerOptionalMemberExpression()"]
  e04c04d6_37a7_1dc3_7fae_7d07660d0af9["BuildHIR.ts"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|defined in| e04c04d6_37a7_1dc3_7fae_7d07660d0af9
  ace1177a_10b2_b870_31fd_da4aa845554c["lowerExpression()"]
  ace1177a_10b2_b870_31fd_da4aa845554c -->|calls| bb81d73c_5996_9609_94fe_e0f8ad5e876d
  e401a324_13b9_af8a_12c7_b731c9f220a3["lowerOptionalCallExpression()"]
  e401a324_13b9_af8a_12c7_b731c9f220a3 -->|calls| bb81d73c_5996_9609_94fe_e0f8ad5e876d
  147a0e7f_dab2_6a99_0c59_2eb8b07f70d5["buildTemporaryPlace()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| 147a0e7f_dab2_6a99_0c59_2eb8b07f70d5
  2a23449a_1dec_0ba3_8f5a_0e9e83d42add["reserve()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| 2a23449a_1dec_0ba3_8f5a_0e9e83d42add
  012a7acd_73d1_2699_77e8_481232bb47c8["currentBlockKind()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| 012a7acd_73d1_2699_77e8_481232bb47c8
  3db1e7ce_1c6f_24e2_3cbb_86c02c29d285["enter()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| 3db1e7ce_1c6f_24e2_3cbb_86c02c29d285
  f1f0c182_09ad_b29e_b1ca_56f10046adff["lowerValueToTemporary()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| f1f0c182_09ad_b29e_b1ca_56f10046adff
  d0270ab6_a621_bd55_a1b9_a5cad8b406b2["makeInstructionId()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| d0270ab6_a621_bd55_a1b9_a5cad8b406b2
  e401a324_13b9_af8a_12c7_b731c9f220a3["lowerOptionalCallExpression()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| e401a324_13b9_af8a_12c7_b731c9f220a3
  5bae3f87_1b76_e568_9b44_1d2fb59f73d8["lowerExpressionToTemporary()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| 5bae3f87_1b76_e568_9b44_1d2fb59f73d8
  041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e
  10c63c7e_e339_2c92_cb9e_11d13186c6a7["enterReserved()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| 10c63c7e_e339_2c92_cb9e_11d13186c6a7
  d3430316_6bb4_9d91_4539_1bff5c189f83["lowerMemberExpression()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| d3430316_6bb4_9d91_4539_1bff5c189f83
  43f67b81_ddfd_4289_903f_8e9e60469eb7["terminateWithContinuation()"]
  bb81d73c_5996_9609_94fe_e0f8ad5e876d -->|calls| 43f67b81_ddfd_4289_903f_8e9e60469eb7
  style bb81d73c_5996_9609_94fe_e0f8ad5e876d fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts lines 2677–2785

function lowerOptionalMemberExpression(
  builder: HIRBuilder,
  expr: NodePath<t.OptionalMemberExpression>,
  parentAlternate: BlockId | null,
): {object: Place; value: Place} {
  const optional = expr.node.optional;
  const loc = expr.node.loc ?? GeneratedSource;
  const place = buildTemporaryPlace(builder, loc);
  const continuationBlock = builder.reserve(builder.currentBlockKind());
  const consequent = builder.reserve('value');

  /*
   * block to evaluate if the callee is null/undefined, this sets the result of the call to undefined.
   * note that we only create an alternate when first entering an optional subtree of the ast: if this
   * is a child of an optional node, we use the alterate created by the parent.
   */
  const alternate =
    parentAlternate !== null
      ? parentAlternate
      : builder.enter('value', () => {
          const temp = lowerValueToTemporary(builder, {
            kind: 'Primitive',
            value: undefined,
            loc,
          });
          lowerValueToTemporary(builder, {
            kind: 'StoreLocal',
            lvalue: {kind: InstructionKind.Const, place: {...place}},
            value: {...temp},
            type: null,
            loc,
          });
          return {
            kind: 'goto',
            variant: GotoVariant.Break,
            block: continuationBlock.id,
            id: makeInstructionId(0),
            loc,
          };
        });

  let object: Place | null = null;
  const testBlock = builder.enter('value', () => {
    const objectPath = expr.get('object');
    if (objectPath.isOptionalMemberExpression()) {
      const {value} = lowerOptionalMemberExpression(
        builder,
        objectPath,
        alternate,
      );
      object = value;
    } else if (objectPath.isOptionalCallExpression()) {
      const value = lowerOptionalCallExpression(builder, objectPath, alternate);
      object = lowerValueToTemporary(builder, value);
    } else {
      object = lowerExpressionToTemporary(builder, objectPath);
    }
    return {
      kind: 'branch',
      test: {...object},
      consequent: consequent.id,
      alternate,
      fallthrough: continuationBlock.id,
      id: makeInstructionId(0),
      loc,
    };
  });
  CompilerError.invariant(object !== null, {
    reason: 'Satisfy type checker',
    loc: GeneratedSource,
  });

  /*
   * block to evaluate if the callee is non-null/undefined. arguments are lowered in this block to preserve
   * the semantic of conditional evaluation depending on the callee
   */
  builder.enterReserved(consequent, () => {
    const {value} = lowerMemberExpression(builder, expr, object);
    const temp = lowerValueToTemporary(builder, value);
    lowerValueToTemporary(builder, {
      kind: 'StoreLocal',

Subdomains

Frequently Asked Questions

What does lowerOptionalMemberExpression() do?
lowerOptionalMemberExpression() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts.
Where is lowerOptionalMemberExpression() defined?
lowerOptionalMemberExpression() is defined in compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts at line 2677.
What does lowerOptionalMemberExpression() call?
lowerOptionalMemberExpression() calls 12 function(s): buildTemporaryPlace, currentBlockKind, enter, enterReserved, invariant, lowerExpressionToTemporary, lowerMemberExpression, lowerOptionalCallExpression, and 4 more.
What calls lowerOptionalMemberExpression()?
lowerOptionalMemberExpression() is called by 2 function(s): lowerExpression, lowerOptionalCallExpression.

Analyze Your Own Codebase

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

Try Supermodel Free