-
Notifications
You must be signed in to change notification settings - Fork 394
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Sync to upstream/release/611 (#1160)
# What's changed? ### Native Code Generation * Fixed an UAF relating to reusing a hash key after a weak table has undergone some GC. * Fixed a bounds check on arm64 to allow access to the last byte of a buffer. ### New Type Solver * Type states now preserves error-suppression, i.e. `local x: any = 5` and `x.foo` does not error. * Made error-suppression logic in subtyping more accurate. * Subtyping now knows how to reduce type families. * Fixed function call overload resolution so that the return type resolves to the correct overload. * Fixed a case where we attempted to reduce irreducible type families a few too many times, leading to duplicate errors. * Type checker needs to type check annotations in function signatures to be able to report errors relating to those annotations. * Fixed an UAF from a pointer to stack-allocated data in Subtyping's `explainReasonings`. ### Nonstrict Type Checker * Fixed a crash when calling a checked function of the form `math.abs` with an incorrect argument type. * Fixed a crash when calling a checked function with a number of arguments that did not exactly match the number of parameters required. --- ### Internal Contributors Co-authored-by: Aaron Weiss <[email protected]> Co-authored-by: Andy Friesen <[email protected]> Co-authored-by: Vyacheslav Egorov <[email protected]> --------- Co-authored-by: Aaron Weiss <[email protected]> Co-authored-by: Andy Friesen <[email protected]> Co-authored-by: Vighnesh <[email protected]> Co-authored-by: Aviral Goel <[email protected]> Co-authored-by: David Cope <[email protected]> Co-authored-by: Lily Brown <[email protected]> Co-authored-by: Vyacheslav Egorov <[email protected]>
- Loading branch information
1 parent
974963a
commit 67ce75e
Showing
35 changed files
with
1,263 additions
and
566 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details | ||
#pragma once | ||
|
||
#include "Luau/Ast.h" | ||
#include "Luau/InsertionOrderedMap.h" | ||
#include "Luau/NotNull.h" | ||
#include "Luau/TypeFwd.h" | ||
#include "Luau/Location.h" | ||
#include "Luau/Error.h" | ||
#include "Luau/Subtyping.h" | ||
|
||
namespace Luau | ||
{ | ||
|
||
struct BuiltinTypes; | ||
struct TypeArena; | ||
struct Scope; | ||
struct InternalErrorReporter; | ||
struct TypeCheckLimits; | ||
struct Subtyping; | ||
|
||
class Normalizer; | ||
|
||
struct OverloadResolver | ||
{ | ||
enum Analysis | ||
{ | ||
Ok, | ||
TypeIsNotAFunction, | ||
ArityMismatch, | ||
OverloadIsNonviable, // Arguments were incompatible with the overloads parameters but were otherwise compatible by arity | ||
}; | ||
|
||
OverloadResolver(NotNull<BuiltinTypes> builtinTypes, NotNull<TypeArena> arena, NotNull<Normalizer> normalizer, NotNull<Scope> scope, | ||
NotNull<InternalErrorReporter> reporter, NotNull<TypeCheckLimits> limits, Location callLocation); | ||
|
||
NotNull<BuiltinTypes> builtinTypes; | ||
NotNull<TypeArena> arena; | ||
NotNull<Normalizer> normalizer; | ||
NotNull<Scope> scope; | ||
NotNull<InternalErrorReporter> ice; | ||
NotNull<TypeCheckLimits> limits; | ||
Subtyping subtyping; | ||
Location callLoc; | ||
|
||
// Resolver results | ||
std::vector<TypeId> ok; | ||
std::vector<TypeId> nonFunctions; | ||
std::vector<std::pair<TypeId, ErrorVec>> arityMismatches; | ||
std::vector<std::pair<TypeId, ErrorVec>> nonviableOverloads; | ||
InsertionOrderedMap<TypeId, std::pair<OverloadResolver::Analysis, size_t>> resolution; | ||
|
||
|
||
std::pair<OverloadResolver::Analysis, TypeId> selectOverload(TypeId ty, TypePackId args); | ||
void resolve(TypeId fnTy, const TypePack* args, AstExpr* selfExpr, const std::vector<AstExpr*>* argExprs); | ||
|
||
private: | ||
std::optional<ErrorVec> testIsSubtype(const Location& location, TypeId subTy, TypeId superTy); | ||
std::optional<ErrorVec> testIsSubtype(const Location& location, TypePackId subTy, TypePackId superTy); | ||
std::pair<Analysis, ErrorVec> checkOverload( | ||
TypeId fnTy, const TypePack* args, AstExpr* fnLoc, const std::vector<AstExpr*>* argExprs, bool callMetamethodOk = true); | ||
static bool isLiteral(AstExpr* expr); | ||
LUAU_NOINLINE | ||
std::pair<Analysis, ErrorVec> checkOverload_( | ||
TypeId fnTy, const FunctionType* fn, const TypePack* args, AstExpr* fnExpr, const std::vector<AstExpr*>* argExprs); | ||
size_t indexof(Analysis analysis); | ||
void add(Analysis analysis, TypeId ty, ErrorVec&& errors); | ||
}; | ||
|
||
} // namespace Luau |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.