#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ParameterBodyStorage {
Argument(u16),
#[allow(dead_code, reason = "No producer emits this form.")]
Local(u16),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct ParameterArgumentCell {
pub argument: u16,
pub parameter_local: u16,
pub body: ParameterBodyStorage,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct ParameterPatternCopy {
pub parameter_local: u16,
pub body_local: u16,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ParameterDefaultSource {
Argument(u16),
RestPattern(u16),
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct ParameterEnvironmentLayout {
pub initialization_end: u32,
pub argument_cells: Box<[ParameterArgumentCell]>,
pub pattern_copies: Box<[ParameterPatternCopy]>,
pub default_sources: Box<[ParameterDefaultSource]>,
pub synthetic_arguments_local: Option<u16>,
pub arg_eval_variable_object_local: Option<u16>,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct FunctionMetadata {
pub argument_count: u16,
pub defined_argument_count: u16,
pub rest_parameter: Option<u16>,
pub rest_pattern_start: Option<u16>,
pub parameter_environment_local_count: u16,
pub pattern_argument_count: u16,
pub parameter_pattern_end: Option<u32>,
pub local_count: u16,
pub function_name_local: Option<u16>,
pub derived_this_local: Option<u16>,
pub active_function_local: Option<u16>,
pub eval_variable_object_local: Option<u16>,
pub closure_count: u16,
pub max_stack: u16,
pub strict: bool,
pub strip_variable_debug: bool,
pub is_module: bool,
pub super_call_allowed: bool,
pub super_allowed: bool,
pub arguments_forbidden: bool,
pub needs_home_object: bool,
pub eval_kind: EvalKind,
pub function_kind: FunctionKind,
pub has_prototype: bool,
pub constructor_kind: ConstructorKind,
pub class_initializer_kind: Option<ClassInitializerKind>,
pub class_private_brand: bool,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub enum EvalKind {
#[default]
None,
Direct,
Indirect,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub enum FunctionKind {
#[default]
Normal,
Generator,
Async,
AsyncGenerator,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub enum ConstructorKind {
#[default]
None,
Base,
Derived,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ClassInitializerKind {
InstanceFields,
StaticElements,
StaticBlock,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ClosureSource {
ParentLocal(u16),
ParentArgument(u16),
ParentClosure(u16),
GlobalDeclaration,
Global,
ParentGlobal(u16),
EvalEnvironment(u16),
ModuleDeclaration,
ModuleImport,
ModuleImportCollision,
ModuleImportMeta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ClosureVariableName {
None,
Constant(u32),
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub enum ClosureVariableKind {
#[default]
Normal,
ModuleImportView,
FunctionName,
GlobalFunction,
EvalVariableObject,
ArgEvalVariableObject,
WithObject,
PrivateField,
PrivateMethod,
PrivateGetter,
PrivateSetter,
PrivateGetterSetter,
}
impl ClosureVariableKind {}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct ClosureVariable {
pub source: ClosureSource,
pub name: ClosureVariableName,
pub is_lexical: bool,
pub is_const: bool,
pub kind: ClosureVariableKind,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum EvalBindingSource {
Local(u16),
Argument(u16),
Closure(u16),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum EvalScopeKind {
FunctionRoot,
Parameter,
FunctionBody,
ProgramBody,
Block,
If,
For,
Switch,
Catch,
With,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum EvalVariableEnvironment {
Global,
StrictLocal(u16),
VariableObject {
scope: u16,
source: EvalBindingSource,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum EvalCallerVariableTarget {
Global,
ExternalBinding(u16),
StrictLocal,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EvalCallerProfile {
pub scope_kinds: Box<[EvalScopeKind]>,
pub variable_target: EvalCallerVariableTarget,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EvalBinding<Name> {
pub name: Name,
pub source: EvalBindingSource,
pub is_lexical: bool,
pub is_const: bool,
pub kind: ClosureVariableKind,
pub is_catch_parameter: bool,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EvalScope<Name> {
pub kind: EvalScopeKind,
pub bindings: Box<[EvalBinding<Name>]>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EvalEnvironment<Name> {
pub scopes: Box<[EvalScope<Name>]>,
pub variable_environment: EvalVariableEnvironment,
pub caller_strict: bool,
pub super_call_allowed: bool,
pub super_allowed: bool,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EvalRootBinding<Name> {
pub name: Name,
pub scope: u16,
pub is_lexical: bool,
pub is_const: bool,
pub kind: ClosureVariableKind,
pub is_catch_parameter: bool,
}