Skip to content

Commit af266d5

Browse files
committed
v0.12.3+luau663
1 parent 71451d2 commit af266d5

28 files changed

+484
-325
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "luau0-src"
3-
version = "0.12.2+luau660"
3+
version = "0.12.3+luau663"
44
authors = ["Aleksandr Orlenko <[email protected]>"]
55
edition = "2021"
66
repository = "https://github.com/khvzak/luau-src-rs"

luau/Ast/include/Luau/Allocator.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class Allocator
3838
{
3939
Page* next;
4040

41-
char data[8192];
41+
alignas(8) char data[8192];
4242
};
4343

4444
Page* root;

luau/Ast/include/Luau/Ast.h

+56-34
Original file line numberDiff line numberDiff line change
@@ -120,20 +120,6 @@ struct AstTypeList
120120

121121
using AstArgumentName = std::pair<AstName, Location>; // TODO: remove and replace when we get a common struct for this pair instead of AstName
122122

123-
struct AstGenericType
124-
{
125-
AstName name;
126-
Location location;
127-
AstType* defaultValue = nullptr;
128-
};
129-
130-
struct AstGenericTypePack
131-
{
132-
AstName name;
133-
Location location;
134-
AstTypePack* defaultValue = nullptr;
135-
};
136-
137123
extern int gAstRttiIndex;
138124

139125
template<typename T>
@@ -253,6 +239,32 @@ class AstStat : public AstNode
253239
bool hasSemicolon;
254240
};
255241

242+
class AstGenericType : public AstNode
243+
{
244+
public:
245+
LUAU_RTTI(AstGenericType)
246+
247+
explicit AstGenericType(const Location& location, AstName name, AstType* defaultValue = nullptr);
248+
249+
void visit(AstVisitor* visitor) override;
250+
251+
AstName name;
252+
AstType* defaultValue = nullptr;
253+
};
254+
255+
class AstGenericTypePack : public AstNode
256+
{
257+
public:
258+
LUAU_RTTI(AstGenericTypePack)
259+
260+
explicit AstGenericTypePack(const Location& location, AstName name, AstTypePack* defaultValue = nullptr);
261+
262+
void visit(AstVisitor* visitor) override;
263+
264+
AstName name;
265+
AstTypePack* defaultValue = nullptr;
266+
};
267+
256268
class AstExprGroup : public AstExpr
257269
{
258270
public:
@@ -424,8 +436,8 @@ class AstExprFunction : public AstExpr
424436
AstExprFunction(
425437
const Location& location,
426438
const AstArray<AstAttr*>& attributes,
427-
const AstArray<AstGenericType>& generics,
428-
const AstArray<AstGenericTypePack>& genericPacks,
439+
const AstArray<AstGenericType*>& generics,
440+
const AstArray<AstGenericTypePack*>& genericPacks,
429441
AstLocal* self,
430442
const AstArray<AstLocal*>& args,
431443
bool vararg,
@@ -443,8 +455,8 @@ class AstExprFunction : public AstExpr
443455
bool hasNativeAttribute() const;
444456

445457
AstArray<AstAttr*> attributes;
446-
AstArray<AstGenericType> generics;
447-
AstArray<AstGenericTypePack> genericPacks;
458+
AstArray<AstGenericType*> generics;
459+
AstArray<AstGenericTypePack*> genericPacks;
448460
AstLocal* self;
449461
AstArray<AstLocal*> args;
450462
std::optional<AstTypeList> returnAnnotation;
@@ -857,8 +869,8 @@ class AstStatTypeAlias : public AstStat
857869
const Location& location,
858870
const AstName& name,
859871
const Location& nameLocation,
860-
const AstArray<AstGenericType>& generics,
861-
const AstArray<AstGenericTypePack>& genericPacks,
872+
const AstArray<AstGenericType*>& generics,
873+
const AstArray<AstGenericTypePack*>& genericPacks,
862874
AstType* type,
863875
bool exported
864876
);
@@ -867,8 +879,8 @@ class AstStatTypeAlias : public AstStat
867879

868880
AstName name;
869881
Location nameLocation;
870-
AstArray<AstGenericType> generics;
871-
AstArray<AstGenericTypePack> genericPacks;
882+
AstArray<AstGenericType*> generics;
883+
AstArray<AstGenericTypePack*> genericPacks;
872884
AstType* type;
873885
bool exported;
874886
};
@@ -911,8 +923,8 @@ class AstStatDeclareFunction : public AstStat
911923
const Location& location,
912924
const AstName& name,
913925
const Location& nameLocation,
914-
const AstArray<AstGenericType>& generics,
915-
const AstArray<AstGenericTypePack>& genericPacks,
926+
const AstArray<AstGenericType*>& generics,
927+
const AstArray<AstGenericTypePack*>& genericPacks,
916928
const AstTypeList& params,
917929
const AstArray<AstArgumentName>& paramNames,
918930
bool vararg,
@@ -925,8 +937,8 @@ class AstStatDeclareFunction : public AstStat
925937
const AstArray<AstAttr*>& attributes,
926938
const AstName& name,
927939
const Location& nameLocation,
928-
const AstArray<AstGenericType>& generics,
929-
const AstArray<AstGenericTypePack>& genericPacks,
940+
const AstArray<AstGenericType*>& generics,
941+
const AstArray<AstGenericTypePack*>& genericPacks,
930942
const AstTypeList& params,
931943
const AstArray<AstArgumentName>& paramNames,
932944
bool vararg,
@@ -942,8 +954,8 @@ class AstStatDeclareFunction : public AstStat
942954
AstArray<AstAttr*> attributes;
943955
AstName name;
944956
Location nameLocation;
945-
AstArray<AstGenericType> generics;
946-
AstArray<AstGenericTypePack> genericPacks;
957+
AstArray<AstGenericType*> generics;
958+
AstArray<AstGenericTypePack*> genericPacks;
947959
AstTypeList params;
948960
AstArray<AstArgumentName> paramNames;
949961
bool vararg = false;
@@ -1074,8 +1086,8 @@ class AstTypeFunction : public AstType
10741086

