mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 22:35:43 +08:00
3f1508c83a
- Improve error recovery during type checking - Initial (not fully complete) implementation for singleton types (RFC RFC: Singleton types #37) - Implement a C-friendly interface for compiler (luacode.h) - Remove C++ features from lua.h (removed default arguments from luau_load and lua_pushcfunction) - Fix lua_breakpoint behavior when enabled=false - Implement coroutine.close (RFC RFC: coroutine.close #88) Note, this introduces small breaking changes in lua.h: - luau_load env argument is now required, pass an extra 0 - lua_pushcfunction now must be called with 3 arguments; if you were calling it with 2 arguments, pass an extra NULL; if you were calling it with 4, use lua_pushcclosure. These changes are necessary to make sure lua.h can be used from pure C - the future release will make it possible by adding an option to luaconf.h to change function name mangling to be C-compatible. We don't anticipate breaking the FFI interface in the future, but this change was necessary to restore C compatibility. Closes #121 Fixes #213
78 lines
2.9 KiB
C++
78 lines
2.9 KiB
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
#pragma once
|
|
|
|
#include "Luau/Common.h"
|
|
#include "Luau/TypeVar.h"
|
|
|
|
#include <unordered_map>
|
|
#include <optional>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
LUAU_FASTINT(LuauTableTypeMaximumStringifierLength)
|
|
LUAU_FASTINT(LuauTypeMaximumStringifierLength)
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
struct ToStringNameMap
|
|
{
|
|
std::unordered_map<TypeId, std::string> typeVars;
|
|
std::unordered_map<TypePackId, std::string> typePacks;
|
|
};
|
|
|
|
struct ToStringOptions
|
|
{
|
|
bool exhaustive = false; // If true, we produce complete output rather than comprehensible output
|
|
bool useLineBreaks = false; // If true, we insert new lines to separate long results such as table entries/metatable.
|
|
bool functionTypeArguments = false; // If true, output function type argument names when they are available
|
|
bool hideTableKind = false; // If true, all tables will be surrounded with plain '{}'
|
|
bool hideNamedFunctionTypeParameters = false; // If true, type parameters of functions will be hidden at top-level.
|
|
size_t maxTableLength = size_t(FInt::LuauTableTypeMaximumStringifierLength); // Only applied to TableTypeVars
|
|
size_t maxTypeLength = size_t(FInt::LuauTypeMaximumStringifierLength);
|
|
std::optional<ToStringNameMap> nameMap;
|
|
std::shared_ptr<Scope> scope; // If present, module names will be added and types that are not available in scope will be marked as 'invalid'
|
|
};
|
|
|
|
struct ToStringResult
|
|
{
|
|
std::string name;
|
|
ToStringNameMap nameMap;
|
|
|
|
bool invalid = false;
|
|
bool error = false;
|
|
bool cycle = false;
|
|
bool truncated = false;
|
|
};
|
|
|
|
ToStringResult toStringDetailed(TypeId ty, const ToStringOptions& opts = {});
|
|
ToStringResult toStringDetailed(TypePackId ty, const ToStringOptions& opts = {});
|
|
|
|
std::string toString(TypeId ty, const ToStringOptions& opts);
|
|
std::string toString(TypePackId ty, const ToStringOptions& opts);
|
|
|
|
// These are offered as overloads rather than a default parameter so that they can be easily invoked from within the MSVC debugger.
|
|
// You can use them in watch expressions!
|
|
inline std::string toString(TypeId ty)
|
|
{
|
|
return toString(ty, ToStringOptions{});
|
|
}
|
|
inline std::string toString(TypePackId ty)
|
|
{
|
|
return toString(ty, ToStringOptions{});
|
|
}
|
|
|
|
std::string toString(const TypeVar& tv, const ToStringOptions& opts = {});
|
|
std::string toString(const TypePackVar& tp, const ToStringOptions& opts = {});
|
|
|
|
std::string toStringNamedFunction(const std::string& prefix, const FunctionTypeVar& ftv, ToStringOptions opts = {});
|
|
|
|
// It could be useful to see the text representation of a type during a debugging session instead of exploring the content of the class
|
|
// These functions will dump the type to stdout and can be evaluated in Watch/Immediate windows or as gdb/lldb expression
|
|
void dump(TypeId ty);
|
|
void dump(TypePackId ty);
|
|
|
|
std::string generateName(size_t n);
|
|
|
|
} // namespace Luau
|