-
Notifications
You must be signed in to change notification settings - Fork 392
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Changes: - Support for time tracing for analysis/compiler (not currently exposed through CLI) - Support for type pack arguments in type aliases (#83) - Basic support for require(path) in luau-analyze - Add a lint warning for table.move with 0 index as part of TableOperation lint - Remove last STL dependency from Luau.VM - Minor VS2022 performance tuning Co-authored-by: Rodactor <rodactor@roblox.com>
- Loading branch information
1 parent
4611052
commit 08c66ef
Showing
70 changed files
with
4,475 additions
and
2,952 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
^build/ | ||
^coverage/ | ||
^fuzz/luau.pb.* | ||
^crash-* | ||
^default.prof* | ||
^fuzz-* | ||
^luau$ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details | ||
#pragma once | ||
|
||
#include "Luau/Location.h" | ||
#include "Luau/TypeVar.h" | ||
|
||
#include <unordered_map> | ||
#include <optional> | ||
#include <memory> | ||
|
||
namespace Luau | ||
{ | ||
|
||
struct Scope; | ||
|
||
using ScopePtr = std::shared_ptr<Scope>; | ||
|
||
struct Binding | ||
{ | ||
TypeId typeId; | ||
Location location; | ||
bool deprecated = false; | ||
std::string deprecatedSuggestion; | ||
std::optional<std::string> documentationSymbol; | ||
}; | ||
|
||
struct Scope | ||
{ | ||
explicit Scope(TypePackId returnType); // root scope | ||
explicit Scope(const ScopePtr& parent, int subLevel = 0); // child scope. Parent must not be nullptr. | ||
|
||
const ScopePtr parent; // null for the root | ||
std::unordered_map<Symbol, Binding> bindings; | ||
TypePackId returnType; | ||
bool breakOk = false; | ||
std::optional<TypePackId> varargPack; | ||
|
||
TypeLevel level; | ||
|
||
std::unordered_map<Name, TypeFun> exportedTypeBindings; | ||
std::unordered_map<Name, TypeFun> privateTypeBindings; | ||
std::unordered_map<Name, Location> typeAliasLocations; | ||
|
||
std::unordered_map<Name, std::unordered_map<Name, TypeFun>> importedTypeBindings; | ||
|
||
std::optional<TypeId> lookup(const Symbol& name); | ||
|
||
std::optional<TypeFun> lookupType(const Name& name); | ||
std::optional<TypeFun> lookupImportedType(const Name& moduleAlias, const Name& name); | ||
|
||
std::unordered_map<Name, TypePackId> privateTypePackBindings; | ||
std::optional<TypePackId> lookupPack(const Name& name); | ||
|
||
// WARNING: This function linearly scans for a string key of equal value! It is thus O(n**2) | ||
std::optional<Binding> linearSearchForBinding(const std::string& name, bool traverseScopeChain = true); | ||
|
||
RefinementMap refinements; | ||
|
||
// For mutually recursive type aliases, it's important that | ||
// they use the same types for the same names. | ||
// For instance, in `type Tree<T> { data: T, children: Forest<T> } type Forest<T> = {Tree<T>}` | ||
// we need that the generic type `T` in both cases is the same, so we use a cache. | ||
std::unordered_map<Name, TypeId> typeAliasTypeParameters; | ||
std::unordered_map<Name, TypePackId> typeAliasTypePackParameters; | ||
}; | ||
|
||
} // namespace Luau |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.