Skip to content

Commit ba32e7c

Browse files
committed
Bump Luau to 0.681
1 parent 6350274 commit ba32e7c

File tree

2 files changed

+40
-29
lines changed

2 files changed

+40
-29
lines changed

luau/Ast/src/Parser.cpp

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ LUAU_FASTINTVARIABLE(LuauParseErrorLimit, 100)
2020
LUAU_FASTFLAGVARIABLE(LuauSolverV2)
2121
LUAU_FASTFLAGVARIABLE(LuauDeclareExternType)
2222
LUAU_FASTFLAGVARIABLE(LuauParseStringIndexer)
23-
LUAU_FASTFLAGVARIABLE(LuauStoreLocalAnnotationColonPositions)
2423
LUAU_FASTFLAGVARIABLE(LuauCSTForReturnTypeFunctionTail)
2524
LUAU_FASTFLAGVARIABLE(LuauParseAttributeFixUninit)
2625
LUAU_DYNAMIC_FASTFLAGVARIABLE(DebugLuauReportReturnTypeVariadicWithTypeSuffix, false)
@@ -691,11 +690,7 @@ AstStat* Parser::parseFor()
691690
allocator.alloc<AstStatForIn>(Location(start, end), copy(vars), copy(values), body, hasIn, inLocation, hasDo, matchDo.location);
692691
if (options.storeCstData)
693692
{
694-
if (FFlag::LuauStoreLocalAnnotationColonPositions)
695-
cstNodeMap[node] =
696-
allocator.alloc<CstStatForIn>(extractAnnotationColonPositions(names), varsCommaPosition, copy(valuesCommaPositions));
697-
else
698-
cstNodeMap[node] = allocator.alloc<CstStatForIn>(AstArray<Position>{}, varsCommaPosition, copy(valuesCommaPositions));
693+
cstNodeMap[node] = allocator.alloc<CstStatForIn>(extractAnnotationColonPositions(names), varsCommaPosition, copy(valuesCommaPositions));
699694
}
700695
return node;
701696
}
@@ -1019,11 +1014,7 @@ AstStat* Parser::parseLocal(const AstArray<AstAttr*>& attributes)
10191014
AstStatLocal* node = allocator.alloc<AstStatLocal>(Location(start, end), copy(vars), copy(values), equalsSignLocation);
10201015
if (options.storeCstData)
10211016
{
1022-
if (FFlag::LuauStoreLocalAnnotationColonPositions)
1023-
cstNodeMap[node] =
1024-
allocator.alloc<CstStatLocal>(extractAnnotationColonPositions(names), varsCommaPositions, copy(valuesCommaPositions));
1025-
else
1026-
cstNodeMap[node] = allocator.alloc<CstStatLocal>(AstArray<Position>{}, varsCommaPositions, copy(valuesCommaPositions));
1017+
cstNodeMap[node] = allocator.alloc<CstStatLocal>(extractAnnotationColonPositions(names), varsCommaPositions, copy(valuesCommaPositions));
10271018
}
10281019

