Skip to content

Commit 0b35d5b

Browse files
committed
Bump Luau to 0.666
1 parent af266d5 commit 0b35d5b

File tree

12 files changed

+452
-100
lines changed

12 files changed

+452
-100
lines changed

luau/Ast/include/Luau/Ast.h

+14
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,16 @@ class AstTypeTypeof : public AstType
11271127
AstExpr* expr;
11281128
};
11291129

1130+
class AstTypeOptional : public AstType
1131+
{
1132+
public:
1133+
LUAU_RTTI(AstTypeOptional)
1134+
1135+
AstTypeOptional(const Location& location);
1136+
1137+
void visit(AstVisitor* visitor) override;
1138+
};
1139+
11301140
class AstTypeUnion : public AstType
11311141
{
11321142
public:
@@ -1488,6 +1498,10 @@ class AstVisitor
14881498
{
14891499
return visit(static_cast<AstType*>(node));
14901500
}
1501+
virtual bool visit(class AstTypeOptional* node)
1502+
{
1503+
return visit(static_cast<AstType*>(node));
1504+
}
14911505
virtual bool visit(class AstTypeUnion* node)
14921506
{
14931507
return visit(static_cast<AstType*>(node));

luau/Ast/include/Luau/Cst.h

+73
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,20 @@ class CstExprIndexExpr : public CstNode
105105
Position closeBracketPosition;
106106
};
107107

108+
class CstExprFunction : public CstNode
109+
{
110+
public:
111+
LUAU_CST_RTTI(CstExprFunction)
112+
113+
CstExprFunction();
114+
115+
Position openGenericsPosition{0,0};
116+
AstArray<Position> genericsCommaPositions;
117+
Position closeGenericsPosition{0,0};
118+
AstArray<Position> argsCommaPositions;
119+
Position returnSpecifierPosition{0,0};
120+
};
121+
108122
class CstExprTable : public CstNode
109123
{
110124
public:
@@ -311,6 +325,17 @@ class CstStatTypeAlias : public CstNode
311325
Position equalsPosition;
312326
};
313327

328+
class CstStatTypeFunction : public CstNode
329+
{
330+
public:
331+
LUAU_CST_RTTI(CstStatTypeFunction)
332+
333+
CstStatTypeFunction(Position typeKeywordPosition, Position functionKeywordPosition);
334+
335+
Position typeKeywordPosition;
336+
Position functionKeywordPosition;
337+
};
338+
314339
class CstTypeReference : public CstNode
315340
{
316341
public:
@@ -359,6 +384,32 @@ class CstTypeTable : public CstNode
359384
bool isArray = false;
360385
};
361386

387+
class CstTypeFunction : public CstNode
388+
{
389+
public:
390+
LUAU_CST_RTTI(CstTypeFunction)
391+
392+
CstTypeFunction(
393+
Position openGenericsPosition,
394+
AstArray<Position> genericsCommaPositions,
395+
Position closeGenericsPosition,
396+
Position openArgsPosition,
397+
AstArray<std::optional<Position>> argumentNameColonPositions,
398+
AstArray<Position> argumentsCommaPositions,
399+
Position closeArgsPosition,
400+
Position returnArrowPosition
401+
);
402+
403+
Position openGenericsPosition;
404+
AstArray<Position> genericsCommaPositions;
405+
Position closeGenericsPosition;
406+
Position openArgsPosition;
407+
AstArray<std::optional<Position>> argumentNameColonPositions;
408+
AstArray<Position> argumentsCommaPositions;
409+
Position closeArgsPosition;
410+
Position returnArrowPosition;
411+
};
412+
362413
class CstTypeTypeof : public CstNode
363414
{
364415
public:
@@ -382,4 +433,26 @@ class CstTypeSingletonString : public CstNode
382433
unsigned int blockDepth;
383434
};
384435

436+
class CstTypePackExplicit : public CstNode
437+
{
438+
public:
439+
LUAU_CST_RTTI(CstTypePackExplicit)
440+
441+
CstTypePackExplicit(Position openParenthesesPosition, Position closeParenthesesPosition, AstArray<Position> commaPositions);
442+
443+
Position openParenthesesPosition;
444+
Position closeParenthesesPosition;
445+
AstArray<Position> commaPositions;
446+
};
447+
448+
class CstTypePackGeneric : public CstNode
449+
{
450+
public:
451+
LUAU_CST_RTTI(CstTypePackGeneric)
452+
453+
explicit CstTypePackGeneric(Position ellipsisPosition);
454+
455+
Position ellipsisPosition;
456+
};
457+
385458
} // namespace Luau

