mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 14:25:44 +08:00
0b2755f964
* Progress toward a diffing algorithm for types. We hope that this will be useful for writing clearer error messages. * Add a missing recursion limiter in `Unifier::tryUnifyTables`. This was causing a crash in certain situations. * Luau heap graph enumeration improvements: * Weak references are not reported * Added tag as a fallback name of non-string table links * Included top Luau function information in thread name to understand where thread might be suspended * Constant folding for `math.pi` and `math.huge` at -O2 * Optimize `string.format` and `%*` * This change makes string interpolation 1.5x-2x faster depending on the number and type of formatted components, assuming a few are using primitive types, and reduces associated GC pressure. New type checker: * Initial work toward tracking the upper and lower bounds of types accurately. Native code generation (JIT): * Add IrCmd::CHECK_TRUTHY for improved assert fast-calls * Do not compute type map for modules without types * Capture metatable+readonly state for NEW_TABLE IR instructions * Replace JUMP_CMP_ANY with CMP_ANY and existing JUMP_EQ_INT * Add support for exits to VM with reentry lock in VmExit --------- Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com> Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
38 lines
1.4 KiB
C++
38 lines
1.4 KiB
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
#include "ConstraintGraphBuilderFixture.h"
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
ConstraintGraphBuilderFixture::ConstraintGraphBuilderFixture()
|
|
: Fixture()
|
|
, mainModule(new Module)
|
|
, forceTheFlag{"DebugLuauDeferredConstraintResolution", true}
|
|
{
|
|
mainModule->name = "MainModule";
|
|
mainModule->humanReadableName = "MainModule";
|
|
|
|
BlockedType::DEPRECATED_nextIndex = 0;
|
|
BlockedTypePack::nextIndex = 0;
|
|
}
|
|
|
|
void ConstraintGraphBuilderFixture::generateConstraints(const std::string& code)
|
|
{
|
|
AstStatBlock* root = parse(code);
|
|
dfg = std::make_unique<DataFlowGraph>(DataFlowGraphBuilder::build(root, NotNull{&ice}));
|
|
cgb = std::make_unique<ConstraintGraphBuilder>(mainModule, NotNull{&normalizer}, NotNull(&moduleResolver), builtinTypes, NotNull(&ice),
|
|
frontend.globals.globalScope, /*prepareModuleScope*/ nullptr, &logger, NotNull{dfg.get()}, std::vector<RequireCycle>());
|
|
cgb->visit(root);
|
|
rootScope = cgb->rootScope;
|
|
constraints = Luau::borrowConstraints(cgb->constraints);
|
|
}
|
|
|
|
void ConstraintGraphBuilderFixture::solve(const std::string& code)
|
|
{
|
|
generateConstraints(code);
|
|
ConstraintSolver cs{NotNull{&normalizer}, NotNull{rootScope}, constraints, "MainModule", NotNull(&moduleResolver), {}, &logger, {}};
|
|
cs.run();
|
|
}
|
|
|
|
} // namespace Luau
|