10291020
return node;
@@ -1608,17 +1599,11 @@ std::pair<AstExprFunction*, AstLocal*> Parser::parseFunctionBody(
16081599

16091600
if (lexer.current().type != ')')
16101601
{
1611-
if (FFlag::LuauStoreLocalAnnotationColonPositions)
1612-
{
1613-
if (cstNode)
1614-
std::tie(vararg, varargLocation, varargAnnotation) =
1615-
parseBindingList(args, /* allowDot3= */ true, &cstNode->argsCommaPositions, nullptr, &cstNode->varargAnnotationColonPosition);
1616-
else
1617-
std::tie(vararg, varargLocation, varargAnnotation) = parseBindingList(args, /* allowDot3= */ true);
1618-
}
1619-
else
1602+
if (cstNode)
16201603
std::tie(vararg, varargLocation, varargAnnotation) =
1621-
parseBindingList(args, /* allowDot3= */ true, cstNode ? &cstNode->argsCommaPositions : nullptr);
1604+
parseBindingList(args, /* allowDot3= */ true, &cstNode->argsCommaPositions, nullptr, &cstNode->varargAnnotationColonPosition);
1605+
else
1606+
std::tie(vararg, varargLocation, varargAnnotation) = parseBindingList(args, /* allowDot3= */ true);
16221607
}
16231608

16241609
std::optional<Location> argLocation;
@@ -1676,8 +1661,7 @@ std::pair<AstExprFunction*, AstLocal*> Parser::parseFunctionBody(
16761661
if (options.storeCstData)
16771662
{
16781663
cstNode->functionKeywordPosition = matchFunction.location.begin;
1679-
if (FFlag::LuauStoreLocalAnnotationColonPositions)
1680-
cstNode->argsAnnotationColonPositions = extractAnnotationColonPositions(args);
1664+
cstNode->argsAnnotationColonPositions = extractAnnotationColonPositions(args);
16811665
cstNodeMap[node] = cstNode;
16821666
}
16831667

@@ -1716,15 +1700,14 @@ Parser::Binding Parser::parseBinding()
17161700
Position colonPosition = lexer.current().location.begin;
17171701
AstType* annotation = parseOptionalType();
17181702

1719-
if (FFlag::LuauStoreLocalAnnotationColonPositions && options.storeCstData)
1703+
if (options.storeCstData)
17201704
return Binding(*name, annotation, colonPosition);
17211705
else
17221706
return Binding(*name, annotation);
17231707
}
17241708

17251709
AstArray<Position> Parser::extractAnnotationColonPositions(const TempVector<Binding>& bindings)
17261710
{
1727-
LUAU_ASSERT(FFlag::LuauStoreLocalAnnotationColonPositions);
17281711
TempVector<Position> annotationColonPositions(scratchPosition);
17291712
for (size_t i = 0; i < bindings.size(); ++i)
17301713
annotationColonPositions.push_back(bindings[i].colonPosition);
@@ -1755,7 +1738,7 @@ std::tuple<bool, Location, AstTypePack*> Parser::parseBindingList(
17551738
AstTypePack* tailAnnotation = nullptr;
17561739
if (lexer.current().type == ':')
17571740
{
1758-
if (FFlag::LuauStoreLocalAnnotationColonPositions && varargAnnotationColonPosition)
1741+
if (varargAnnotationColonPosition)
17591742
*varargAnnotationColonPosition = lexer.current().location.begin;
17601743

17611744
nextLexeme();

luau/CodeGen/src/CodeAllocator.cpp

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include <string.h>
77

8+
LUAU_FASTFLAGVARIABLE(LuauCodeGenAllocationCheck)
9+
810
#if defined(_WIN32)
911

1012
#ifndef WIN32_LEAN_AND_MEAN
@@ -52,7 +54,7 @@ static void freePagesImpl(uint8_t* mem, size_t size)
5254
CODEGEN_ASSERT(!"failed to deallocate block memory");
5355
}
5456

55-
static void makePagesExecutable(uint8_t* mem, size_t size)
57+
static void makePagesExecutable_DEPRECATED(uint8_t* mem, size_t size)
5658
{
5759
CODEGEN_ASSERT((uintptr_t(mem) & (kPageSize - 1)) == 0);
5860
CODEGEN_ASSERT(size == alignToPageSize(size));
@@ -62,6 +64,15 @@ static void makePagesExecutable(uint8_t* mem, size_t size)
6264
CODEGEN_ASSERT(!"Failed to change page protection");
6365
}
6466

67+
[[nodiscard]] static bool makePagesExecutable(uint8_t* mem, size_t size)
68+
{
69+
CODEGEN_ASSERT((uintptr_t(mem) & (kPageSize - 1)) == 0);
70+
CODEGEN_ASSERT(size == alignToPageSize(size));
71+
72+
DWORD oldProtect;
73+
return VirtualProtect(mem, size, PAGE_EXECUTE_READ, &oldProtect) != 0;
74+
}
75+
6576
static void flushInstructionCache(uint8_t* mem, size_t size)
6677
{
6778
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
@@ -91,7 +102,7 @@ static void freePagesImpl(uint8_t* mem, size_t size)
91102
CODEGEN_ASSERT(!"Failed to deallocate block memory");
92103
}
93104

94-
static void makePagesExecutable(uint8_t* mem, size_t size)
105+
static void makePagesExecutable_DEPRECATED(uint8_t* mem, size_t size)
95106
{
96107
CODEGEN_ASSERT((uintptr_t(mem) & (kPageSize - 1)) == 0);
97108
CODEGEN_ASSERT(size == alignToPageSize(size));
@@ -100,6 +111,14 @@ static void makePagesExecutable(uint8_t* mem, size_t size)
100111
CODEGEN_ASSERT(!"Failed to change page protection");
101112
}
102113

114+
[[nodiscard]] static bool makePagesExecutable(uint8_t* mem, size_t size)
115+
{
116+
CODEGEN_ASSERT((uintptr_t(mem) & (kPageSize - 1)) == 0);
117+
CODEGEN_ASSERT(size == alignToPageSize(size));
118+
119+
return mprotect(mem, size, PROT_READ | PROT_EXEC) == 0;
120+
}
121+
103122
static void flushInstructionCache(uint8_t* mem, size_t size)
104123
{
105124
#ifdef __APPLE__
@@ -184,7 +203,16 @@ bool CodeAllocator::allocate(
184203

185204
size_t pageAlignedSize = alignToPageSize(startOffset + totalSize);
186205

187-
makePagesExecutable(blockPos, pageAlignedSize);
206+
if (FFlag::LuauCodeGenAllocationCheck)
207+
{
208+
if (!makePagesExecutable(blockPos, pageAlignedSize))
209+
return false;
210+
}
211+
else
212+
{
213+
makePagesExecutable_DEPRECATED(blockPos, pageAlignedSize);
214+
}
215+
188216
flushInstructionCache(blockPos + codeOffset, codeSize);
189217

190218
result = blockPos + startOffset;

0 commit comments

Comments
 (0)