Skip to main content

luaur_analysis/functions/
copy_errors.rs

1use crate::functions::copy_error::copy_error;
2use crate::records::builtin_types::BuiltinTypes;
3use crate::records::clone_state::CloneState;
4use crate::records::type_arena::TypeArena;
5use crate::type_aliases::error_vec::ErrorVec;
6use crate::type_aliases::type_error_data::TypeErrorData;
7use luaur_common::macros::luau_assert::LUAU_ASSERT;
8use luaur_common::records::dense_hash_map::DenseHashMap;
9
10pub fn copy_errors(
11    errors: &mut ErrorVec,
12    dest_arena: &mut TypeArena,
13    builtin_types: &BuiltinTypes,
14) {
15    let mut clone_state = CloneState {
16        builtin_types: builtin_types as *const BuiltinTypes as *mut BuiltinTypes,
17        seen_types: DenseHashMap::new(core::ptr::null()),
18        seen_type_packs: DenseHashMap::new(core::ptr::null()),
19    };
20
21    let types_arena = &dest_arena.types;
22    let type_packs_arena = &dest_arena.type_packs;
23    LUAU_ASSERT!(!types_arena.is_frozen());
24    LUAU_ASSERT!(!type_packs_arena.is_frozen());
25
26    for error in errors {
27        match &mut error.data {
28            TypeErrorData::TypeMismatch(e) => copy_error(e, dest_arena, &mut clone_state),
29            TypeErrorData::UnknownSymbol(e) => copy_error(e, dest_arena, &mut clone_state),
30            TypeErrorData::UnknownProperty(e) => copy_error(e, dest_arena, &mut clone_state),
31            TypeErrorData::NotATable(e) => copy_error(e, dest_arena, &mut clone_state),
32            TypeErrorData::CannotExtendTable(e) => copy_error(e, dest_arena, &mut clone_state),
33            TypeErrorData::CannotCompareUnrelatedTypes(e) => {
34                copy_error(e, dest_arena, &mut clone_state)
35            }
36            TypeErrorData::OnlyTablesCanHaveMethods(e) => {
37                copy_error(e, dest_arena, &mut clone_state)
38            }
39            TypeErrorData::DuplicateTypeDefinition(e) => {
40                copy_error(e, dest_arena, &mut clone_state)
41            }
42            TypeErrorData::CountMismatch(e) => copy_error(e, dest_arena, &mut clone_state),
43            TypeErrorData::FunctionDoesNotTakeSelf(e) => {
44                copy_error(e, dest_arena, &mut clone_state)
45            }
46            TypeErrorData::FunctionRequiresSelf(e) => copy_error(e, dest_arena, &mut clone_state),
47            TypeErrorData::OccursCheckFailed(e) => copy_error(e, dest_arena, &mut clone_state),
48            TypeErrorData::UnknownRequire(e) => copy_error(e, dest_arena, &mut clone_state),
49            TypeErrorData::IncorrectGenericParameterCount(e) => {
50                copy_error(e, dest_arena, &mut clone_state)
51            }
52            TypeErrorData::SyntaxError(e) => copy_error(e, dest_arena, &mut clone_state),
53            TypeErrorData::CodeTooComplex(e) => copy_error(e, dest_arena, &mut clone_state),
54            TypeErrorData::UnificationTooComplex(e) => copy_error(e, dest_arena, &mut clone_state),
55            TypeErrorData::UnknownPropButFoundLikeProp(e) => {
56                copy_error(e, dest_arena, &mut clone_state)
57            }
58            TypeErrorData::GenericError(e) => copy_error(e, dest_arena, &mut clone_state),
59            TypeErrorData::InternalError(e) => copy_error(e, dest_arena, &mut clone_state),
60            TypeErrorData::ConstraintSolvingIncompleteError(e) => {
61                copy_error(e, dest_arena, &mut clone_state)
62            }
63            TypeErrorData::CannotCallNonFunction(e) => copy_error(e, dest_arena, &mut clone_state),
64            TypeErrorData::ExtraInformation(e) => copy_error(e, dest_arena, &mut clone_state),
65            TypeErrorData::DeprecatedApiUsed(e) => copy_error(e, dest_arena, &mut clone_state),
66            TypeErrorData::ModuleHasCyclicDependency(e) => {
67                copy_error(e, dest_arena, &mut clone_state)
68            }
69            TypeErrorData::IllegalRequire(e) => copy_error(e, dest_arena, &mut clone_state),
70            TypeErrorData::FunctionExitsWithoutReturning(e) => {
71                copy_error(e, dest_arena, &mut clone_state)
72            }
73            TypeErrorData::DuplicateGenericParameter(e) => {
74                copy_error(e, dest_arena, &mut clone_state)
75            }
76            TypeErrorData::CannotAssignToNever(e) => copy_error(e, dest_arena, &mut clone_state),
77            TypeErrorData::CannotInferBinaryOperation(e) => {
78                copy_error(e, dest_arena, &mut clone_state)
79            }
80            TypeErrorData::MissingProperties(e) => copy_error(e, dest_arena, &mut clone_state),
81            TypeErrorData::SwappedGenericTypeParameter(e) => {
82                copy_error(e, dest_arena, &mut clone_state)
83            }
84            TypeErrorData::OptionalValueAccess(e) => copy_error(e, dest_arena, &mut clone_state),
85            TypeErrorData::MissingUnionProperty(e) => copy_error(e, dest_arena, &mut clone_state),
86            TypeErrorData::TypesAreUnrelated(e) => copy_error(e, dest_arena, &mut clone_state),
87            TypeErrorData::NormalizationTooComplex(e) => {
88                copy_error(e, dest_arena, &mut clone_state)
89            }
90            TypeErrorData::TypePackMismatch(e) => copy_error(e, dest_arena, &mut clone_state),
91            TypeErrorData::DynamicPropertyLookupOnExternTypesUnsafe(e) => {
92                copy_error(e, dest_arena, &mut clone_state)
93            }
94            TypeErrorData::UninhabitedTypeFunction(e) => {
95                copy_error(e, dest_arena, &mut clone_state)
96            }
97            TypeErrorData::UninhabitedTypePackFunction(e) => {
98                copy_error(e, dest_arena, &mut clone_state)
99            }
100            TypeErrorData::WhereClauseNeeded(e) => copy_error(e, dest_arena, &mut clone_state),
101            TypeErrorData::PackWhereClauseNeeded(e) => copy_error(e, dest_arena, &mut clone_state),
102            TypeErrorData::CheckedFunctionCallError(e) => {
103                copy_error(e, dest_arena, &mut clone_state)
104            }
105            TypeErrorData::NonStrictFunctionDefinitionError(e) => {
106                copy_error(e, dest_arena, &mut clone_state)
107            }
108            TypeErrorData::PropertyAccessViolation(e) => {
109                copy_error(e, dest_arena, &mut clone_state)
110            }
111            TypeErrorData::CheckedFunctionIncorrectArgs(e) => {
112                copy_error(e, dest_arena, &mut clone_state)
113            }
114            TypeErrorData::UnexpectedTypeInSubtyping(e) => {
115                copy_error(e, dest_arena, &mut clone_state)
116            }
117            TypeErrorData::UnexpectedTypePackInSubtyping(e) => {
118                copy_error(e, dest_arena, &mut clone_state)
119            }
120            TypeErrorData::ExplicitFunctionAnnotationRecommended(e) => {
121                copy_error(e, dest_arena, &mut clone_state)
122            }
123            TypeErrorData::UserDefinedTypeFunctionError(e) => {
124                copy_error(e, dest_arena, &mut clone_state)
125            }
126            TypeErrorData::BuiltInTypeFunctionError(e) => {
127                copy_error(e, dest_arena, &mut clone_state)
128            }
129            TypeErrorData::ReservedIdentifier(e) => copy_error(e, dest_arena, &mut clone_state),
130            TypeErrorData::UnexpectedArrayLikeTableItem(e) => {
131                copy_error(e, dest_arena, &mut clone_state)
132            }
133            TypeErrorData::CannotCheckDynamicStringFormatCalls(e) => {
134                copy_error(e, dest_arena, &mut clone_state)
135            }
136            TypeErrorData::GenericTypeCountMismatch(e) => {
137                copy_error(e, dest_arena, &mut clone_state)
138            }
139            TypeErrorData::GenericTypePackCountMismatch(e) => {
140                copy_error(e, dest_arena, &mut clone_state)
141            }
142            TypeErrorData::MultipleNonviableOverloads(e) => {
143                copy_error(e, dest_arena, &mut clone_state)
144            }
145            TypeErrorData::RecursiveRestraintViolation(e) => {
146                copy_error(e, dest_arena, &mut clone_state)
147            }
148            TypeErrorData::GenericBoundsMismatch(e) => copy_error(e, dest_arena, &mut clone_state),
149            TypeErrorData::UnappliedTypeFunction(e) => copy_error(e, dest_arena, &mut clone_state),
150            TypeErrorData::InstantiateGenericsOnNonFunction(e) => {
151                copy_error(e, dest_arena, &mut clone_state)
152            }
153            TypeErrorData::TypeInstantiationCountMismatch(e) => {
154                copy_error(e, dest_arena, &mut clone_state)
155            }
156            TypeErrorData::AmbiguousFunctionCall(e) => copy_error(e, dest_arena, &mut clone_state),
157        }
158    }
159}