Skip to main content

luaur_common/
lib.rs

1extern crate alloc;
2
3#[cfg(test)]
4mod dense_hash_tests;
5pub mod enums;
6pub mod functions;
7#[cfg(test)]
8mod insertion_ordered_map_tests;
9pub mod macros;
10pub mod methods;
11pub mod records;
12#[cfg(test)]
13mod string_utils_tests;
14pub mod type_aliases;
15#[cfg(test)]
16mod vec_deque_tests;
17
18/// Minimal libc surface for `wasm32-unknown-unknown` (allocator + a few string
19/// helpers). Compiled only for wasm; the native build binds the platform libc.
20#[cfg(target_arch = "wasm32")]
21pub mod wasm_libc;
22
23// C++ exposes this at namespace scope; codegen_assert! and friends reference
24// `luaur_common::assert_call_handler` directly.
25pub use functions::assert_call_handler::assert_call_handler;
26pub use records::f_value::set_luau_bool_flags;
27
28/// C++ CLI `setLuauFlagsDefault(value)` analog: set every non-Debug FFlag.
29/// (Rust statics cannot self-register, so the list is generated explicitly.)
30#[allow(non_snake_case)]
31pub fn set_all_flags(value: bool) {
32    FFlag::DesugaredArrayTypeReferenceIsEmpty.set(value);
33    FFlag::FixMathNoisePrecision.set(value);
34    FFlag::LuauAddRecursionCounterToNonStrictTypeChecker.set(value);
35    FFlag::LuauAllowGlobalDeclarationToBeCalledClass.set(value);
36    FFlag::LuauAlsoInstantiateInferredArguments.set(value);
37    FFlag::LuauAutocompleteConst.set(value);
38    FFlag::LuauAutocompleteExport.set(value);
39    FFlag::LuauAutocompleteStringSingletonIntersection.set(value);
40    FFlag::LuauBidirectionalInferenceBetterUnionHandling.set(value);
41    FFlag::LuauCallFeedback.set(value);
42    FFlag::LuauCheckFunctionStatementTypes.set(value);
43    FFlag::LuauClosureUsageCounter.set(value);
44    FFlag::LuauCodeGenCallWrapperEmitInst.set(value);
45    FFlag::LuauCodegenBufferInteger.set(value);
46    FFlag::LuauCodegenDsePtrStoreTagCheck.set(value);
47    FFlag::LuauCodegenDseRestoreHints.set(value);
48    FFlag::LuauCodegenExtraTableOpts.set(value);
49    FFlag::LuauCodegenFixBufferLenCheck.set(value);
50    FFlag::LuauCodegenForwardRematerialize.set(value);
51    FFlag::LuauCodegenFreeBlocks.set(value);
52    FFlag::LuauCodegenInteger2.set(value);
53    FFlag::LuauCodegenIntegerArg3Fix.set(value);
54    FFlag::LuauCodegenIntegerFastcall2k.set(value);
55    FFlag::LuauCodegenLinearSetupEntryState3.set(value);
56    FFlag::LuauCodegenLoadPropagateOrigin.set(value);
57    FFlag::LuauCodegenNopPadding.set(value);
58    FFlag::LuauCodegenProtectData.set(value);
59    FFlag::LuauCodegenRecordAllBlockExitInfo.set(value);
60    FFlag::LuauCodegenRegTag2.set(value);
61    FFlag::LuauCodegenSuggestArgumentRegisterX64.set(value);
62    FFlag::LuauCodegenVmExitSync.set(value);
63    FFlag::LuauCodegenVmExitSyncFix.set(value);
64    FFlag::LuauCompileDuptableConstantPack2.set(value);
65    FFlag::LuauCompileFastcall3CostModel.set(value);
66    FFlag::LuauCompileFoldOptimize.set(value);
67    FFlag::LuauCompileInlineTableFunctions.set(value);
68    FFlag::LuauCompileNewTableMutationTracker.set(value);
69    FFlag::LuauCompileNoOptNext.set(value);
70    FFlag::LuauCompilePropagateTableProps2.set(value);
71    FFlag::LuauCompileStringInterpTargetTop.set(value);
72    FFlag::LuauCompileTypeAliases.set(value);
73    FFlag::LuauCompileUdataDirect.set(value);
74    FFlag::LuauConcatDoesntAlwaysReturnString.set(value);
75    FFlag::LuauConst2.set(value);
76    FFlag::LuauConstJustReportErrorForUnderfill.set(value);
77    FFlag::LuauConstraintGraph.set(value);
78    FFlag::LuauCstExprGroup.set(value);
79    FFlag::LuauCstTypeGroup.set(value);
80    FFlag::LuauDirectFieldGet.set(value);
81    FFlag::LuauDisallowRedefiningBuiltinTypes.set(value);
82    FFlag::LuauEmitCallFeedback.set(value);
83    FFlag::LuauErrorTolerantPrettyPrinting.set(value);
84    FFlag::LuauExplicitTypeInstantiationSupport.set(value);
85    FFlag::LuauExportValueSyntax.set(value);
86    FFlag::LuauExportValueTypecheck.set(value);
87    FFlag::LuauExternTypesNormalizeWithShapes.set(value);
88    FFlag::LuauFixIndexerSubtypingOrdering.set(value);
89    FFlag::LuauFixPropReadsOnMetatableTypes.set(value);
90    FFlag::LuauInstantiateFunctionTypeBeforePush.set(value);
91    FFlag::LuauInstantiateInSubtyping.set(value);
92    FFlag::LuauInstantiationUsesPolarity.set(value);
93    FFlag::LuauIntegerBufferFastcalls.set(value);
94    FFlag::LuauIntegerFastcalls.set(value);
95    FFlag::LuauIntegerLibrary.set(value);
96    FFlag::LuauIntegerType2.set(value);
97    FFlag::LuauIterativeInstantiationQueuer.set(value);
98    FFlag::LuauKnowsTheDataModel3.set(value);
99    FFlag::LuauLValueCompoundAssignmentVisitLhs.set(value);
100    FFlag::LuauLimitUnificationRecursion.set(value);
101    FFlag::LuauNativeCodeTargetCheck.set(value);
102    FFlag::LuauNonStrictModeUseErrorSupressingTag.set(value);
103    FFlag::LuauOccursCheckForAllBindings.set(value);
104    FFlag::LuauPropagateFreeTypesIntoUnionAndIntersectionBounds.set(value);
105    FFlag::LuauPropagateTypeAnnotationsInForInLoops.set(value);
106    FFlag::LuauPropertyModifierMismatchErrors.set(value);
107    FFlag::LuauReadOnlyIndexers.set(value);
108    FFlag::LuauRefineNilFromTableIndexerResultType.set(value);
109    FFlag::LuauRemoveConstraintSolverEmplace.set(value);
110    FFlag::LuauReplacerIsSolverAgnostic.set(value);
111    FFlag::LuauRequireResolveAliasNullCheck.set(value);
112    FFlag::LuauResumeRestoreCcalls.set(value);
113    FFlag::LuauSilenceDynamicFormatStringErrors.set(value);
114    FFlag::LuauSolverV2.set(value);
115    FFlag::LuauSubtypingMissingPropertiesAsNil.set(value);
116    FFlag::LuauSubtypingTablesHasBetterErrorSuppression.set(value);
117    FFlag::LuauTableEntriesDontNeedToMatchIndent.set(value);
118    FFlag::LuauTableFreezeCheckIsSubtype.set(value);
119    FFlag::LuauTidyTypePrototyping.set(value);
120    FFlag::LuauTransitiveSubtyping.set(value);
121    FFlag::LuauTweakAccessViolationReporting.set(value);
122    FFlag::LuauTypeFunctionRobustness.set(value);
123    FFlag::LuauTypeFunctionSerializeArgNames.set(value);
124    FFlag::LuauTypeFunctionStructuredErrors.set(value);
125    FFlag::LuauTypeFunctionSupportsFrozen.set(value);
126    FFlag::LuauUdataDirectAccess6.set(value);
127    FFlag::LuauUdtfTypeIsSubtypeOf.set(value);
128    FFlag::LuauUseNativeStackGuard.set(value);
129    FFlag::LuauVisitCallTypeArgsInDfg.set(value);
130    FFlag::LuauYieldIter2.set(value);
131}
132
133/// FastFlag namespace `FFlag::` — static (non-dynamic) bool flags. Definitions
134/// from `LUAU_FASTFLAGVARIABLE(...)` across this crate's sources are collected
135/// here so C++ reads `FFlag::Name` map to `crate::FFlag::Name.get()`. (Rust
136/// modules are not open like C++ namespaces, so the per-crate namespace module
137/// is the aggregation point — see `crate::macros::luau_fastflagvariable`.)
138#[allow(non_snake_case)]
139pub mod FFlag {
140    // CodeGen/src/IrRegAllocA64.cpp
141    crate::LUAU_FASTFLAGVARIABLE!(DebugCodegenChaosA64);
142    // CodeGen/src/CodeGen.cpp
143    crate::LUAU_FASTFLAGVARIABLE!(DebugCodegenOptSize);
144    // CodeGen/src/CodeGen.cpp
145    crate::LUAU_FASTFLAGVARIABLE!(DebugCodegenSkipNumbering);
146    // Analysis/src/FragmentAutocomplete.cpp
147    crate::LUAU_FASTFLAGVARIABLE!(DebugLogFragmentsFromAutocomplete);
148    // CodeGen/src/OptimizeConstProp.cpp
149    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauAbortingChecks);
150    // Analysis/src/Frontend.cpp
151    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauAlwaysShowConstraintSolvingIncomplete);
152    // Analysis/src/ConstraintSolver.cpp
153    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauAssertOnForcedConstraint);
154    // Analysis/src/Normalize.cpp
155    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauCheckNormalizeInvariant);
156    // Analysis/src/DumpCFG.cpp
157    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauDumpCFGJson);
158    // Analysis/src/Frontend.cpp
159    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauForbidInternalTypes);
160    // tests/Fixture.cpp
161    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauForceAllNewSolverTests);
162    // tests/Fixture.cpp
163    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauForceAllOldSolverTests);
164    // Analysis/src/Frontend.cpp
165    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauForceNonStrictMode);
166    // Analysis/src/Frontend.cpp
167    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauForceOldSolver);
168    // Analysis/src/Frontend.cpp
169    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauForceStrictMode);
170    // Analysis/src/TypeArena.cpp
171    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauFreezeArena);
172    // Analysis/src/TypeInfer.cpp
173    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauFreezeDuringUnification);
174    // Analysis/src/ConstraintSolver.cpp
175    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauLogBindings);
176    // Analysis/src/DumpCFG.cpp
177    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauLogCFG);
178    // Analysis/src/ConstraintSolver.cpp
179    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauLogSolver);
180    // Analysis/src/Frontend.cpp
181    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauLogSolverToJson);
182    // Analysis/src/Frontend.cpp
183    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauLogSolverToJsonFile);
184    // Analysis/src/TypeFunction.cpp
185    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauLogTypeFamilies);
186    // Analysis/src/TypeInfer.cpp
187    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauMagicTypes);
188    // Analysis/src/AutocompleteCore.cpp
189    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauMagicVariableNames);
190    // Ast/src/Parser.cpp
191    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauNoInline);
192    // Analysis/src/Subtyping.cpp
193    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauSubtypingCheckPathValidity);
194    // Common/src/TimeTrace.cpp
195    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauTimeTracing);
196    // Analysis/src/ToString.cpp
197    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauToStringNoLexicalSort);
198    // Ast/src/Parser.cpp
199    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauUserDefinedClasses);
200    // VM/src/lvmexecute.cpp
201    crate::LUAU_FASTFLAGVARIABLE!(DebugLuauUserDefinedClassesRuntime);
202    // Ast/src/Parser.cpp
203    crate::LUAU_FASTFLAGVARIABLE!(DesugaredArrayTypeReferenceIsEmpty);
204    // VM/src/lmathlib.cpp
205    crate::LUAU_FASTFLAGVARIABLE!(FixMathNoisePrecision);
206    // Analysis/src/NonStrictTypeChecker.cpp
207    crate::LUAU_FASTFLAGVARIABLE!(LuauAddRecursionCounterToNonStrictTypeChecker);
208    // Ast/src/Parser.cpp
209    crate::LUAU_FASTFLAGVARIABLE!(LuauAllowGlobalDeclarationToBeCalledClass);
210    // Analysis/src/ConstraintSolver.cpp
211    crate::LUAU_FASTFLAGVARIABLE!(LuauAlsoInstantiateInferredArguments);
212    // Analysis/src/AutocompleteCore.cpp
213    crate::LUAU_FASTFLAGVARIABLE!(LuauAutocompleteConst);
214    // Analysis/src/AutocompleteCore.cpp
215    crate::LUAU_FASTFLAGVARIABLE!(LuauAutocompleteExport);
216    // Analysis/src/AutocompleteCore.cpp
217    crate::LUAU_FASTFLAGVARIABLE!(LuauAutocompleteStringSingletonIntersection);
218    // Analysis/src/ExpectedTypeVisitor.cpp
219    crate::LUAU_FASTFLAGVARIABLE!(LuauBidirectionalInferenceBetterUnionHandling);
220    // VM/src/lvmexecute.cpp
221    crate::LUAU_FASTFLAGVARIABLE!(LuauCallFeedback);
222    // Analysis/src/TypeChecker2.cpp
223    crate::LUAU_FASTFLAGVARIABLE!(LuauCheckFunctionStatementTypes);
224    // VM/src/lvmexecute.cpp
225    crate::LUAU_FASTFLAGVARIABLE!(LuauClosureUsageCounter);
226    // CodeGen/src/EmitInstructionX64.cpp
227    crate::LUAU_FASTFLAGVARIABLE!(LuauCodeGenCallWrapperEmitInst);
228    // CodeGen/src/IrTranslateBuiltins.cpp
229    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenBufferInteger);
230    // CodeGen/src/OptimizeDeadStore.cpp
231    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenDsePtrStoreTagCheck);
232    // CodeGen/src/OptimizeDeadStore.cpp
233    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenDseRestoreHints);
234    // CodeGen/src/OptimizeConstProp.cpp
235    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenExtraTableOpts);
236    // CodeGen/src/IrLoweringA64.cpp
237    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenFixBufferLenCheck);
238    // CodeGen/src/IrValueLocationTracking.cpp
239    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenForwardRematerialize);
240    // CodeGen/src/CodeAllocator.cpp
241    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenFreeBlocks);
242    // CodeGen/src/CodeGen.cpp
243    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenInteger2);
244    // CodeGen/src/IrTranslateBuiltins.cpp
245    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenIntegerArg3Fix);
246    // CodeGen/src/IrTranslation.cpp
247    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenIntegerFastcall2k);
248    // CodeGen/src/OptimizeConstProp.cpp
249    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenLinearSetupEntryState3);
250    // CodeGen/src/OptimizeConstProp.cpp
251    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenLoadPropagateOrigin);
252    // CodeGen/src/CodeGen.cpp
253    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenNopPadding);
254    // CodeGen/src/CodeAllocator.cpp
255    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenProtectData);
256    // CodeGen/src/OptimizeConstProp.cpp
257    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenRecordAllBlockExitInfo);
258    // CodeGen/src/BytecodeAnalysis.cpp
259    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenRegTag2);
260    // CodeGen/src/CodeGenX64.cpp
261    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenSuggestArgumentRegisterX64);
262    // CodeGen/src/IrAnalysis.cpp
263    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenVmExitSync);
264    // CodeGen/src/OptimizeDeadStore.cpp
265    crate::LUAU_FASTFLAGVARIABLE!(LuauCodegenVmExitSyncFix);
266    // Compiler/src/Compiler.cpp
267    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileDuptableConstantPack2);
268    // Compiler/src/CostModel.cpp
269    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileFastcall3CostModel);
270    // Compiler/src/ConstantFolding.cpp
271    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileFoldOptimize);
272    // Compiler/src/Compiler.cpp
273    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileInlineTableFunctions);
274    // Compiler/src/ConstantFolding.cpp
275    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileNewTableMutationTracker);
276    // Compiler/src/Compiler.cpp
277    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileNoOptNext);
278    // Compiler/src/ConstantFolding.cpp
279    crate::LUAU_FASTFLAGVARIABLE!(LuauCompilePropagateTableProps2);
280    // Compiler/src/Compiler.cpp
281    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileStringInterpTargetTop);
282    // Compiler/src/Types.cpp
283    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileTypeAliases);
284    // Bytecode/src/BytecodeBuilder.cpp
285    crate::LUAU_FASTFLAGVARIABLE!(LuauCompileUdataDirect);
286    // Analysis/src/BuiltinTypeFunctions.cpp
287    crate::LUAU_FASTFLAGVARIABLE!(LuauConcatDoesntAlwaysReturnString);
288    // Ast/src/Parser.cpp
289    crate::LUAU_FASTFLAGVARIABLE!(LuauConst2);
290    // Ast/src/Parser.cpp
291    crate::LUAU_FASTFLAGVARIABLE!(LuauConstJustReportErrorForUnderfill);
292    // Analysis/src/Constraint.cpp
293    crate::LUAU_FASTFLAGVARIABLE!(LuauConstraintGraph);
294    // Ast/src/Parser.cpp
295    crate::LUAU_FASTFLAGVARIABLE!(LuauCstExprGroup);
296    // Ast/src/Parser.cpp
297    crate::LUAU_FASTFLAGVARIABLE!(LuauCstTypeGroup);
298    // VM/src/lvmexecute.cpp
299    crate::LUAU_FASTFLAGVARIABLE!(LuauDirectFieldGet);
300    // Analysis/src/ConstraintGenerator.cpp
301    crate::LUAU_FASTFLAGVARIABLE!(LuauDisallowRedefiningBuiltinTypes);
302    // Compiler/src/Compiler.cpp
303    crate::LUAU_FASTFLAGVARIABLE!(LuauEmitCallFeedback);
304    // Ast/src/PrettyPrinter.cpp
305    crate::LUAU_FASTFLAGVARIABLE!(LuauErrorTolerantPrettyPrinting);
306    // Analysis/src/TypeInfer.cpp
307    crate::LUAU_FASTFLAGVARIABLE!(LuauExplicitTypeInstantiationSupport);
308    // Ast/src/Parser.cpp
309    crate::LUAU_FASTFLAGVARIABLE!(LuauExportValueSyntax);
310    // Analysis/src/Frontend.cpp
311    crate::LUAU_FASTFLAGVARIABLE!(LuauExportValueTypecheck);
312    // Analysis/src/Normalize.cpp
313    crate::LUAU_FASTFLAGVARIABLE!(LuauExternTypesNormalizeWithShapes);
314    // Analysis/src/Unifier.cpp
315    crate::LUAU_FASTFLAGVARIABLE!(LuauFixIndexerSubtypingOrdering);
316    // Analysis/src/ConstraintSolver.cpp
317    crate::LUAU_FASTFLAGVARIABLE!(LuauFixPropReadsOnMetatableTypes);
318    // Analysis/src/ConstraintSolver.cpp
319    crate::LUAU_FASTFLAGVARIABLE!(LuauInstantiateFunctionTypeBeforePush);
320    // Analysis/src/Unifier.cpp
321    crate::LUAU_FASTFLAGVARIABLE!(LuauInstantiateInSubtyping);
322    // Analysis/src/Instantiation.cpp
323    crate::LUAU_FASTFLAGVARIABLE!(LuauInstantiationUsesPolarity);
324    // Compiler/src/Builtins.cpp
325    crate::LUAU_FASTFLAGVARIABLE!(LuauIntegerBufferFastcalls);
326    // Compiler/src/Builtins.cpp
327    crate::LUAU_FASTFLAGVARIABLE!(LuauIntegerFastcalls);
328    // VM/src/lintlib.cpp
329    crate::LUAU_FASTFLAGVARIABLE!(LuauIntegerLibrary);
330    // Ast/src/Parser.cpp
331    crate::LUAU_FASTFLAGVARIABLE!(LuauIntegerType2);
332    // Analysis/src/ConstraintSolver.cpp
333    crate::LUAU_FASTFLAGVARIABLE!(LuauIterativeInstantiationQueuer);
334    // Analysis/src/Frontend.cpp
335    crate::LUAU_FASTFLAGVARIABLE!(LuauKnowsTheDataModel3);
336    // Analysis/src/TypeChecker2.cpp
337    crate::LUAU_FASTFLAGVARIABLE!(LuauLValueCompoundAssignmentVisitLhs);
338    // Analysis/src/Unifier2.cpp
339    crate::LUAU_FASTFLAGVARIABLE!(LuauLimitUnificationRecursion);
340    // CodeGen/src/CodeGenUtils.cpp
341    crate::LUAU_FASTFLAGVARIABLE!(LuauNativeCodeTargetCheck);
342    // Analysis/src/NonStrictTypeChecker.cpp
343    crate::LUAU_FASTFLAGVARIABLE!(LuauNonStrictModeUseErrorSupressingTag);
344    // Analysis/src/ConstraintSolver.cpp
345    crate::LUAU_FASTFLAGVARIABLE!(LuauOccursCheckForAllBindings);
346    // Analysis/src/Unifier2.cpp
347    crate::LUAU_FASTFLAGVARIABLE!(LuauPropagateFreeTypesIntoUnionAndIntersectionBounds);
348    // Analysis/src/ConstraintGenerator.cpp
349    crate::LUAU_FASTFLAGVARIABLE!(LuauPropagateTypeAnnotationsInForInLoops);
350    // Analysis/src/TypeChecker2.cpp
351    crate::LUAU_FASTFLAGVARIABLE!(LuauPropertyModifierMismatchErrors);
352    // Analysis/src/ConstraintGenerator.cpp
353    crate::LUAU_FASTFLAGVARIABLE!(LuauReadOnlyIndexers);
354    // Analysis/src/ConstraintSolver.cpp
355    crate::LUAU_FASTFLAGVARIABLE!(LuauRefineNilFromTableIndexerResultType);
356    // Analysis/src/ConstraintSolver.cpp
357    crate::LUAU_FASTFLAGVARIABLE!(LuauRemoveConstraintSolverEmplace);
358    // Analysis/src/Instantiation.cpp
359    crate::LUAU_FASTFLAGVARIABLE!(LuauReplacerIsSolverAgnostic);
360    // Require/src/RequireNavigator.cpp
361    crate::LUAU_FASTFLAGVARIABLE!(LuauRequireResolveAliasNullCheck);
362    // VM/src/ldo.cpp
363    crate::LUAU_FASTFLAGVARIABLE!(LuauResumeRestoreCcalls);
364    // Analysis/src/BuiltinDefinitions.cpp
365    crate::LUAU_FASTFLAGVARIABLE!(LuauSilenceDynamicFormatStringErrors);
366    // Ast/src/Parser.cpp
367    crate::LUAU_FASTFLAGVARIABLE!(LuauSolverV2);
368    // Analysis/src/Subtyping.cpp
369    crate::LUAU_FASTFLAGVARIABLE!(LuauSubtypingMissingPropertiesAsNil);
370    // Analysis/src/Subtyping.cpp
371    crate::LUAU_FASTFLAGVARIABLE!(LuauSubtypingTablesHasBetterErrorSuppression);
372    // Ast/src/Parser.cpp
373    crate::LUAU_FASTFLAGVARIABLE!(LuauTableEntriesDontNeedToMatchIndent);
374    // Analysis/src/BuiltinDefinitions.cpp
375    crate::LUAU_FASTFLAGVARIABLE!(LuauTableFreezeCheckIsSubtype);
376    // Analysis/src/ConstraintGenerator.cpp
377    crate::LUAU_FASTFLAGVARIABLE!(LuauTidyTypePrototyping);
378    // Analysis/src/Unifier.cpp
379    crate::LUAU_FASTFLAGVARIABLE!(LuauTransitiveSubtyping);
380    // Analysis/src/Error.cpp
381    crate::LUAU_FASTFLAGVARIABLE!(LuauTweakAccessViolationReporting);
382    // Analysis/src/TypeFunctionRuntime.cpp
383    crate::LUAU_FASTFLAGVARIABLE!(LuauTypeFunctionRobustness);
384    // Analysis/src/TypeFunctionRuntime.cpp
385    crate::LUAU_FASTFLAGVARIABLE!(LuauTypeFunctionSerializeArgNames);
386    // Analysis/src/TypeFunctionRuntime.cpp
387    crate::LUAU_FASTFLAGVARIABLE!(LuauTypeFunctionStructuredErrors);
388    // Analysis/src/TypeFunctionRuntime.cpp
389    crate::LUAU_FASTFLAGVARIABLE!(LuauTypeFunctionSupportsFrozen);
390    // VM/src/lvmload.cpp
391    crate::LUAU_FASTFLAGVARIABLE!(LuauUdataDirectAccess6);
392    // Analysis/src/TypeFunctionRuntime.cpp
393    crate::LUAU_FASTFLAGVARIABLE!(LuauUdtfTypeIsSubtypeOf);
394    // Analysis/src/NativeStackGuard.cpp
395    crate::LUAU_FASTFLAGVARIABLE!(LuauUseNativeStackGuard);
396    // Analysis/src/DataFlowGraph.cpp
397    crate::LUAU_FASTFLAGVARIABLE!(LuauVisitCallTypeArgsInDfg);
398    // VM/src/lvmexecute.cpp
399    crate::LUAU_FASTFLAGVARIABLE!(LuauYieldIter2);
400}
401
402/// Static int FastFlags, mirroring `FFlag`. C++ collects every
403/// `LUAU_FASTINTVARIABLE(...)` into `namespace FInt`; Rust modules aren't open,
404/// so the consumers' flags are gathered here. Read as `FInt::Flag.get()`.
405#[allow(non_snake_case)]
406pub mod FInt {
407    // CodeGen/src/CodeGen.cpp
408    crate::LUAU_FASTINTVARIABLE!(CodegenHeuristicsBlockInstructionLimit, 65_536);
409    // CodeGen/src/CodeGen.cpp
410    crate::LUAU_FASTINTVARIABLE!(CodegenHeuristicsBlockLimit, 32_768);
411    // CodeGen/src/CodeGen.cpp
412    crate::LUAU_FASTINTVARIABLE!(CodegenHeuristicsInstructionLimit, 1_048_576);
413    // CodeGen/src/CodeGenContext.cpp
414    crate::LUAU_FASTINTVARIABLE!(LuauCodeGenBlockSize, 4 * 1024 * 1024);
415    // CodeGen/src/CodeGenContext.cpp
416    crate::LUAU_FASTINTVARIABLE!(LuauCodeGenMaxTotalSize, 256 * 1024 * 1024);
417    // Analysis/src/Clone.cpp
418    crate::LUAU_FASTINTVARIABLE!(LuauTypeCloneIterationLimit, 100_000);
419    // Analysis/src/ToString.cpp
420    crate::LUAU_FASTINTVARIABLE!(DebugLuauVerboseTypeNames, 0);
421    // Analysis/src/TypeInfer.cpp
422    crate::LUAU_FASTINTVARIABLE!(LuauCheckRecursionLimit, 300);
423    // CodeGen/src/OptimizeConstProp.cpp
424    crate::LUAU_FASTINTVARIABLE!(LuauCodeGenLiveSlotReuseLimit, 8);
425    // CodeGen/src/OptimizeConstProp.cpp
426    crate::LUAU_FASTINTVARIABLE!(LuauCodeGenMinLinearBlockPath, 3);
427    // CodeGen/src/OptimizeConstProp.cpp
428    crate::LUAU_FASTINTVARIABLE!(LuauCodeGenReuseSlotLimit, 64);
429    // CodeGen/src/OptimizeConstProp.cpp
430    crate::LUAU_FASTINTVARIABLE!(LuauCodeGenReuseUdataTagLimit, 64);
431    // Compiler/src/Compiler.cpp
432    crate::LUAU_FASTINTVARIABLE!(LuauCompileInlineDepth, 5);
433    // Compiler/src/Compiler.cpp
434    crate::LUAU_FASTINTVARIABLE!(LuauCompileInlineThreshold, 25);
435    // Compiler/src/Compiler.cpp
436    crate::LUAU_FASTINTVARIABLE!(LuauCompileInlineThresholdMaxBoost, 300);
437    // Compiler/src/Compiler.cpp
438    crate::LUAU_FASTINTVARIABLE!(LuauCompileLoopUnrollThreshold, 25);
439    // Compiler/src/Compiler.cpp
440    crate::LUAU_FASTINTVARIABLE!(LuauCompileLoopUnrollThresholdMaxBoost, 300);
441    // Analysis/src/Generalization.cpp
442    crate::LUAU_FASTINTVARIABLE!(LuauGenericCounterMaxDepth, 15);
443    // Analysis/src/Generalization.cpp
444    crate::LUAU_FASTINTVARIABLE!(LuauGenericCounterMaxSteps, 1500);
445    // Analysis/src/Error.cpp
446    crate::LUAU_FASTINTVARIABLE!(LuauIndentTypeMismatchMaxTypeLength, 10);
447    // VM/src/lfunc.cpp
448    crate::LUAU_FASTINTVARIABLE!(LuauInlineHitsThreshold, 3);
449    // Analysis/src/NonStrictTypeChecker.cpp
450    crate::LUAU_FASTINTVARIABLE!(LuauNonStrictTypeCheckerRecursionLimit, 300);
451    // Analysis/src/Normalize.cpp
452    crate::LUAU_FASTINTVARIABLE!(LuauNormalizeCacheLimit, 100000);
453    // Analysis/src/Normalize.cpp
454    crate::LUAU_FASTINTVARIABLE!(LuauNormalizerInitialFuel, 3000);
455    // Ast/src/Parser.cpp
456    crate::LUAU_FASTINTVARIABLE!(LuauParseErrorLimit, 100);
457    // Analysis/src/ConstraintGenerator.cpp
458    crate::LUAU_FASTINTVARIABLE!(LuauPrimitiveInferenceInTableLimit, 500);
459    // Ast/src/Parser.cpp
460    crate::LUAU_FASTINTVARIABLE!(LuauRecursionLimit, 1000);
461    // Analysis/src/ConstraintSolver.cpp
462    crate::LUAU_FASTINTVARIABLE!(LuauSolverConstraintLimit, 1000);
463    // Analysis/src/ConstraintSolver.cpp
464    crate::LUAU_FASTINTVARIABLE!(LuauSolverRecursionLimit, 500);
465    // Analysis/src/NativeStackGuard.cpp
466    crate::LUAU_FASTINTVARIABLE!(LuauStackGuardThreshold, 1024);
467    // Analysis/src/Subtyping.cpp
468    crate::LUAU_FASTINTVARIABLE!(LuauSubtypingIterationLimit, 20000);
469    // Analysis/src/Subtyping.cpp
470    crate::LUAU_FASTINTVARIABLE!(LuauSubtypingReasoningLimit, 100);
471    // Analysis/src/Linter.cpp
472    crate::LUAU_FASTINTVARIABLE!(LuauSuggestionDistance, 4);
473    // Analysis/src/Type.cpp
474    crate::LUAU_FASTINTVARIABLE!(LuauTableTypeMaximumStringifierLength, 0);
475    // Analysis/src/Substitution.cpp
476    crate::LUAU_FASTINTVARIABLE!(LuauTarjanChildLimit, 10000);
477    // Analysis/src/Substitution.cpp
478    crate::LUAU_FASTINTVARIABLE!(LuauTarjanPreallocationSize, 256);
479    // Analysis/src/TypeInfer.cpp
480    crate::LUAU_FASTINTVARIABLE!(LuauTypeInferIterationLimit, 20000);
481    // Analysis/src/TypeInfer.cpp
482    crate::LUAU_FASTINTVARIABLE!(LuauTypeInferRecursionLimit, 165);
483    // Analysis/src/TypeInfer.cpp
484    crate::LUAU_FASTINTVARIABLE!(LuauTypeInferTypePackLoopLimit, 5000);
485    // Ast/src/Parser.cpp
486    crate::LUAU_FASTINTVARIABLE!(LuauTypeLengthLimit, 1000);
487    // Analysis/src/Type.cpp
488    crate::LUAU_FASTINTVARIABLE!(LuauTypeMaximumStringifierLength, 500);
489    // Analysis/src/TypeInfer.cpp
490    crate::LUAU_FASTINTVARIABLE!(LuauVisitRecursionLimit, 500);
491}
492
493/// Dynamic bool flags (`DFFlag::`), mirroring `FFlag`.
494#[allow(non_snake_case)]
495pub mod DFFlag {
496    // CodeGen/src/EmitCommonX64.cpp
497    crate::LUAU_DYNAMIC_FASTFLAGVARIABLE!(AddReturnExectargetCheck, false);
498    // Ast/src/Parser.cpp
499    crate::LUAU_DYNAMIC_FASTFLAGVARIABLE!(DebugLuauReportReturnTypeVariadicWithTypeSuffix, false);
500    // Require/src/RequireNavigator.cpp
501    crate::LUAU_DYNAMIC_FASTFLAGVARIABLE!(LuauRequireAliasOverrideOrderFix, false);
502}
503
504/// Dynamic int flags (`DFInt::`), mirroring `FInt`.
505#[allow(non_snake_case)]
506pub mod DFInt {
507    // Analysis/src/TypeFunction.cpp
508    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauTypeFamilyApplicationCartesianProductLimit, 5_000);
509    // Analysis/src/TypeFunction.cpp
510    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauTypeFamilyGraphReductionMaximumSteps, 1_000_000);
511    // Analysis/src/TypeFunctionRuntimeBuilder.cpp
512    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauTypeFunctionSerdeIterationLimit, 100_000);
513    // Analysis/src/ConstraintGenerator.cpp
514    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauConstraintGeneratorRecursionLimit, 300);
515    // Analysis/src/Simplify.cpp
516    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauSimplificationComplexityLimit, 8);
517    // Analysis/src/BuiltinTypeFunctions.cpp
518    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauStepRefineRecursionLimit, 64);
519    // Analysis/src/Subtyping.cpp
520    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauSubtypingRecursionLimit, 100);
521    // Analysis/src/TypeFunction.cpp
522    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauTypeFamilyUseGuesserDepth, -1);
523    // Analysis/src/TypePath.cpp
524    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauTypePathMaximumTraverseSteps, 100);
525    // Analysis/src/Simplify.cpp
526    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauTypeSimplificationIterationLimit, 128);
527    // Analysis/src/Unifier2.cpp
528    crate::LUAU_DYNAMIC_FASTINTVARIABLE!(LuauUnifierRecursionLimit, 100);
529}
530
531mod fastflag_timetrace_tests {
532    /// The macro-defined flag reads its default; the TimeTrace consumer macros
533    /// expand cleanly as no-ops (default `LUAU_ENABLE_TIME_TRACE` off).
534    #[test]
535    fn flag_default_and_timetrace_noops() {
536        assert_eq!(crate::FFlag::DebugLuauTimeTracing.get(), false);
537        crate::LUAU_TIMETRACE_SCOPE!("name", "category");
538        crate::LUAU_TIMETRACE_OPTIONAL_TAIL_SCOPE!("name", "category", 100);
539        crate::LUAU_TIMETRACE_ARGUMENT!("k", "v");
540        crate::FFlag::DebugLuauTimeTracing.set(true);
541        assert_eq!(crate::FFlag::DebugLuauTimeTracing.get(), true);
542    }
543}