mirror of
https://github.com/luau-lang/luau.git
synced 2024-12-12 13:00:38 +00:00
551a43c424
- Updated Roblox copyright to 2023 - Floor division operator `//` (implements #832) - Autocomplete now shows `end` within `do` blocks - Restore BraceType when using `Lexer::lookahead` (fixes #1019) # New typechecker - Subtyping tests between metatables and tables - Subtyping tests between string singletons and tables - Subtyping tests for class types # Native codegen - Fixed macOS test failure (wrong spill restore offset) - Fixed clobbering of non-volatile xmm registers on Windows - Fixed wrong storage location of SSA reg spills - Implemented A64 support for add/sub extended - Eliminated zextReg from A64 lowering - Remove identical table slot lookups - Propagate values from predecessor into the linear block - Disabled reuse slot optimization - Keep `LuaNode::val` check for nil when optimizing `CHECK_SLOT_MATCH` - Implemented IR translation of `table.insert` builtin - Fixed mmap error handling on macOS/Linux # Tooling - Used `|` as a column separator instead of `+` in `bench.py` - Added a `table.sort` micro-benchmark - Switched `libprotobuf-mutator` to a less problematic version
386 lines
6.4 KiB
Protocol Buffer
386 lines
6.4 KiB
Protocol Buffer
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
syntax = "proto2";
|
|
package luau;
|
|
|
|
message Expr {
|
|
oneof expr_oneof {
|
|
ExprGroup group = 1;
|
|
ExprConstantNil nil = 2;
|
|
ExprConstantBool bool = 3;
|
|
ExprConstantNumber number = 4;
|
|
ExprConstantString string = 5;
|
|
ExprLocal local = 6;
|
|
ExprGlobal global = 7;
|
|
ExprVarargs varargs = 8;
|
|
ExprCall call = 9;
|
|
ExprIndexName index_name = 10;
|
|
ExprIndexExpr index_expr = 11;
|
|
ExprFunction function = 12;
|
|
ExprTable table = 13;
|
|
ExprUnary unary = 14;
|
|
ExprBinary binary = 15;
|
|
ExprIfElse ifelse = 16;
|
|
ExprInterpString interpstring = 17;
|
|
}
|
|
}
|
|
|
|
message ExprPrefix {
|
|
oneof expr_oneof {
|
|
ExprGroup group = 1;
|
|
ExprLocal local = 2;
|
|
ExprGlobal global = 3;
|
|
ExprCall call = 4;
|
|
ExprIndexName index_name = 5;
|
|
ExprIndexExpr index_expr = 6;
|
|
}
|
|
}
|
|
|
|
message Local {
|
|
required int32 name = 1;
|
|
}
|
|
|
|
message Typename {
|
|
required int32 index = 1;
|
|
}
|
|
|
|
message Name {
|
|
oneof name_oneof {
|
|
int32 builtin = 1;
|
|
int32 custom = 2;
|
|
}
|
|
}
|
|
|
|
message ExprGroup {
|
|
required Expr expr = 1;
|
|
}
|
|
|
|
message ExprConstantNil {
|
|
}
|
|
|
|
message ExprConstantBool {
|
|
required bool val = 1;
|
|
}
|
|
|
|
message ExprConstantNumber {
|
|
required int32 val = 1;
|
|
}
|
|
|
|
message ExprConstantString {
|
|
required string val = 1;
|
|
}
|
|
|
|
message ExprLocal {
|
|
required Local var = 1;
|
|
}
|
|
|
|
message ExprGlobal {
|
|
required Name name = 1;
|
|
}
|
|
|
|
message ExprVarargs {
|
|
}
|
|
|
|
message ExprCall {
|
|
required ExprPrefix func = 1;
|
|
required bool self = 2;
|
|
repeated Expr args = 3;
|
|
}
|
|
|
|
message ExprIndexName {
|
|
required ExprPrefix expr = 1;
|
|
required Name index = 2;
|
|
}
|
|
|
|
message ExprIndexExpr {
|
|
required ExprPrefix expr = 1;
|
|
required Expr index = 2;
|
|
}
|
|
|
|
message ExprFunction {
|
|
repeated Typename generics = 1;
|
|
repeated Typename genericpacks = 2;
|
|
repeated Local args = 3;
|
|
required bool vararg = 4;
|
|
required StatBlock body = 5;
|
|
repeated Type types = 6;
|
|
repeated Type rettypes = 7;
|
|
}
|
|
|
|
message TableItem {
|
|
oneof item_oneof {
|
|
Name key_name = 1;
|
|
Expr key_expr = 2;
|
|
}
|
|
required Expr value = 3;
|
|
}
|
|
|
|
message ExprTable {
|
|
repeated TableItem items = 1;
|
|
}
|
|
|
|
message ExprUnary {
|
|
enum Op {
|
|
Not = 0;
|
|
Minus = 1;
|
|
Len = 2;
|
|
}
|
|
|
|
required Op op = 1;
|
|
required Expr expr = 2;
|
|
}
|
|
|
|
message ExprBinary {
|
|
enum Op {
|
|
Add = 0;
|
|
Sub = 1;
|
|
Mul = 2;
|
|
Div = 3;
|
|
FloorDiv = 4;
|
|
Mod = 5;
|
|
Pow = 6;
|
|
Concat = 7;
|
|
CompareNe = 8;
|
|
CompareEq = 9;
|
|
CompareLt = 10;
|
|
CompareLe = 11;
|
|
CompareGt = 12;
|
|
CompareGe = 13;
|
|
And = 14;
|
|
Or = 15;
|
|
}
|
|
|
|
required Op op = 1;
|
|
required Expr left = 2;
|
|
required Expr right = 3;
|
|
}
|
|
|
|
message ExprIfElse {
|
|
required Expr cond = 1;
|
|
required Expr then = 2;
|
|
oneof else_oneof {
|
|
Expr else = 3;
|
|
ExprIfElse elseif = 4;
|
|
}
|
|
}
|
|
|
|
message ExprInterpString {
|
|
repeated Expr parts = 1;
|
|
}
|
|
|
|
message LValue {
|
|
oneof lvalue_oneof {
|
|
ExprLocal local = 1;
|
|
ExprGlobal global = 2;
|
|
ExprIndexName index_name = 3;
|
|
ExprIndexExpr index_expr = 4;
|
|
}
|
|
}
|
|
|
|
message Stat {
|
|
oneof stat_oneof {
|
|
StatBlock block = 1;
|
|
StatIf if = 2;
|
|
StatWhile while = 3;
|
|
StatRepeat repeat = 4;
|
|
StatBreak break = 5;
|
|
StatContinue continue = 6;
|
|
StatReturn return = 7;
|
|
StatCall call = 8;
|
|
StatLocal local = 9;
|
|
StatFor for = 10;
|
|
StatForIn for_in = 11;
|
|
StatAssign assign = 12;
|
|
StatCompoundAssign compound_assign = 13;
|
|
StatFunction function = 14;
|
|
StatLocalFunction local_function = 15;
|
|
StatTypeAlias type_alias = 16;
|
|
StatRequireIntoLocalHelper require_into_local = 17;
|
|
}
|
|
}
|
|
|
|
message StatBlock {
|
|
repeated Stat body = 1;
|
|
}
|
|
|
|
message StatIf {
|
|
required Expr cond = 1;
|
|
required StatBlock then = 2;
|
|
oneof else_oneof {
|
|
StatBlock else = 3;
|
|
StatIf elseif = 4;
|
|
}
|
|
}
|
|
|
|
message StatWhile {
|
|
required Expr cond = 1;
|
|
required StatBlock body = 2;
|
|
}
|
|
|
|
message StatRepeat {
|
|
required StatBlock body = 1;
|
|
required Expr cond = 2;
|
|
}
|
|
|
|
message StatBreak {
|
|
}
|
|
|
|
message StatContinue {
|
|
}
|
|
|
|
message StatReturn {
|
|
repeated Expr list = 1;
|
|
}
|
|
|
|
message StatCall {
|
|
required ExprCall expr = 1;
|
|
}
|
|
|
|
message StatLocal {
|
|
repeated Local vars = 1;
|
|
repeated Expr values = 2;
|
|
repeated Type types = 3;
|
|
}
|
|
|
|
message StatFor {
|
|
required Local var = 1;
|
|
required Expr from = 2;
|
|
required Expr to = 3;
|
|
optional Expr step = 4;
|
|
required StatBlock body = 5;
|
|
}
|
|
|
|
message StatForIn {
|
|
repeated Local vars = 1;
|
|
repeated Expr values = 2;
|
|
required StatBlock body = 5;
|
|
}
|
|
|
|
message StatAssign {
|
|
repeated LValue vars = 1;
|
|
repeated Expr values = 2;
|
|
}
|
|
|
|
message StatCompoundAssign {
|
|
enum Op {
|
|
Add = 0;
|
|
Sub = 1;
|
|
Mul = 2;
|
|
Div = 3;
|
|
Mod = 4;
|
|
Pow = 5;
|
|
Concat = 6;
|
|
};
|
|
|
|
required Op op = 1;
|
|
required LValue var = 2;
|
|
required Expr value = 3;
|
|
}
|
|
|
|
message StatFunction {
|
|
required LValue var = 1;
|
|
required ExprFunction func = 2;
|
|
required bool self = 3;
|
|
}
|
|
|
|
message StatLocalFunction {
|
|
required Local var = 1;
|
|
required ExprFunction func = 2;
|
|
}
|
|
|
|
message StatTypeAlias {
|
|
required bool export = 1;
|
|
required Typename name = 2;
|
|
required Type type = 3;
|
|
repeated Typename generics = 4;
|
|
repeated Typename genericpacks = 5;
|
|
}
|
|
|
|
message StatRequireIntoLocalHelper {
|
|
required Local var = 1;
|
|
required int32 modulenum = 2;
|
|
}
|
|
|
|
message Type {
|
|
oneof type_oneof {
|
|
TypePrimitive primitive = 1;
|
|
TypeLiteral literal = 2;
|
|
TypeTable table = 3;
|
|
TypeFunction function = 4;
|
|
TypeTypeof typeof = 5;
|
|
TypeUnion union = 6;
|
|
TypeIntersection intersection = 7;
|
|
TypeClass class = 8;
|
|
TypeRef ref = 9;
|
|
TypeBoolean boolean = 10;
|
|
TypeString string = 11;
|
|
}
|
|
}
|
|
|
|
message TypePrimitive {
|
|
required int32 kind = 1;
|
|
}
|
|
|
|
message TypeLiteral {
|
|
required Typename name = 1;
|
|
repeated Type generics = 2;
|
|
repeated Typename genericpacks = 3;
|
|
}
|
|
|
|
message TypeTableItem {
|
|
required Name key = 1;
|
|
required Type type = 2;
|
|
}
|
|
|
|
message TypeTableIndexer {
|
|
required Type key = 1;
|
|
required Type value = 2;
|
|
}
|
|
|
|
message TypeTable {
|
|
repeated TypeTableItem items = 1;
|
|
optional TypeTableIndexer indexer = 2;
|
|
}
|
|
|
|
message TypeFunction {
|
|
repeated Typename generics = 1;
|
|
repeated Typename genericpacks = 2;
|
|
repeated Type args = 3;
|
|
repeated Type rets = 4;
|
|
// TODO: vararg?
|
|
}
|
|
|
|
message TypeTypeof {
|
|
required Expr expr = 1;
|
|
}
|
|
|
|
message TypeUnion {
|
|
required Type left = 1;
|
|
required Type right = 2;
|
|
}
|
|
|
|
message TypeIntersection {
|
|
required Type left = 1;
|
|
required Type right = 2;
|
|
}
|
|
|
|
message TypeClass {
|
|
required int32 kind = 1;
|
|
}
|
|
|
|
message TypeRef {
|
|
required Local prefix = 1;
|
|
required Typename index = 2;
|
|
}
|
|
|
|
message TypeBoolean {
|
|
required bool val = 1;
|
|
}
|
|
|
|
message TypeString {
|
|
required string val = 1;
|
|
}
|
|
|
|
message ModuleSet {
|
|
optional StatBlock module = 1;
|
|
required StatBlock program = 2;
|
|
}
|