mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 14:25:44 +08:00
61766a692c
* Adds a currently unused x86-64 assembler as a prerequisite for possible future JIT compilation * Fix a bug in table iteration (closes Possible table iteration bug #504) * Improved warning method when function is used as a type * Fix a bug with unsandboxed iteration with pairs() * Type of coroutine.status() is now a union of value types * Bytecode output for tests/debugging now has labels * Improvements to loop unrolling cost estimation * Report errors when the key obviously doesn't exist in the table
54 lines
1.5 KiB
C++
54 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
|
|
#pragma once
|
|
|
|
#include "Luau/Substitution.h"
|
|
#include "Luau/TypeVar.h"
|
|
#include "Luau/Unifiable.h"
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
struct TypeArena;
|
|
struct TxnLog;
|
|
|
|
// A substitution which replaces generic types in a given set by free types.
|
|
struct ReplaceGenerics : Substitution
|
|
{
|
|
ReplaceGenerics(
|
|
const TxnLog* log, TypeArena* arena, TypeLevel level, const std::vector<TypeId>& generics, const std::vector<TypePackId>& genericPacks)
|
|
: Substitution(log, arena)
|
|
, level(level)
|
|
, generics(generics)
|
|
, genericPacks(genericPacks)
|
|
{
|
|
}
|
|
|
|
TypeLevel level;
|
|
std::vector<TypeId> generics;
|
|
std::vector<TypePackId> genericPacks;
|
|
bool ignoreChildren(TypeId ty) override;
|
|
bool isDirty(TypeId ty) override;
|
|
bool isDirty(TypePackId tp) override;
|
|
TypeId clean(TypeId ty) override;
|
|
TypePackId clean(TypePackId tp) override;
|
|
};
|
|
|
|
// A substitution which replaces generic functions by monomorphic functions
|
|
struct Instantiation : Substitution
|
|
{
|
|
Instantiation(const TxnLog* log, TypeArena* arena, TypeLevel level)
|
|
: Substitution(log, arena)
|
|
, level(level)
|
|
{
|
|
}
|
|
|
|
TypeLevel level;
|
|
bool ignoreChildren(TypeId ty) override;
|
|
bool isDirty(TypeId ty) override;
|
|
bool isDirty(TypePackId tp) override;
|
|
TypeId clean(TypeId ty) override;
|
|
TypePackId clean(TypePackId tp) override;
|
|
};
|
|
|
|
} // namespace Luau
|