Added untested dereference parsing
This commit is contained in:
parent
fae8bedfa9
commit
a7588f7416
@ -1,12 +1,32 @@
|
|||||||
package parser
|
package parser
|
||||||
|
|
||||||
// import "git.tebibyte.media/arf/arf/lexer"
|
import "git.tebibyte.media/arf/arf/lexer"
|
||||||
// import "git.tebibyte.media/arf/arf/infoerr"
|
// import "git.tebibyte.media/arf/arf/infoerr"
|
||||||
|
|
||||||
func (parser *ParsingOperation) parseDereference () (
|
func (parser *ParsingOperation) parseDereference () (
|
||||||
dereference Dereference,
|
dereference Dereference,
|
||||||
err error,
|
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
|
return
|
||||||
}
|
}
|
||||||
|
@ -224,7 +224,7 @@ type Dereference struct {
|
|||||||
valuable
|
valuable
|
||||||
|
|
||||||
// if a simple dereference was parsed, this should just be zero.
|
// if a simple dereference was parsed, this should just be zero.
|
||||||
offset int
|
offset uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// PhraseKind determines what semantic role a phrase plays.
|
// PhraseKind determines what semantic role a phrase plays.
|
||||||
|
Reference in New Issue
Block a user