mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 14:25:44 +08:00
ce8495a69e
# What's Changed? - Code refactoring with a new clang-format - More bug fixes / test case fixes in the new solver ## New Solver - More precise telemetry collection of `any` types - Simplification of two completely disjoint tables combines them into a single table that inherits all properties / indexers - Refining a `never & <anything>` does not produce type family types nor constraints - Silence "inference failed to complete" error when it is the only error reported --- ### Internal Contributors Co-authored-by: Aaron Weiss <aaronweiss@roblox.com> Co-authored-by: Andy Friesen <afriesen@roblox.com> Co-authored-by: Dibri Nsofor <dnsofor@roblox.com> Co-authored-by: Jeremy Yoo <jyoo@roblox.com> Co-authored-by: Vighnesh Vijay <vvijay@roblox.com> Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com> --------- Co-authored-by: Aaron Weiss <aaronweiss@roblox.com> Co-authored-by: Alexander McCord <amccord@roblox.com> Co-authored-by: Andy Friesen <afriesen@roblox.com> Co-authored-by: Vighnesh <vvijay@roblox.com> Co-authored-by: Aviral Goel <agoel@roblox.com> Co-authored-by: David Cope <dcope@roblox.com> Co-authored-by: Lily Brown <lbrown@roblox.com> Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
#include "ConstraintGeneratorFixture.h"
|
|
#include "ScopedFlags.h"
|
|
|
|
LUAU_FASTFLAG(DebugLuauDeferredConstraintResolution);
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
ConstraintGeneratorFixture::ConstraintGeneratorFixture()
|
|
: Fixture()
|
|
, mainModule(new Module)
|
|
, forceTheFlag{FFlag::DebugLuauDeferredConstraintResolution, true}
|
|
{
|
|
mainModule->name = "MainModule";
|
|
mainModule->humanReadableName = "MainModule";
|
|
|
|
BlockedTypePack::nextIndex = 0;
|
|
}
|
|
|
|
void ConstraintGeneratorFixture::generateConstraints(const std::string& code)
|
|
{
|
|
AstStatBlock* root = parse(code);
|
|
dfg = std::make_unique<DataFlowGraph>(DataFlowGraphBuilder::build(root, NotNull{&ice}));
|
|
cg = std::make_unique<ConstraintGenerator>(
|
|
mainModule,
|
|
NotNull{&normalizer},
|
|
NotNull(&moduleResolver),
|
|
builtinTypes,
|
|
NotNull(&ice),
|
|
frontend.globals.globalScope,
|
|
/*prepareModuleScope*/ nullptr,
|
|
&logger,
|
|
NotNull{dfg.get()},
|
|
std::vector<RequireCycle>()
|
|
);
|
|
cg->visitModuleRoot(root);
|
|
rootScope = cg->rootScope;
|
|
constraints = Luau::borrowConstraints(cg->constraints);
|
|
}
|
|
|
|
void ConstraintGeneratorFixture::solve(const std::string& code)
|
|
{
|
|
generateConstraints(code);
|
|
ConstraintSolver cs{NotNull{&normalizer}, NotNull{rootScope}, constraints, "MainModule", NotNull(&moduleResolver), {}, &logger, {}};
|
|
cs.run();
|
|
}
|
|
|
|
} // namespace Luau
|