Skip to content

Commit 2e06bf3

Browse files
committed
v0.20.3+luau723
1 parent 7f00619 commit 2e06bf3

28 files changed

Lines changed: 1444 additions & 850 deletions

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "luau0-src"
3-
version = "0.20.2+luau722"
3+
version = "0.20.3+luau723"
44
authors = ["Aleksandr Orlenko <zxteam@protonmail.com>"]
55
edition = "2024"
66
repository = "https://github.com/mlua-rs/luau-src-rs"

‎luau/Ast/include/Luau/Ast.h‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ struct AstLocal
7575
size_t functionDepth;
7676
size_t loopDepth;
7777
bool isConst;
78+
// exported is only a property set after construction
79+
bool isExported = false;
7880

7981
AstType* annotation;
8082

@@ -844,7 +846,9 @@ class AstStatLocal : public AstStat
844846

845847
AstArray<AstLocal*> vars;
846848
AstArray<AstExpr*> values;
847-
bool isConst;
849+
850+
bool isConst = false;
851+
bool isExported = false;
848852

849853
std::optional<Location> equalsSignLocation;
850854
};

‎luau/Ast/include/Luau/Cst.h‎

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -104,24 +104,24 @@ class CstExprConstantString : public CstNode
104104
// Shared between the expression and call nodes
105105
struct CstTypeInstantiation
106106
{
107-
Position leftArrow1Position = {0, 0};
108-
Position leftArrow2Position = {0, 0};
107+
Position leftArrow1Position = Position::missing();
108+
Position leftArrow2Position = Position::missing();
109109

110110
AstArray<Position> commaPositions = {};
111111

112-
Position rightArrow1Position = {0, 0};
113-
Position rightArrow2Position = {0, 0};
112+
Position rightArrow1Position = Position::missing();
113+
Position rightArrow2Position = Position::missing();
114114
};
115115

116116
class CstExprCall : public CstNode
117117
{
118118
public:
119119
LUAU_CST_RTTI(CstExprCall)
120120

121-
CstExprCall(std::optional<Position> openParens, std::optional<Position> closeParens, AstArray<Position> commaPositions);
121+
CstExprCall(Position openParens, Position closeParens, AstArray<Position> commaPositions);
122122

123-
std::optional<Position> openParens;
124-
std::optional<Position> closeParens;
123+
Position openParens;
124+
Position closeParens;
125125
AstArray<Position> commaPositions;
126126
CstTypeInstantiation* explicitTypes = nullptr;
127127
};
@@ -144,14 +144,14 @@ class CstExprFunction : public CstNode
144144

145145
CstExprFunction();
146146

147-
Position functionKeywordPosition{0, 0};
148-
Position openGenericsPosition{0, 0};
147+
Position functionKeywordPosition = Position::missing();
148+
Position openGenericsPosition = Position::missing();
149149
AstArray<Position> genericsCommaPositions;
150-
Position closeGenericsPosition{0, 0};
150+
Position closeGenericsPosition = Position::missing();
151151
AstArray<Position> argsAnnotationColonPositions;
152152
AstArray<Position> argsCommaPositions;
153-
Position varargAnnotationColonPosition{0, 0};
154-
Position returnSpecifierPosition{0, 0};
153+
Position varargAnnotationColonPosition = Position::missing();
154+
Position returnSpecifierPosition = Position::missing();
155155
};
156156

157157
class CstExprTable : public CstNode
@@ -163,15 +163,16 @@ class CstExprTable : public CstNode
163163
{
164164
Comma,
165165
Semicolon,
166+
Missing
166167
};
167168

168169
struct Item
169170
{
170-
std::optional<Position> indexerOpenPosition; // '[', only if Kind == General
171-
std::optional<Position> indexerClosePosition; // ']', only if Kind == General
172-
std::optional<Position> equalsPosition; // only if Kind != List
173-
std::optional<Separator> separator; // may be missing for last Item
174-
std::optional<Position> separatorPosition;
171+
Position indexerOpenPosition; // '[', only if Kind == General
172+
Position indexerClosePosition; // ']', only if Kind == General
173+
Position equalsPosition; // only if Kind != List
174+
Separator separator; // may be missing for last Item
175+
Position separatorPosition;
175176
};
176177

177178
explicit CstExprTable(const AstArray<Item>& items);
@@ -281,12 +282,12 @@ class CstStatFor : public CstNode
281282
public:
282283
LUAU_CST_RTTI(CstStatFor)
283284

284-
CstStatFor(Position annotationColonPosition, Position equalsPosition, Position endCommaPosition, std::optional<Position> stepCommaPosition);
285+
CstStatFor(Position annotationColonPosition, Position equalsPosition, Position endCommaPosition, Position stepCommaPosition);
285286

