mirror of
https://github.com/luau-lang/luau.git
synced 2025-04-21 04:03:47 +01:00
# General This week has been focused primarily on bugfixes, with a ton of usability improvements to the new solver, fragment autocomplete, and the concrete syntax tree project. ## Runtime - Fix an assertion caused by failing to allocate native code pages. - Expose a `lua_pushrequire` function, which performs the same initialization steps as `luaopen_require` but does not register require globally. This lets users create specialized, custom `requires`. # New Solver - Fix a bug in simplification of types caused by combinatorial explosion of intersection and union types. - Fix a memory leak in fragment autocomplete - Improve the isolation of modules in fragment autocomplete - Throw errors when users define a type function with the name `typeof` - Continue to narrow intersection types which might be `never`. - Major rework of generalization continues - we are blazing a new path with eager + non-reentrant generalization and actively working to make these more performant and less error prone. - Improve the ability of `and/or` type functions to reduce, even when their arguments are generic. - Report arity mismatches for undersaturated calls with unknown parameters # New Non-Strict - Extends the new non-strict mode to report unknown symbols in types # Old Solver - Fix a crash caused by excessive stack usage during typechecking # Misc - Improvements to Concrete Syntax Tree location tracking for string table props. --- Co-authored-by: Andy Friesen <afriesen@roblox.com> Co-authored-by: Ariel Weiss <aaronweiss@roblox.com> Co-authored-by: Aviral Goel <agoel@roblox.com> Co-authored-by: Hunter Goldstein <hgoldstein@roblox.com> Co-authored-by: Sora Kanosue <skanosue@roblox.com> Co-authored-by: Talha Pathan <tpathan@roblox.com> Co-authored-by: Varun Saini <vsaini@roblox.com> Co-authored-by: Vighnesh Vijay <vvijay@roblox.com> Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
41 lines
1.3 KiB
C++
41 lines
1.3 KiB
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
|
|
#pragma once
|
|
|
|
#include "Luau/DenseHash.h"
|
|
#include "Luau/NotNull.h"
|
|
#include "Luau/TypeFwd.h"
|
|
#include <set>
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
struct TypeArena;
|
|
|
|
struct SimplifyResult
|
|
{
|
|
TypeId result;
|
|
|
|
DenseHashSet<TypeId> blockedTypes;
|
|
};
|
|
|
|
SimplifyResult simplifyIntersection(NotNull<BuiltinTypes> builtinTypes, NotNull<TypeArena> arena, TypeId left, TypeId right);
|
|
SimplifyResult simplifyIntersection(NotNull<BuiltinTypes> builtinTypes, NotNull<TypeArena> arena, std::set<TypeId> parts);
|
|
|
|
SimplifyResult simplifyUnion(NotNull<BuiltinTypes> builtinTypes, NotNull<TypeArena> arena, TypeId left, TypeId right);
|
|
|
|
SimplifyResult simplifyIntersectWithTruthy(NotNull<BuiltinTypes> builtinTypes, NotNull<TypeArena> arena, TypeId target);
|
|
SimplifyResult simplifyIntersectWithFalsy(NotNull<BuiltinTypes> builtinTypes, NotNull<TypeArena> arena, TypeId target);
|
|
|
|
enum class Relation
|
|
{
|
|
Disjoint, // No A is a B or vice versa
|
|
Coincident, // Every A is in B and vice versa
|
|
Intersects, // Some As are in B and some Bs are in A. ex (number | string) <-> (string | boolean)
|
|
Subset, // Every A is in B
|
|
Superset, // Every B is in A
|
|
};
|
|
|
|
Relation relate(TypeId left, TypeId right);
|
|
|
|
} // namespace Luau
|