mirror of
https://github.com/luau-lang/luau.git
synced 2025-04-19 03:03:49 +01:00
* Fix a use-after-free bug in the new type cloning algorithm
* Tighten up the type of `coroutine.wrap`. It is now `<A..., R...>(f:
(A...) -> R...) -> ((A...) -> R...)`
* Break `.luaurc` out into a separate library target `Luau.Config`. This
makes it easier for applications to reason about config files without
also depending on the type inference engine.
* Move typechecking limits into `FrontendOptions`. This allows embedders
more finely-grained control over autocomplete's internal time limits.
* Fix stability issue with debugger onprotectederror callback allowing
break in non-yieldable contexts
New solver:
* Initial work toward [Local Type
Inference](0e1082108f/rfcs/local-type-inference.md
)
* Introduce a new subtyping test. This will be much nicer than the old
test because it is completely separate both from actual type inference
and from error reporting.
Native code generation:
* Added function to compute iterated dominance frontier
* Optimize barriers in SET_UPVALUE when tag is known
* Cache lua_State::global in a register on A64
* Optimize constant stores in A64 lowering
* Track table array size state to optimize array size checks
* Add split tag/value store into a VM register
* Check that spills can outlive the block only in specific conditions
---------
Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
63 lines
1.5 KiB
C++
63 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 "Luau/LinterConfig.h"
|
|
|
|
#include "Luau/ParseResult.h"
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
void LintOptions::setDefaults()
|
|
{
|
|
// By default, we enable all warnings
|
|
warningMask = ~0ull;
|
|
}
|
|
|
|
const char* LintWarning::getName(Code code)
|
|
{
|
|
LUAU_ASSERT(unsigned(code) < Code__Count);
|
|
|
|
return kWarningNames[code];
|
|
}
|
|
|
|
LintWarning::Code LintWarning::parseName(const char* name)
|
|
{
|
|
for (int code = Code_Unknown; code < Code__Count; ++code)
|
|
if (strcmp(name, getName(Code(code))) == 0)
|
|
return Code(code);
|
|
|
|
return Code_Unknown;
|
|
}
|
|
|
|
uint64_t LintWarning::parseMask(const std::vector<HotComment>& hotcomments)
|
|
{
|
|
uint64_t result = 0;
|
|
|
|
for (const HotComment& hc : hotcomments)
|
|
{
|
|
if (!hc.header)
|
|
continue;
|
|
|
|
if (hc.content.compare(0, 6, "nolint") != 0)
|
|
continue;
|
|
|
|
size_t name = hc.content.find_first_not_of(" \t", 6);
|
|
|
|
// --!nolint disables everything
|
|
if (name == std::string::npos)
|
|
return ~0ull;
|
|
|
|
// --!nolint needs to be followed by a whitespace character
|
|
if (name == 6)
|
|
continue;
|
|
|
|
// --!nolint name disables the specific lint
|
|
LintWarning::Code code = LintWarning::parseName(hc.content.c_str() + name);
|
|
|
|
if (code != LintWarning::Code_Unknown)
|
|
result |= 1ull << int(code);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
} // namespace Luau
|