Skip to main content

luaur_analysis/methods/
scope_new.rs

1//! C++ `Scope::Scope(const ScopePtr& parent, int subLevel = 0)`
2//! (`Analysis/src/Scope.cpp`): a child scope inherits its parent's return type
3//! and an incremented type level, and value-initializes every container. The
4//! `DenseHash*` empty-key sentinels match the in-class initializers in
5//! `Analysis/include/Luau/Scope.h` (`{nullptr}`, `{""}`, `{{}}`).
6use crate::records::def::Def;
7use crate::records::scope::Scope;
8use crate::type_aliases::scope_ptr_type::ScopePtr;
9use alloc::string::String;
10use alloc::vec::Vec;
11use luaur_ast::records::location::Location;
12use luaur_common::records::dense_hash_map::DenseHashMap;
13use luaur_common::records::dense_hash_set::DenseHashSet;
14use std::collections::HashMap;
15
16impl Scope {
17    pub fn new(parent: &ScopePtr, sub_level: i32) -> Self {
18        let mut level = parent.level.incr();
19        level.subLevel = sub_level;
20
21        Scope {
22            parent: Some(parent.clone()),
23            children: Vec::new(),
24            bindings: HashMap::new(),
25            return_type: parent.return_type,
26            vararg_pack: None,
27            level,
28            location: Location::default(),
29            exported_type_bindings: HashMap::new(),
30            private_type_bindings: HashMap::new(),
31            type_alias_locations: HashMap::new(),
32            type_alias_name_locations: HashMap::new(),
33            imported_modules: HashMap::new(),
34            imported_type_bindings: HashMap::new(),
35            builtin_type_names: DenseHashSet::default(),
36            private_type_pack_bindings: HashMap::new(),
37            refinements: HashMap::new(),
38            lvalue_types: DenseHashMap::new(core::ptr::null::<Def>()),
39            rvalue_refinements: DenseHashMap::new(core::ptr::null::<Def>()),
40            globals_to_warn: DenseHashSet::default(),
41            type_alias_type_parameters: HashMap::new(),
42            type_alias_type_pack_parameters: HashMap::new(),
43            interior_free_types: None,
44            interior_free_type_packs: None,
45            invalid_type_aliases: DenseHashMap::new(String::new()),
46        }
47    }
48}