Anonymous struct initializer syntax
This commit is contained in:
@@ -15,8 +15,8 @@ struct Human
|
||||
|
||||
func main(args: []cstring): i64
|
||||
{
|
||||
let x: Human = struct {
|
||||
name = struct {
|
||||
let x: Human = {
|
||||
name = {
|
||||
first = "bob"
|
||||
last = "the builder"
|
||||
}
|
||||
|
||||
@@ -455,6 +455,7 @@ public sealed class Parser
|
||||
Symbol.Minus => new UnaryExpressionSyntax(GetTokens(startIndex), UnaryOperatorSyntax.Negate, ParsePrimaryExpression()),
|
||||
Symbol.Bang => new UnaryExpressionSyntax(GetTokens(startIndex), UnaryOperatorSyntax.Invert, ParsePrimaryExpression()),
|
||||
Symbol.OpenBracket => ParseArrayInitializer(startIndex),
|
||||
Symbol.OpenBrace => new StructInitializerSyntax(GetTokens(startIndex), Optional<TypeSyntax>.Empty(), ParseStructInitializerBody()),
|
||||
Symbol.Struct => ParseStructInitializer(startIndex),
|
||||
_ => throw new ParseException(Diagnostic
|
||||
.Error($"Unexpected symbol '{symbolToken.Symbol}' in expression")
|
||||
@@ -570,6 +571,13 @@ public sealed class Parser
|
||||
ExpectSymbol(Symbol.OpenBrace);
|
||||
}
|
||||
|
||||
var initializers = ParseStructInitializerBody();
|
||||
|
||||
return new StructInitializerSyntax(GetTokens(startIndex), type, initializers);
|
||||
}
|
||||
|
||||
private Dictionary<string, ExpressionSyntax> ParseStructInitializerBody()
|
||||
{
|
||||
Dictionary<string, ExpressionSyntax> initializers = [];
|
||||
while (!TryExpectSymbol(Symbol.CloseBrace))
|
||||
{
|
||||
@@ -579,7 +587,7 @@ public sealed class Parser
|
||||
initializers.Add(name, value);
|
||||
}
|
||||
|
||||
return new StructInitializerSyntax(GetTokens(startIndex), type, initializers);
|
||||
return initializers;
|
||||
}
|
||||
|
||||
private BlockSyntax ParseBlock()
|
||||
|
||||
Reference in New Issue
Block a user