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
Defined In
Source
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