diff --git a/example/src/main.nub b/example/src/main.nub index 13707b6..1b0f580 100644 --- a/example/src/main.nub +++ b/example/src/main.nub @@ -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" } diff --git a/src/compiler/NubLang/Parsing/Parser.cs b/src/compiler/NubLang/Parsing/Parser.cs index ed3a464..079ed15 100644 --- a/src/compiler/NubLang/Parsing/Parser.cs +++ b/src/compiler/NubLang/Parsing/Parser.cs @@ -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.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 ParseStructInitializerBody() + { Dictionary 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()