Array type parsing
This commit is contained in:
parent
23362b058d
commit
cb7734afe6
@ -1,6 +1,6 @@
|
||||
package parser
|
||||
|
||||
import "fmt"
|
||||
import "strconv"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/lexer"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/entity"
|
||||
|
||||
@ -33,6 +33,8 @@ func (this *Parser) parseType () (entity.Type, error) {
|
||||
return this.parseTypePointerOrSlice()
|
||||
|
||||
case lexer.Int:
|
||||
return this.parseTypeArray()
|
||||
|
||||
case lexer.LParen:
|
||||
}
|
||||
panic(this.bug())
|
||||
@ -55,9 +57,9 @@ func (this *Parser) parseTypePointerOrSlice () (entity.Type, error) {
|
||||
if err != nil { return nil, err }
|
||||
start := this.pos()
|
||||
|
||||
xpc := appendCopy(startTokensType, lexer.Colon)
|
||||
fmt.Println(xpc)
|
||||
err = this.expectNextDesc("Colon or Type", xpc...)
|
||||
err = this.expectNextDesc (
|
||||
"Colon or Type",
|
||||
appendCopy(startTokensType, lexer.Colon)...)
|
||||
if err != nil { return nil, err }
|
||||
|
||||
if this.token.Is(lexer.Colon) {
|
||||
@ -76,12 +78,27 @@ func (this *Parser) parseTypePointerOrSlice () (entity.Type, error) {
|
||||
Referenced: referenced,
|
||||
}, nil
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (this *Parser) parseTypeArray () (entity.Type, error) {
|
||||
// TODO
|
||||
return nil, nil
|
||||
err := this.expectDesc("Array type", lexer.Int)
|
||||
if err != nil { return nil, err }
|
||||
start := this.pos()
|
||||
|
||||
length, err := strconv.Atoi(this.value())
|
||||
if err != nil { return nil, err }
|
||||
err = this.expectNext(lexer.Colon)
|
||||
if err != nil { return nil, err }
|
||||
err = this.next()
|
||||
if err != nil { return nil, err }
|
||||
element, err := this.parseType()
|
||||
if err != nil { return nil, err }
|
||||
|
||||
return &entity.TypeArray {
|
||||
Position: start.Union(this.pos()),
|
||||
Length: length,
|
||||
Element: element,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (this *Parser) parseTypeStruct () (entity.Type, error) {
|
||||
|
Loading…
Reference in New Issue
Block a user