luau/Ast/include/Luau/Parser.h

+12-5
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ class Parser
155155
AstStat* parseTypeAlias(const Location& start, bool exported, Position typeKeywordPosition);
156156

157157
// type function Name ... end
158-
AstStat* parseTypeFunction(const Location& start, bool exported);
158+
AstStat* parseTypeFunction(const Location& start, bool exported, Position typeKeywordPosition);
159159

160160
AstDeclaredClassProp parseDeclaredClassMethod();
161161

@@ -192,7 +192,8 @@ class Parser
192192
std::tuple<bool, Location, AstTypePack*> parseBindingList(
193193
TempVector<Binding>& result,
194194
bool allowDot3 = false,
195-
TempVector<Position>* commaPositions = nullptr
195+
AstArray<Position>* commaPositions = nullptr,
196+
std::optional<Position> initialCommaPosition = std::nullopt
196197
);
197198

198199
AstType* parseOptionalType();
@@ -209,9 +210,14 @@ class Parser
209210
// | `(' [TypeList] `)' `->` ReturnType
210211

211212
// Returns the variadic annotation, if it exists.
212-
AstTypePack* parseTypeList(TempVector<AstType*>& result, TempVector<std::optional<AstArgumentName>>& resultNames);
213+
AstTypePack* parseTypeList(
214+
TempVector<AstType*>& result,
215+
TempVector<std::optional<AstArgumentName>>& resultNames,
216+
TempVector<Position>* commaPositions = nullptr,
217+
TempVector<std::optional<Position>>* nameColonPositions = nullptr
218+
);
213219

214-
std::optional<AstTypeList> parseOptionalReturnType();
220+
std::optional<AstTypeList> parseOptionalReturnType(Position* returnSpecifierPosition = nullptr);
215221
std::pair<Location, AstTypeList> parseReturnType();
216222

217223
struct TableIndexerResult
@@ -305,7 +311,7 @@ class Parser
305311
std::pair<AstArray<AstGenericType*>, AstArray<AstGenericTypePack*>> parseGenericTypeList(
306312
bool withDefaultValues,
307313
Position* openPosition = nullptr,
308-
TempVector<Position>* commaPositions = nullptr,
314+
AstArray<Position>* commaPositions = nullptr,
309315
Position* closePosition = nullptr
310316
);
311317

@@ -491,6 +497,7 @@ class Parser
491497
std::vector<AstGenericTypePack*> scratchGenericTypePacks;
492498
std::vector<std::optional<AstArgumentName>> scratchOptArgName;
493499
std::vector<Position> scratchPosition;
500+
std::vector<std::optional<Position>> scratchOptPosition;
494501
std::string scratchData;
495502

496503
CstNodeMap cstNodeMap;

luau/Ast/src/Ast.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -1069,6 +1069,16 @@ void AstTypeTypeof::visit(AstVisitor* visitor)
10691069
expr->visit(visitor);
10701070
}
10711071

1072+
AstTypeOptional::AstTypeOptional(const Location& location)
1073+
: AstType(ClassIndex(), location)
1074+
{
1075+
}
1076+
1077+
void AstTypeOptional::visit(AstVisitor* visitor)
1078+
{
1079+
visitor->visit(this);
1080+
}
1081+
10721082
AstTypeUnion::AstTypeUnion(const Location& location, const AstArray<AstType*>& types)
10731083
: AstType(ClassIndex(), location)
10741084
, types(types)

luau/Ast/src/Cst.cpp