10751087
AstTypeFunction(
10761088
const Location& location,
1077-
const AstArray<AstGenericType>& generics,
1078-
const AstArray<AstGenericTypePack>& genericPacks,
1089+
const AstArray<AstGenericType*>& generics,
1090+
const AstArray<AstGenericTypePack*>& genericPacks,
10791091
const AstTypeList& argTypes,
10801092
const AstArray<std::optional<AstArgumentName>>& argNames,
10811093
const AstTypeList& returnTypes
@@ -1084,8 +1096,8 @@ class AstTypeFunction : public AstType
10841096
AstTypeFunction(
10851097
const Location& location,
10861098
const AstArray<AstAttr*>& attributes,
1087-
const AstArray<AstGenericType>& generics,
1088-
const AstArray<AstGenericTypePack>& genericPacks,
1099+
const AstArray<AstGenericType*>& generics,
1100+
const AstArray<AstGenericTypePack*>& genericPacks,
10891101
const AstTypeList& argTypes,
10901102
const AstArray<std::optional<AstArgumentName>>& argNames,
10911103
const AstTypeList& returnTypes
@@ -1096,8 +1108,8 @@ class AstTypeFunction : public AstType
10961108
bool isCheckedFunction() const;
10971109

10981110
AstArray<AstAttr*> attributes;
1099-
AstArray<AstGenericType> generics;
1100-
AstArray<AstGenericTypePack> genericPacks;
1111+
AstArray<AstGenericType*> generics;
1112+
AstArray<AstGenericTypePack*> genericPacks;
11011113
AstTypeList argTypes;
11021114
AstArray<std::optional<AstArgumentName>> argNames;
11031115
AstTypeList returnTypes;
@@ -1276,6 +1288,16 @@ class AstVisitor
12761288
return visit(static_cast<AstNode*>(node));
12771289
}
12781290

1291+
virtual bool visit(class AstGenericType* node)
1292+
{
1293+
return visit(static_cast<AstNode*>(node));
1294+
}
1295+
1296+
virtual bool visit(class AstGenericTypePack* node)
1297+
{
1298+
return visit(static_cast<AstNode*>(node));
1299+
}
1300+
12791301
virtual bool visit(class AstExpr* node)
12801302
{
12811303
return visit(static_cast<AstNode*>(node));

luau/Ast/include/Luau/Cst.h

+51
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,16 @@ class CstExprOp : public CstNode
141141
Position opPosition;
142142
};
143143

144+
class CstExprTypeAssertion : public CstNode
145+
{
146+
public:
147+
LUAU_CST_RTTI(CstExprTypeAssertion)
148+
149+
explicit CstExprTypeAssertion(Position opPosition);
150+
151+
Position opPosition;
152+
};
153+
144154
class CstExprIfElse : public CstNode
145155
{
146156
public:
@@ -260,6 +270,47 @@ class CstStatLocalFunction : public CstNode
260270
Position functionKeywordPosition;
261271
};
262272

273+
class CstGenericType : public CstNode
274+
{
275+
public:
276+
LUAU_CST_RTTI(CstGenericType)
277+
278+
CstGenericType(std::optional<Position> defaultEqualsPosition);
279+
280+
std::optional<Position> defaultEqualsPosition;
281+
};
282+
283+
class CstGenericTypePack : public CstNode
284+
{
285+
public:
286+
LUAU_CST_RTTI(CstGenericTypePack)
287+
288+
CstGenericTypePack(Position ellipsisPosition, std::optional<Position> defaultEqualsPosition);
289+
290+
Position ellipsisPosition;
291+
std::optional<Position> defaultEqualsPosition;
292+
};
293+
294+
class CstStatTypeAlias : public CstNode
295+
{
296+
public:
297+
LUAU_CST_RTTI(CstStatTypeAlias)
298+
299+
CstStatTypeAlias(
300+
Position typeKeywordPosition,
301+
Position genericsOpenPosition,
302+
AstArray<Position> genericsCommaPositions,
303+
Position genericsClosePosition,
304+
Position equalsPosition
305+
);
306+
307+
Position typeKeywordPosition;
308+
Position genericsOpenPosition;
309+
AstArray<Position> genericsCommaPositions;
310+
Position genericsClosePosition;
311+
Position equalsPosition;
312+
};
313+
263314
class CstTypeReference : public CstNode
264315
{
265316
public:

luau/Ast/include/Luau/Lexer.h

+5
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,11 @@ class Lexer
187187
static bool fixupQuotedString(std::string& data);
188188
static void fixupMultilineString(std::string& data);
189189

190+
unsigned int getOffset() const
191+
{
192+
return offset;
193+
}
194+
190195
private:
191196
char peekch() const;
192197
char peekch(unsigned int lookahead) const;

luau/Ast/include/Luau/ParseResult.h

+13
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,19 @@ struct ParseResult
7171
CstNodeMap cstNodeMap{nullptr};
7272
};
7373

74+
struct ParseExprResult
75+
{
76+
AstExpr* expr;
77+
size_t lines = 0;
78+
79+
std::vector<HotComment> hotcomments;
80+
std::vector<ParseError> errors;
81+
82+
std::vector<Comment> commentLocations;
83+
84+
CstNodeMap cstNodeMap{nullptr};
85+
};
86+
7487
static constexpr const char* kParseNameError = "%error-id%";
7588

7689
} // namespace Luau

