Home / Class/ InferenceState Class — react Architecture

InferenceState Class — react Architecture

Architecture documentation for the InferenceState class in InferMutationAliasingEffects.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44["InferenceState"]
  d24875c3_c045_4414_2cc9_16f96d59c629["InferMutationAliasingEffects.ts"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|defined in| d24875c3_c045_4414_2cc9_16f96d59c629
  12eea79a_6320_6cf8_e23a_3d4f912943ba["constructor()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 12eea79a_6320_6cf8_e23a_3d4f912943ba
  bc21e0dd_8d22_ea1e_540e_d310cb629833["empty()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| bc21e0dd_8d22_ea1e_540e_d310cb629833
  59c231cd_0cfa_67d0_67ab_a4a0bd8abfa0["isFunctionExpression()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 59c231cd_0cfa_67d0_67ab_a4a0bd8abfa0
  1338ac96_28d3_4184_21f5_e19b4079bba3["initialize()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 1338ac96_28d3_4184_21f5_e19b4079bba3
  bcbdcfbc_a2a4_dd2d_09f6_b6643e95eb6e["values()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| bcbdcfbc_a2a4_dd2d_09f6_b6643e95eb6e
  8f06f55e_0851_0d44_0a89_d6dee31fdbb5["kind()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 8f06f55e_0851_0d44_0a89_d6dee31fdbb5
  953c4d58_4239_ada6_0ba7_cf09db9625fe["assign()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 953c4d58_4239_ada6_0ba7_cf09db9625fe
  6184f2b6_7ea4_aff3_4588_a9af7d7fdf3c["appendAlias()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 6184f2b6_7ea4_aff3_4588_a9af7d7fdf3c
  1028b1e9_aaf3_f6b1_21dd_0c83f1c827e7["define()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 1028b1e9_aaf3_f6b1_21dd_0c83f1c827e7
  549ed1ce_1b4e_6a1c_07a1_035ff055847b["isDefined()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 549ed1ce_1b4e_6a1c_07a1_035ff055847b
  e0e4be16_6524_e844_c68d_262036cf06e3["freeze()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| e0e4be16_6524_e844_c68d_262036cf06e3
  1d094e55_9813_8516_4c4f_a471e85cee29["freezeValue()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 1d094e55_9813_8516_4c4f_a471e85cee29
  3338dc96_fe73_47e6_7c7f_3a784c17be89["mutate()"]
  7f9a06c8_8e18_76fc_0edd_1f0d608aae44 -->|method| 3338dc96_fe73_47e6_7c7f_3a784c17be89

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/Inference/InferMutationAliasingEffects.ts lines 1310–1668

class InferenceState {
  env: Environment;
  #isFunctionExpression: boolean;

  // The kind of each value, based on its allocation site
  #values: Map<InstructionValue, AbstractValue>;
  /*
   * The set of values pointed to by each identifier. This is a set
   * to accomodate phi points (where a variable may have different
   * values from different control flow paths).
   */
  #variables: Map<IdentifierId, Set<InstructionValue>>;

  constructor(
    env: Environment,
    isFunctionExpression: boolean,
    values: Map<InstructionValue, AbstractValue>,
    variables: Map<IdentifierId, Set<InstructionValue>>,
  ) {
    this.env = env;
    this.#isFunctionExpression = isFunctionExpression;
    this.#values = values;
    this.#variables = variables;
  }

  static empty(
    env: Environment,
    isFunctionExpression: boolean,
  ): InferenceState {
    return new InferenceState(env, isFunctionExpression, new Map(), new Map());
  }

  get isFunctionExpression(): boolean {
    return this.#isFunctionExpression;
  }

  // (Re)initializes a @param value with its default @param kind.
  initialize(value: InstructionValue, kind: AbstractValue): void {
    CompilerError.invariant(value.kind !== 'LoadLocal', {
      reason:
        '[InferMutationAliasingEffects] Expected all top-level identifiers to be defined as variables, not values',
      loc: value.loc,
    });
    this.#values.set(value, kind);
  }

  values(place: Place): Array<InstructionValue> {
    const values = this.#variables.get(place.identifier.id);
    CompilerError.invariant(values != null, {
      reason: `[InferMutationAliasingEffects] Expected value kind to be initialized`,
      description: `${printPlace(place)}`,
      message: 'this is uninitialized',
      loc: place.loc,
    });
    return Array.from(values);
  }

  // Lookup the kind of the given @param value.
  kind(place: Place): AbstractValue {
    const values = this.#variables.get(place.identifier.id);
    CompilerError.invariant(values != null, {
      reason: `[InferMutationAliasingEffects] Expected value kind to be initialized`,
      description: `${printPlace(place)}`,
      message: 'this is uninitialized',
      loc: place.loc,
    });
    let mergedKind: AbstractValue | null = null;
    for (const value of values) {
      const kind = this.#values.get(value)!;
      mergedKind =
        mergedKind !== null ? mergeAbstractValues(mergedKind, kind) : kind;
    }
    CompilerError.invariant(mergedKind !== null, {
      reason: `[InferMutationAliasingEffects] Expected at least one value`,
      description: `No value found at \`${printPlace(place)}\``,
      loc: place.loc,
    });
    return mergedKind;
  }

  // Updates the value at @param place to point to the same value as @param value.

Domain

Frequently Asked Questions

What is the InferenceState class?
InferenceState is a class in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Inference/InferMutationAliasingEffects.ts.
Where is InferenceState defined?
InferenceState is defined in compiler/packages/babel-plugin-react-compiler/src/Inference/InferMutationAliasingEffects.ts at line 1310.

Analyze Your Own Codebase

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

Try Supermodel Free