+47
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ CstExprIndexExpr::CstExprIndexExpr(Position openBracketPosition, Position closeB
3838
{
3939
}
4040

41+
CstExprFunction::CstExprFunction() : CstNode(CstClassIndex())
42+
{
43+
}
44+
4145
CstExprTable::CstExprTable(const AstArray<Item>& items)
4246
: CstNode(CstClassIndex())
4347
, items(items)
@@ -160,6 +164,13 @@ CstStatTypeAlias::CstStatTypeAlias(
160164
{
161165
}
162166

167+
CstStatTypeFunction::CstStatTypeFunction(Position typeKeywordPosition, Position functionKeywordPosition)
168+
: CstNode(CstClassIndex())
169+
, typeKeywordPosition(typeKeywordPosition)
170+
, functionKeywordPosition(functionKeywordPosition)
171+
{
172+
}
173+
163174
CstTypeReference::CstTypeReference(
164175
std::optional<Position> prefixPointPosition,
165176
Position openParametersPosition,
@@ -181,6 +192,28 @@ CstTypeTable::CstTypeTable(AstArray<Item> items, bool isArray)
181192
{
182193
}
183194

195+
CstTypeFunction::CstTypeFunction(
196+
Position openGenericsPosition,
197+
AstArray<Position> genericsCommaPositions,
198+
Position closeGenericsPosition,
199+
Position openArgsPosition,
200+
AstArray<std::optional<Position>> argumentNameColonPositions,
201+
AstArray<Position> argumentsCommaPositions,
202+
Position closeArgsPosition,
203+
Position returnArrowPosition
204+
)
205+
: CstNode(CstClassIndex())
206+
, openGenericsPosition(openGenericsPosition)
207+
, genericsCommaPositions(genericsCommaPositions)
208+
, closeGenericsPosition(closeGenericsPosition)
209+
, openArgsPosition(openArgsPosition)
210+
, argumentNameColonPositions(argumentNameColonPositions)
211+
, argumentsCommaPositions(argumentsCommaPositions)
212+
, closeArgsPosition(closeArgsPosition)
213+
, returnArrowPosition(returnArrowPosition)
214+
{
215+
}
216+
184217
CstTypeTypeof::CstTypeTypeof(Position openPosition, Position closePosition)
185218
: CstNode(CstClassIndex())
186219
, openPosition(openPosition)
@@ -197,4 +230,18 @@ CstTypeSingletonString::CstTypeSingletonString(AstArray<char> sourceString, CstE
197230
LUAU_ASSERT(quoteStyle != CstExprConstantString::QuotedInterp);
198231
}
199232

233+
CstTypePackExplicit::CstTypePackExplicit(Position openParenthesesPosition, Position closeParenthesesPosition, AstArray<Position> commaPositions)
234+
: CstNode(CstClassIndex())
235+
, openParenthesesPosition(openParenthesesPosition)
236+
, closeParenthesesPosition(closeParenthesesPosition)
237+
, commaPositions(commaPositions)
238+
{
239+
}
240+
241+
CstTypePackGeneric::CstTypePackGeneric(Position ellipsisPosition)
242+
: CstNode(CstClassIndex())
243+
, ellipsisPosition(ellipsisPosition)
244+
{
245+
}
246+
200247
} // namespace Luau

luau/Ast/src/Lexer.cpp

+4-10
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88

99
#include <limits.h>
1010

11-
LUAU_FASTFLAGVARIABLE(LexerResumesFromPosition2)
12-
LUAU_FASTFLAGVARIABLE(LexerFixInterpStringStart)
13-
1411
namespace Luau
1512
{
1613

@@ -342,12 +339,9 @@ Lexer::Lexer(const char* buffer, size_t bufferSize, AstNameTable& names, Positio
342339
: buffer(buffer)
343340
, bufferSize(bufferSize)
344341
, offset(0)
345-
, line(FFlag::LexerResumesFromPosition2 ? startPosition.line : 0)
346-
, lineOffset(FFlag::LexerResumesFromPosition2 ? 0u - startPosition.column : 0)
347-
, lexeme(
348-
(FFlag::LexerResumesFromPosition2 ? Location(Position(startPosition.line, startPosition.column), 0) : Location(Position(0, 0), 0)),
349-
Lexeme::Eof
350-
)
342+
, line(startPosition.line)
343+
, lineOffset(0u - startPosition.column)
344+
, lexeme((Location(Position(startPosition.line, startPosition.column), 0)), Lexeme::Eof)
351345
, names(names)
352346
, skipComments(false)
353347
, readNames(true)
@@ -793,7 +787,7 @@ Lexeme Lexer::readNext()
793787
return Lexeme(Location(start, 1), '}');
794788
}
795789

796-
return readInterpolatedStringSection(FFlag::LexerFixInterpStringStart ? start : position(), Lexeme::InterpStringMid, Lexeme::InterpStringEnd);
790+
return readInterpolatedStringSection(start, Lexeme::InterpStringMid, Lexeme::InterpStringEnd);
797791
}
798792

799793
case '=':

0 commit comments

Comments
 (0)