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}