From b878017b817e42c4906c3c96ddcb8d844af40a08 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Sat, 20 Aug 2022 15:22:25 -0400 Subject: [PATCH] The last item of object sections is now saved. --- parser/objt.go | 80 +++++++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 33 deletions(-) diff --git a/parser/objt.go b/parser/objt.go index da7fffe..f384cff 100644 --- a/parser/objt.go +++ b/parser/objt.go @@ -42,6 +42,7 @@ func (parser *ParsingOperation) parseObjtSection () ( // parse members err = parser.parseObjtMembers(section) + if err != nil { return } if len(section.members) == 0 { infoerr.NewError ( @@ -52,6 +53,8 @@ func (parser *ParsingOperation) parseObjtSection () ( return } +// parseObjtMembers parses a list of members for an object section. Indentation +// level is assumed. func (parser *ParsingOperation) parseObjtMembers ( into *ObjtSection, ) ( @@ -61,45 +64,56 @@ func (parser *ParsingOperation) parseObjtMembers ( // if we've left the block, stop parsing if !parser.token.Is(lexer.TokenKindIndent) { return } if parser.token.Value().(int) != 1 { return } - - // get permission - err = parser.nextToken(lexer.TokenKindPermission) + + // add member to object section + var member ObjtMember + member, err = parser.parseObjtMember() + into.members[member.name] = member if err != nil { return } - member := ObjtMember { } - member.permission = parser.token.Value().(types.Permission) + } +} - // get name - err = parser.nextToken(lexer.TokenKindName) +// parseObjtMember parses a single member of an object section. Indentation +// level is assumed. +func (parser *ParsingOperation) parseObjtMember () ( + member ObjtMember, + err error, +) { + // get permission + err = parser.nextToken(lexer.TokenKindPermission) + if err != nil { return } + member.permission = parser.token.Value().(types.Permission) + + // get name + err = parser.nextToken(lexer.TokenKindName) + if err != nil { return } + member.name = parser.token.Value().(string) + + // get type + err = parser.nextToken(lexer.TokenKindColon) + if err != nil { return } + err = parser.nextToken() + if err != nil { return } + member.what, err = parser.parseType() + if err != nil { return } + + // parse default value + if parser.token.Is(lexer.TokenKindNewline) { + err = parser.nextToken() if err != nil { return } - member.name = parser.token.Value().(string) - // get type - err = parser.nextToken(lexer.TokenKindColon) + member.defaultValue, + err = parser.parseInitializationValues(1) + if err != nil { return } + } else { + member.defaultValue, err = parser.parseArgument() + if err != nil { return } + + err = parser.expect(lexer.TokenKindNewline) if err != nil { return } err = parser.nextToken() if err != nil { return } - member.what, err = parser.parseType() - if err != nil { return } - - // parse default value - if parser.token.Is(lexer.TokenKindNewline) { - err = parser.nextToken() - if err != nil { return } - - member.defaultValue, - err = parser.parseInitializationValues(1) - if err != nil { return } - } else { - member.defaultValue, err = parser.parseArgument() - if err != nil { return } - - err = parser.expect(lexer.TokenKindNewline) - if err != nil { return } - err = parser.nextToken() - if err != nil { return } - } - - // add member to object section - into.members[member.name] = member } + + return }