286287
Position annotationColonPosition;
287288
Position equalsPosition;
288289
Position endCommaPosition;
289-
std::optional<Position> stepCommaPosition;
290+
Position stepCommaPosition;
290291
};
291292

292293
class CstStatForIn : public CstNode
@@ -349,20 +350,20 @@ class CstGenericType : public CstNode
349350
public:
350351
LUAU_CST_RTTI(CstGenericType)
351352

352-
CstGenericType(std::optional<Position> defaultEqualsPosition);
353+
CstGenericType(Position defaultEqualsPosition);
353354

354-
std::optional<Position> defaultEqualsPosition;
355+
Position defaultEqualsPosition;
355356
};
356357

357358
class CstGenericTypePack : public CstNode
358359
{
359360
public:
360361
LUAU_CST_RTTI(CstGenericTypePack)
361362

362-
CstGenericTypePack(Position ellipsisPosition, std::optional<Position> defaultEqualsPosition);
363+
CstGenericTypePack(Position ellipsisPosition, Position defaultEqualsPosition);
363364

364365
Position ellipsisPosition;
365-
std::optional<Position> defaultEqualsPosition;
366+
Position defaultEqualsPosition;
366367
};
367368

368369
class CstStatTypeAlias : public CstNode
@@ -402,13 +403,13 @@ class CstTypeReference : public CstNode
402403
LUAU_CST_RTTI(CstTypeReference)
403404

404405
CstTypeReference(
405-
std::optional<Position> prefixPointPosition,
406+
Position prefixPointPosition,
406407
Position openParametersPosition,
407408
AstArray<Position> parametersCommaPositions,
408409
Position closeParametersPosition
409410
);
410411

411-
std::optional<Position> prefixPointPosition;
412+
Position prefixPointPosition;
412413
Position openParametersPosition;
413414
AstArray<Position> parametersCommaPositions;
414415
Position closeParametersPosition;
@@ -432,8 +433,8 @@ class CstTypeTable : public CstNode
432433
Position indexerOpenPosition; // '[', only if Kind != Property
433434
Position indexerClosePosition; // ']' only if Kind != Property
434435
Position colonPosition;
435-
std::optional<CstExprTable::Separator> separator; // may be missing for last Item
436-
std::optional<Position> separatorPosition;
436+
CstExprTable::Separator separator; // may be missing for last Item
437+
Position separatorPosition;
437438

438439
CstExprConstantString* stringInfo = nullptr; // only if Kind == StringProperty
439440
Position stringPosition{0, 0}; // only if Kind == StringProperty
@@ -455,7 +456,7 @@ class CstTypeFunction : public CstNode
455456
AstArray<Position> genericsCommaPositions,
456457
Position closeGenericsPosition,
457458
Position openArgsPosition,
458-
AstArray<std::optional<Position>> argumentNameColonPositions,
459+
AstArray<Position> argumentNameColonPositions,
459460
AstArray<Position> argumentsCommaPositions,
460461
Position closeArgsPosition,
461462
Position returnArrowPosition
@@ -465,7 +466,7 @@ class CstTypeFunction : public CstNode
465466
AstArray<Position> genericsCommaPositions;
466467
Position closeGenericsPosition;
467468
Position openArgsPosition;
468-
AstArray<std::optional<Position>> argumentNameColonPositions;
469+
AstArray<Position> argumentNameColonPositions;
469470
AstArray<Position> argumentsCommaPositions;
470471
Position closeArgsPosition;
471472
Position returnArrowPosition;
@@ -487,9 +488,9 @@ class CstTypeUnion : public CstNode
487488
public:
488489
LUAU_CST_RTTI(CstTypeUnion)
489490

490-
CstTypeUnion(std::optional<Position> leadingPosition, AstArray<Position> separatorPositions);
491+
CstTypeUnion(Position leadingPosition, AstArray<Position> separatorPositions);
491492

492-
std::optional<Position> leadingPosition;
493+
Position leadingPosition;
493494
AstArray<Position> separatorPositions;
494495
};
495496

@@ -498,9 +499,9 @@ class CstTypeIntersection : public CstNode
498499
public:
499500
LUAU_CST_RTTI(CstTypeIntersection)
500501

501-
explicit CstTypeIntersection(std::optional<Position> leadingPosition, AstArray<Position> separatorPositions);
502+
explicit CstTypeIntersection(Position leadingPosition, AstArray<Position> separatorPositions);
502503

503-
std::optional<Position> leadingPosition;
504+
Position leadingPosition;
504505
AstArray<Position> separatorPositions;
505506
};
506507

