@@ -42,14 +42,12 @@ LUAU_FASTFLAGVARIABLE(DebugLuauAssertOnForcedConstraint)
4242LUAU_FASTFLAGVARIABLE(DebugLuauLogSolver)
4343LUAU_FASTFLAGVARIABLE(DebugLuauLogSolverIncludeDependencies)
4444LUAU_FASTFLAGVARIABLE(DebugLuauLogBindings)
45- LUAU_FASTFLAGVARIABLE(LuauDontDynamicallyCreateRedundantSubtypeConstraints)
4645LUAU_FASTFLAG(LuauExplicitTypeInstantiationSupport)
4746LUAU_FASTFLAG(LuauInstantiationUsesGenericPolarity2)
4847LUAU_FASTFLAG(LuauPushTypeConstraintLambdas3)
4948LUAU_FASTFLAG(LuauMarkUnscopedGenericsAsSolved)
5049LUAU_FASTFLAGVARIABLE(LuauUseFastSubtypeForIndexerWithName)
5150LUAU_FASTFLAGVARIABLE(LuauUnifyWithSubtyping)
52- LUAU_FASTFLAG(LuauUseIterativeTypeVisitor)
5351LUAU_FASTFLAGVARIABLE(LuauDoNotUseApplyTypeFunctionToClone)
5452LUAU_FASTFLAGVARIABLE(LuauReworkInfiniteTypeFinder)
5553
@@ -333,16 +331,15 @@ struct InstantiationQueuer : TypeOnceVisitor
333331 }
334332};
335333
336- template <typename BaseVisitor>
337- struct InfiniteTypeFinder : BaseVisitor
334+ struct InfiniteTypeFinder : IterativeTypeVisitor
338335{
339336 NotNull<ConstraintSolver> solver;
340337 const InstantiationSignature& signature;
341338 NotNull<Scope> scope;
342339 bool foundInfiniteType = false ;
343340
344341 explicit InfiniteTypeFinder (ConstraintSolver* solver, const InstantiationSignature& signature, NotNull<Scope> scope)
345- : BaseVisitor (" InfiniteTypeFinder" , /* skipBoundTypes */ true )
342+ : IterativeTypeVisitor (" InfiniteTypeFinder" , /* skipBoundTypes */ true )
346343 , solver(solver)
347344 , signature(signature)
348345 , scope(scope)
@@ -1192,37 +1189,18 @@ bool ConstraintSolver::tryDispatch(const NameConstraint& c, NotNull<const Constr
11921189 c.typePackParameters ,
11931190 };
11941191
1195- if (FFlag::LuauUseIterativeTypeVisitor)
1196- {
1197- InfiniteTypeFinder<IterativeTypeVisitor> itf{this , signature, constraint->scope };
1198- itf.run (target);
1192+ InfiniteTypeFinder itf{this , signature, constraint->scope };
1193+ itf.run (target);
11991194
1200- if (itf.foundInfiniteType )
1201- {
1202- if (FFlag::LuauReworkInfiniteTypeFinder)
1203- constraint->scope ->invalidTypeAliases [c.name ] = constraint->location ;
1204- else
1205- constraint->scope ->invalidTypeAliasNames_DEPRECATED .insert (c.name );
1206- shiftReferences (target, builtinTypes->errorType );
1207- emplaceType<BoundType>(asMutable (target), builtinTypes->errorType );
1208- return true ;
1209- }
1210- }
1211- else
1195+ if (itf.foundInfiniteType )
12121196 {
1213- InfiniteTypeFinder<TypeOnceVisitor> itf{this , signature, constraint->scope };
1214- itf.traverse (target);
1215-
1216- if (itf.foundInfiniteType )
1217- {
1218- if (FFlag::LuauReworkInfiniteTypeFinder)
1219- constraint->scope ->invalidTypeAliases [c.name ] = constraint->location ;
1220- else
1221- constraint->scope ->invalidTypeAliasNames_DEPRECATED .insert (c.name );
1222- shiftReferences (target, builtinTypes->errorType );
1223- emplaceType<BoundType>(asMutable (target), builtinTypes->errorType );
1224- return true ;
1225- }
1197+ if (FFlag::LuauReworkInfiniteTypeFinder)
1198+ constraint->scope ->invalidTypeAliases [c.name ] = constraint->location ;
1199+ else
1200+ constraint->scope ->invalidTypeAliasNames_DEPRECATED .insert (c.name );
1201+ shiftReferences (target, builtinTypes->errorType );
1202+ emplaceType<BoundType>(asMutable (target), builtinTypes->errorType );
1203+ return true ;
12261204 }
12271205 }
12281206
@@ -1360,37 +1338,18 @@ bool ConstraintSolver::tryDispatch(const TypeAliasExpansionConstraint& c, NotNul
13601338 // https://github.com/luau-lang/luau/pull/68 for the RFC responsible for
13611339 // this. This is a little nicer than using a recursion limit because we can
13621340 // catch the infinite expansion before actually trying to expand it.
1363- if (FFlag::LuauUseIterativeTypeVisitor)
1364- {
1365- InfiniteTypeFinder<IterativeTypeVisitor> itf{this , signature, constraint->scope };
1366- itf.run (tf->type );
1341+ InfiniteTypeFinder itf{this , signature, constraint->scope };
1342+ itf.run (tf->type );
13671343
1368- if (itf.foundInfiniteType )
1369- {
1370- // TODO (CLI-56761): Report an error.
1371- bindResult (builtinTypes->errorType );
1372- if (FFlag::LuauReworkInfiniteTypeFinder)
1373- constraint->scope ->invalidTypeAliases [petv->name .value ] = constraint->location ;
1374- else
1375- reportError (GenericError{" Recursive type being used with different parameters" }, constraint->location );
1376- return true ;
1377- }
1378- }
1379- else
1344+ if (itf.foundInfiniteType )
13801345 {
1381- InfiniteTypeFinder<TypeOnceVisitor> itf{this , signature, constraint->scope };
1382- itf.traverse (tf->type );
1383-
1384- if (itf.foundInfiniteType )
1385- {
1386- // TODO (CLI-56761): Report an error.
1387- bindResult (builtinTypes->errorType );
1388- if (FFlag::LuauReworkInfiniteTypeFinder)
1389- constraint->scope ->invalidTypeAliases [petv->name .value ] = constraint->location ;
1390- else
1391- reportError (GenericError{" Recursive type being used with different parameters" }, constraint->location );
1392- return true ;
1393- }
1346+ // TODO (CLI-56761): Report an error.
1347+ bindResult (builtinTypes->errorType );
1348+ if (FFlag::LuauReworkInfiniteTypeFinder)
1349+ constraint->scope ->invalidTypeAliases [petv->name .value ] = constraint->location ;
1350+ else
1351+ reportError (GenericError{" Recursive type being used with different parameters" }, constraint->location );
1352+ return true ;
13941353 }
13951354
13961355 // FIXME: this does not actually implement instantiation properly, it puts
@@ -3894,13 +3853,10 @@ bool ConstraintSolver::isBlocked(NotNull<const Constraint> constraint) const
38943853NotNull<Constraint> ConstraintSolver::pushConstraint (NotNull<Scope> scope, const Location& location, ConstraintV cv)
38953854{
38963855 std::optional<SubtypeConstraintRecord> scr;
3897- if (FFlag::LuauDontDynamicallyCreateRedundantSubtypeConstraints)
3898- {
3899- if (auto sc = cv.get_if <SubtypeConstraint>())
3900- scr.emplace (SubtypeConstraintRecord{sc->subType , sc->superType , SubtypingVariance::Covariant});
3901- else if (auto ec = cv.get_if <EqualityConstraint>())
3902- scr.emplace (SubtypeConstraintRecord{ec->assignmentType , ec->resultType , SubtypingVariance::Invariant});
3903- }
3856+ if (auto sc = cv.get_if <SubtypeConstraint>())
3857+ scr.emplace (SubtypeConstraintRecord{sc->subType , sc->superType , SubtypingVariance::Covariant});
3858+ else if (auto ec = cv.get_if <EqualityConstraint>())
3859+ scr.emplace (SubtypeConstraintRecord{ec->assignmentType , ec->resultType , SubtypingVariance::Invariant});
39043860
39053861 if (scr)
39063862 {
0 commit comments