Fixed parsing of interface section behaviors

This commit is contained in:
Sasha Koshka 2022-08-24 00:25:52 -04:00
parent 1f88b54eaa
commit 39f8d7e4ac
2 changed files with 10 additions and 9 deletions

View File

@ -9,7 +9,7 @@ data pv helloText:String "Hello, world!"
# this is a struct definition # this is a struct definition
objt ro Greeter:Obj objt ro Greeter:Obj
wr text:String "Hi." rw text:String "Hi."
# this is a function # this is a function
func ro main func ro main

View File

@ -34,7 +34,7 @@ func (parser *ParsingOperation) parseFaceSection () (
if err != nil { return } if err != nil { return }
section.inherits = parser.token.Value().(string) section.inherits = parser.token.Value().(string)
if err != nil { return } if err != nil { return }
err = parser.expect(lexer.TokenKindNewline) err = parser.nextToken(lexer.TokenKindNewline)
if err != nil { return } if err != nil { return }
err = parser.nextToken() err = parser.nextToken()
if err != nil { return } if err != nil { return }
@ -46,8 +46,6 @@ func (parser *ParsingOperation) parseFaceSection () (
if parser.token.Value().(int) != 1 { return } if parser.token.Value().(int) != 1 { return }
// parse behavior // parse behavior
err = parser.nextToken(lexer.TokenKindName)
if err != nil { return }
behaviorBeginning := parser.token.Location() behaviorBeginning := parser.token.Location()
var behavior FaceBehavior var behavior FaceBehavior
behavior, err = parser.parseFaceBehavior() behavior, err = parser.parseFaceBehavior()
@ -74,18 +72,21 @@ func (parser *ParsingOperation) parseFaceBehavior () (
behavior FaceBehavior, behavior FaceBehavior,
err error, err error,
) { ) {
err = parser.expect(lexer.TokenKindIndent)
if err != nil { return }
// get name // get name
err = parser.nextToken(lexer.TokenKindName) err = parser.nextToken(lexer.TokenKindName)
if err != nil { return } if err != nil { return }
behavior.name = parser.token.Value().(string) behavior.name = parser.token.Value().(string)
for { err = parser.nextToken(lexer.TokenKindNewline)
err = parser.nextToken(lexer.TokenKindNewline) if err != nil { return }
if err != nil { return } err = parser.nextToken()
if err != nil { return }
for {
// if we've left the block, stop parsing // if we've left the block, stop parsing
err = parser.nextToken()
if err != nil { return }
if !parser.token.Is(lexer.TokenKindIndent) { return } if !parser.token.Is(lexer.TokenKindIndent) { return }
if parser.token.Value().(int) != 2 { return } if parser.token.Value().(int) != 2 { return }