@@ -534,7 +535,6 @@ class CstTypePackExplicit : public CstNode
534535
explicit CstTypePackExplicit();
535536
explicit CstTypePackExplicit(Position openParenthesesPosition, Position closeParenthesesPosition, AstArray<Position> commaPositions);
536537

537-
bool hasParentheses;
538538
Position openParenthesesPosition;
539539
Position closeParenthesesPosition;
540540
AstArray<Position> commaPositions;

‎luau/Ast/include/Luau/Parser.h‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#include "Luau/Lexer.h"
66
#include "Luau/ParseOptions.h"
77
#include "Luau/ParseResult.h"
8-
#include "Luau/StringUtils.h"
98
#include "Luau/DenseHash.h"
109
#include "Luau/Common.h"
1110
#include "Luau/Cst.h"
@@ -194,6 +193,8 @@ class Parser
194193
// varlist `=' explist
195194
AstStat* parseAssignment(AstExpr* initial);
196195

196+
AstStat* parseExportValue(const Location& start, const Position keywordPosition, const AstArray<AstAttr*>& attributes);
197+
197198
// var [`+=' | `-=' | `*=' | `/=' | `%=' | `^=' | `..='] exp
198199
AstStat* parseCompoundAssignment(AstExpr* initial, AstExprBinary::Op op);
199200

@@ -246,7 +247,7 @@ class Parser
246247
TempVector<AstType*>& result,
247248
TempVector<std::optional<AstArgumentName>>& resultNames,
248249
TempVector<Position>* commaPositions = nullptr,
249-
TempVector<std::optional<Position>>* nameColonPositions = nullptr
250+
TempVector<Position>* nameColonPositions = nullptr
250251
);
251252

252253
AstTypePack* parseOptionalReturnType(Position* returnSpecifierPosition = nullptr);
@@ -308,6 +309,7 @@ class Parser
308309

309310
// primaryexp -> prefixexp { `.' NAME | `[' exp `]' | TypeInstantiation | `:' NAME [TypeInstantiation] funcargs | funcargs }
310311
AstExpr* parsePrimaryExpr(bool asStatement);
312+
AstExpr* parseIndexExpr(Position start, AstExpr* expr);
311313
AstExpr* parseMethodCall(Position start, AstExpr* expr);
312314

313315
// asexp -> simpleexp [`::' Type]
@@ -320,7 +322,7 @@ class Parser
320322
// args ::= `(' [explist] `)' | tableconstructor | String
321323
AstExpr* parseFunctionArgs(AstExpr* func, bool self);
322324

323-
std::optional<CstExprTable::Separator> tableSeparator();
325+
CstExprTable::Separator tableSeparator();
324326

325327
// tableconstructor ::= `{' [fieldlist] `}'
326328
// fieldlist ::= field {fieldsep field} [fieldsep]
@@ -423,6 +425,7 @@ class Parser
423425
...
424426
) LUAU_PRINTF_ATTR(5, 6);
425427
AstExprError* reportExprError(const Location& location, const AstArray<AstExpr*>& expressions, const char* format, ...) LUAU_PRINTF_ATTR(4, 5);
428+
AstExprError* reportLValueError(AstExpr* expr);
426429
AstTypeError* reportTypeError(const Location& location, const AstArray<AstType*>& types, const char* format, ...) LUAU_PRINTF_ATTR(4, 5);
427430
// `parseErrorLocation` is associated with the parser error
428431
// `astErrorLocation` is associated with the AstTypeError created
@@ -522,6 +525,9 @@ class Parser
522525

523526
std::vector<unsigned int> matchRecoveryStopOnToken;
524527

528+
DenseHashMap<AstName, Location> declaredExportBindings;
529+
bool hasModuleReturn = false;
530+
525531
std::vector<AstAttr*> scratchAttr;
526532
std::vector<AstStat*> scratchStat;
527533
std::vector<AstArray<char>> scratchString;
@@ -545,7 +551,7 @@ class Parser
545551
std::vector<AstGenericTypePack*> scratchGenericTypePacks;
546552
std::vector<std::optional<AstArgumentName>> scratchOptArgName;
547553
std::vector<Position> scratchPosition;
548-
std::vector<std::optional<Position>> scratchOptPosition;
554+
std::vector<Position> scratchPosition2;
549555
std::string scratchData;
550556

551557
CstNodeMap cstNodeMap;

‎luau/Ast/src/Cst.cpp‎

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ CstExprConstantInteger::CstExprConstantInteger(const AstArray<char>& value)
3939
{
4040
}
4141

