luaur_analysis/functions/
clone_incremental_clone.rs1use crate::functions::clone_clone_alt_b::with_clone_maps;
5use crate::records::clone_state::CloneState;
6use crate::records::fragment_autocomplete_type_cloner::FragmentAutocompleteTypeCloner;
7use crate::records::scope::Scope;
8use crate::records::type_arena::TypeArena;
9use crate::type_aliases::type_id::TypeId;
10use crate::type_aliases::type_pack_id::TypePackId;
11use std::collections::HashMap;
12
13pub fn clone_incremental(
14 tp: TypePackId,
15 dest: &mut TypeArena,
16 clone_state: &mut CloneState,
17 fresh_scope_for_free_types: *mut Scope,
18) -> TypePackId {
19 if unsafe { (*tp).persistent } {
20 return tp;
21 }
22
23 let builtin_types = clone_state.builtin_types;
24 with_clone_maps(
25 &mut clone_state.seen_types,
26 &mut clone_state.seen_type_packs,
27 |tys, tps| {
28 let mut cloner = FragmentAutocompleteTypeCloner::fragment_autocomplete_type_cloner(
29 dest as *mut TypeArena,
30 builtin_types,
31 tys as *mut HashMap<TypeId, TypeId>,
32 tps as *mut HashMap<TypePackId, TypePackId>,
33 core::ptr::null(),
34 core::ptr::null(),
35 fresh_scope_for_free_types,
36 );
37 cloner.base.clone_type_pack_id(tp)
38 },
39 )
40}