Home / Class/ Env Class — react Architecture

Env Class — react Architecture

Architecture documentation for the Env class in ValidateNoRefAccessInRender.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  03c81825_9ee1_25a9_77c1_47db9451d57a["Env"]
  8dbbe52d_b145_88fe_e0da_33d06180b558["ValidateNoRefAccessInRender.ts"]
  03c81825_9ee1_25a9_77c1_47db9451d57a -->|defined in| 8dbbe52d_b145_88fe_e0da_33d06180b558
  cc91bbf1_faca_3914_594f_24cffad498d7["lookup()"]
  03c81825_9ee1_25a9_77c1_47db9451d57a -->|method| cc91bbf1_faca_3914_594f_24cffad498d7
  a528e49e_203d_1992_f547_8d36686e5118["define()"]
  03c81825_9ee1_25a9_77c1_47db9451d57a -->|method| a528e49e_203d_1992_f547_8d36686e5118
  703ada51_efe0_2d7f_4d0e_20ccb2368f5b["resetChanged()"]
  03c81825_9ee1_25a9_77c1_47db9451d57a -->|method| 703ada51_efe0_2d7f_4d0e_20ccb2368f5b
  e7653811_3330_bff9_8326_86d4e0b3d509["hasChanged()"]
  03c81825_9ee1_25a9_77c1_47db9451d57a -->|method| e7653811_3330_bff9_8326_86d4e0b3d509
  03dffe4e_b34b_74b6_636a_f8dfe1a2b604["get()"]
  03c81825_9ee1_25a9_77c1_47db9451d57a -->|method| 03dffe4e_b34b_74b6_636a_f8dfe1a2b604
  648272d7_e6a6_0efe_25c4_d76434ffaafb["set()"]
  03c81825_9ee1_25a9_77c1_47db9451d57a -->|method| 648272d7_e6a6_0efe_25c4_d76434ffaafb

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoRefAccessInRender.ts lines 84–123

class Env {
  #changed = false;
  #data: Map<IdentifierId, RefAccessType> = new Map();
  #temporaries: Map<IdentifierId, Place> = new Map();

  lookup(place: Place): Place {
    return this.#temporaries.get(place.identifier.id) ?? place;
  }

  define(place: Place, value: Place): void {
    this.#temporaries.set(place.identifier.id, value);
  }

  resetChanged(): void {
    this.#changed = false;
  }

  hasChanged(): boolean {
    return this.#changed;
  }

  get(key: IdentifierId): RefAccessType | undefined {
    const operandId = this.#temporaries.get(key)?.identifier.id ?? key;
    return this.#data.get(operandId);
  }

  set(key: IdentifierId, value: RefAccessType): this {
    const operandId = this.#temporaries.get(key)?.identifier.id ?? key;
    const cur = this.#data.get(operandId);
    const widenedValue = joinRefAccessTypes(value, cur ?? {kind: 'None'});
    if (
      !(cur == null && widenedValue.kind === 'None') &&
      (cur == null || !tyEqual(cur, widenedValue))
    ) {
      this.#changed = true;
    }
    this.#data.set(operandId, widenedValue);
    return this;
  }
}

Domain

Frequently Asked Questions

What is the Env class?
Env is a class in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoRefAccessInRender.ts.
Where is Env defined?
Env is defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoRefAccessInRender.ts at line 84.

Analyze Your Own Codebase

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

Try Supermodel Free