42-
CstExprCall::CstExprCall(std::optional<Position> openParens, std::optional<Position> closeParens, AstArray<Position> commaPositions)
42+
CstExprCall::CstExprCall(Position openParens, Position closeParens, AstArray<Position> commaPositions)
4343
: CstNode(CstClassIndex())
4444
, openParens(openParens)
4545
, closeParens(closeParens)
@@ -129,12 +129,7 @@ CstStatLocal::CstStatLocal(
129129
{
130130
}
131131

132-
CstStatFor::CstStatFor(
133-
Position annotationColonPosition,
134-
Position equalsPosition,
135-
Position endCommaPosition,
136-
std::optional<Position> stepCommaPosition
137-
)
132+
CstStatFor::CstStatFor(Position annotationColonPosition, Position equalsPosition, Position endCommaPosition, Position stepCommaPosition)
138133
: CstNode(CstClassIndex())
139134
, annotationColonPosition(annotationColonPosition)
140135
, equalsPosition(equalsPosition)
@@ -182,13 +177,13 @@ CstStatLocalFunction::CstStatLocalFunction(Position localKeywordPosition, Positi
182177
{
183178
}
184179

185-
CstGenericType::CstGenericType(std::optional<Position> defaultEqualsPosition)
180+
CstGenericType::CstGenericType(Position defaultEqualsPosition)
186181
: CstNode(CstClassIndex())
187182
, defaultEqualsPosition(defaultEqualsPosition)
188183
{
189184
}
190185

191-
CstGenericTypePack::CstGenericTypePack(Position ellipsisPosition, std::optional<Position> defaultEqualsPosition)
186+
CstGenericTypePack::CstGenericTypePack(Position ellipsisPosition, Position defaultEqualsPosition)
192187
: CstNode(CstClassIndex())
193188
, ellipsisPosition(ellipsisPosition)
194189
, defaultEqualsPosition(defaultEqualsPosition)
@@ -219,7 +214,7 @@ CstStatTypeFunction::CstStatTypeFunction(Position typeKeywordPosition, Position
219214
}
220215

221216
CstTypeReference::CstTypeReference(
222-
std::optional<Position> prefixPointPosition,
217+
Position prefixPointPosition,
223218
Position openParametersPosition,
224219
AstArray<Position> parametersCommaPositions,
225220
Position closeParametersPosition
@@ -244,7 +239,7 @@ CstTypeFunction::CstTypeFunction(
244239
AstArray<Position> genericsCommaPositions,
245240
Position closeGenericsPosition,
246241
Position openArgsPosition,
247-
AstArray<std::optional<Position>> argumentNameColonPositions,
242+
AstArray<Position> argumentNameColonPositions,
248243
AstArray<Position> argumentsCommaPositions,
249244
Position closeArgsPosition,
250245
Position returnArrowPosition
@@ -268,14 +263,14 @@ CstTypeTypeof::CstTypeTypeof(Position openPosition, Position closePosition)
268263
{
269264
}
270265

271-
CstTypeUnion::CstTypeUnion(std::optional<Position> leadingPosition, AstArray<Position> separatorPositions)
266+
CstTypeUnion::CstTypeUnion(Position leadingPosition, AstArray<Position> separatorPositions)
272267
: CstNode(CstClassIndex())
273268
, leadingPosition(leadingPosition)
274269
, separatorPositions(separatorPositions)
275270
{
276271
}
277272

278-
CstTypeIntersection::CstTypeIntersection(std::optional<Position> leadingPosition, AstArray<Position> separatorPositions)
273+
CstTypeIntersection::CstTypeIntersection(Position leadingPosition, AstArray<Position> separatorPositions)
279274
: CstNode(CstClassIndex())
280275
, leadingPosition(leadingPosition)
281276
, separatorPositions(separatorPositions)
@@ -300,16 +295,14 @@ CstTypeGroup::CstTypeGroup(Position closePosition)
300295

301296
CstTypePackExplicit::CstTypePackExplicit()
302297
: CstNode(CstClassIndex())
303-
, hasParentheses(false)
304-
, openParenthesesPosition(Position{0, 0})
305-
, closeParenthesesPosition(Position{0, 0})
298+
, openParenthesesPosition(Position::missing())
299+
, closeParenthesesPosition(Position::missing())
306300
, commaPositions({})
307301
{
308302
}
309303

310304
CstTypePackExplicit::CstTypePackExplicit(Position openParenthesesPosition, Position closeParenthesesPosition, AstArray<Position> commaPositions)
311305
: CstNode(CstClassIndex())
312-
, hasParentheses(true)
313306
, openParenthesesPosition(openParenthesesPosition)
314307
, closeParenthesesPosition(closeParenthesesPosition)
315308
, commaPositions(commaPositions)

0 commit comments

Comments
 (0)