luaur_analysis/methods/
scope_new.rs1use 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}