mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 14:25:44 +08:00
8453570658
* `Luau.Analyze.CLI` now has experimental support for concurrent type checking. Use the option `-jN` where `N` is the number of threads to spawn. * Improve typechecking performance by ~17% by making the function `Luau::follow` much more efficient. * Tighten up the type of `os.date` * Removed `ParseOptions::allowTypeAnnotations` and `ParseOptions::supportContinueStatement` New solver * Improve the reliability of function overload resolution * More work toward supporting parallel type checking * Fix a bug in inference of `==` and `~=` which would erroneously infer that the operands were `boolean` * Better error reporting when `for...in` loops are used incorrectly. CodeGen * Fix unwind registration when libunwind is used on Linux * Fixed replaced IR instruction use count * Convert X64 unwind info generation to standard prologue * Implement A64 unwind info support for Dwarf2 * Live in/out data for linear blocks is now created * Add side-exit VM register requirements to the IR dump * Reuse ConstPropState between block chains * Remove redundant base update --------- Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com> Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
85 lines
2.2 KiB
C++
85 lines
2.2 KiB
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
#include <optional>
|
|
|
|
#include "Luau/Common.h"
|
|
#include "Luau/Ast.h"
|
|
#include "Luau/AstJsonEncoder.h"
|
|
#include "Luau/Parser.h"
|
|
#include "Luau/ParseOptions.h"
|
|
#include "Luau/ToString.h"
|
|
|
|
#include "FileUtils.h"
|
|
|
|
static void displayHelp(const char* argv0)
|
|
{
|
|
printf("Usage: %s [file]\n", argv0);
|
|
}
|
|
|
|
static int assertionHandler(const char* expr, const char* file, int line, const char* function)
|
|
{
|
|
printf("%s(%d): ASSERTION FAILED: %s\n", file, line, expr);
|
|
return 1;
|
|
}
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
Luau::assertHandler() = assertionHandler;
|
|
|
|
for (Luau::FValue<bool>* flag = Luau::FValue<bool>::list; flag; flag = flag->next)
|
|
if (strncmp(flag->name, "Luau", 4) == 0)
|
|
flag->value = true;
|
|
|
|
if (argc >= 2 && strcmp(argv[1], "--help") == 0)
|
|
{
|
|
displayHelp(argv[0]);
|
|
return 0;
|
|
}
|
|
else if (argc < 2)
|
|
{
|
|
displayHelp(argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
const char* name = argv[1];
|
|
std::optional<std::string> maybeSource = std::nullopt;
|
|
if (strcmp(name, "-") == 0)
|
|
{
|
|
maybeSource = readStdin();
|
|
}
|
|
else
|
|
{
|
|
maybeSource = readFile(name);
|
|
}
|
|
|
|
if (!maybeSource)
|
|
{
|
|
fprintf(stderr, "Couldn't read source %s\n", name);
|
|
return 1;
|
|
}
|
|
|
|
std::string source = *maybeSource;
|
|
|
|
Luau::Allocator allocator;
|
|
Luau::AstNameTable names(allocator);
|
|
|
|
Luau::ParseOptions options;
|
|
options.captureComments = true;
|
|
options.allowDeclarationSyntax = true;
|
|
|
|
Luau::ParseResult parseResult = Luau::Parser::parse(source.data(), source.size(), names, allocator, options);
|
|
|
|
if (parseResult.errors.size() > 0)
|
|
{
|
|
fprintf(stderr, "Parse errors were encountered:\n");
|
|
for (const Luau::ParseError& error : parseResult.errors)
|
|
{
|
|
fprintf(stderr, " %s - %s\n", toString(error.getLocation()).c_str(), error.getMessage().c_str());
|
|
}
|
|
fprintf(stderr, "\n");
|
|
}
|
|
|
|
printf("%s", Luau::toJson(parseResult.root, parseResult.commentLocations).c_str());
|
|
|
|
return parseResult.errors.size() > 0 ? 1 : 0;
|
|
}
|