Added untested dereference parsing

This commit is contained in:
Sasha Koshka 2022-10-11 13:31:17 -04:00
parent fae8bedfa9
commit a7588f7416
2 changed files with 23 additions and 3 deletions

View File

@ -1,12 +1,32 @@
package parser
// import "git.tebibyte.media/arf/arf/lexer"
import "git.tebibyte.media/arf/arf/lexer"
// import "git.tebibyte.media/arf/arf/infoerr"
func (parser *ParsingOperation) parseDereference () (
dereference Dereference,
err error,
) {
// TODO
err = parser.expect(lexer.TokenKindLBrace)
if err != nil { return }
dereference.location = parser.token.Location()
// parse the value we are dereferencing
err = parser.nextToken(validArgumentStartTokens...)
if err != nil { return }
dereference.argument, err = parser.parseArgument()
if err != nil { return }
// if there is an offset, parse it
err = parser.expect(lexer.TokenKindUInt, lexer.TokenKindLBrace)
if err != nil { return }
if parser.token.Is(lexer.TokenKindUInt) {
dereference.offset = parser.token.Value().(uint64)
}
err = parser.nextToken(lexer.TokenKindLBrace)
if err != nil { return }
err = parser.nextToken()
if err != nil { return }
return
}

View File

@ -224,7 +224,7 @@ type Dereference struct {
valuable
// if a simple dereference was parsed, this should just be zero.
offset int
offset uint64
}
// PhraseKind determines what semantic role a phrase plays.