luau/Ast/include/Luau/Parser.h

+19-6
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ class Parser
6363
ParseOptions options = ParseOptions()
6464
);
6565

66+
static ParseExprResult parseExpr(
67+
const char* buffer,
68+
std::size_t bufferSize,
69+
AstNameTable& names,
70+
Allocator& allocator,
71+
ParseOptions options = ParseOptions()
72+
);
73+
6674
private:
6775
struct Name;
6876
struct Binding;
@@ -144,7 +152,7 @@ class Parser
144152
AstStat* parseReturn();
145153

146154
// type Name `=' Type
147-
AstStat* parseTypeAlias(const Location& start, bool exported);
155+
AstStat* parseTypeAlias(const Location& start, bool exported, Position typeKeywordPosition);
148156

149157
// type function Name ... end
150158
AstStat* parseTypeFunction(const Location& start, bool exported);
@@ -222,8 +230,8 @@ class Parser
222230
AstType* parseFunctionTypeTail(
223231
const Lexeme& begin,
224232
const AstArray<AstAttr*>& attributes,
225-
AstArray<AstGenericType> generics,
226-
AstArray<AstGenericTypePack> genericPacks,
233+
AstArray<AstGenericType*> generics,
234+
AstArray<AstGenericTypePack*> genericPacks,
227235
AstArray<AstType*> params,
228236
AstArray<std::optional<AstArgumentName>> paramNames,
229237
AstTypePack* varargAnnotation
@@ -294,7 +302,12 @@ class Parser
294302
Name parseIndexName(const char* context, const Position& previous);
295303

296304
// `<' namelist `>'
297-
std::pair<AstArray<AstGenericType>, AstArray<AstGenericTypePack>> parseGenericTypeList(bool withDefaultValues);
305+
std::pair<AstArray<AstGenericType*>, AstArray<AstGenericTypePack*>> parseGenericTypeList(
306+
bool withDefaultValues,
307+
Position* openPosition = nullptr,
308+
TempVector<Position>* commaPositions = nullptr,
309+
Position* closePosition = nullptr
310+
);
298311

299312
// `<' Type[, ...] `>'
300313
AstArray<AstTypeOrPack> parseTypeParams(
@@ -474,8 +487,8 @@ class Parser
474487
std::vector<AstExprTable::Item> scratchItem;
475488
std::vector<CstExprTable::Item> scratchCstItem;
476489
std::vector<AstArgumentName> scratchArgName;
477-
std::vector<AstGenericType> scratchGenericTypes;
478-
std::vector<AstGenericTypePack> scratchGenericTypePacks;
490+
std::vector<AstGenericType*> scratchGenericTypes;
491+
std::vector<AstGenericTypePack*> scratchGenericTypePacks;
479492
std::vector<std::optional<AstArgumentName>> scratchOptArgName;
480493
std::vector<Position> scratchPosition;
481494
std::string scratchData;

0 commit comments

Comments
 (0)