Array type parsing

This commit is contained in:
Sasha Koshka 2024-02-07 00:32:18 -05:00
parent 23362b058d
commit cb7734afe6

View File

@ -1,6 +1,6 @@
package parser package parser
import "fmt" import "strconv"
import "git.tebibyte.media/sashakoshka/fspl/lexer" import "git.tebibyte.media/sashakoshka/fspl/lexer"
import "git.tebibyte.media/sashakoshka/fspl/entity" import "git.tebibyte.media/sashakoshka/fspl/entity"
@ -33,6 +33,8 @@ func (this *Parser) parseType () (entity.Type, error) {
return this.parseTypePointerOrSlice() return this.parseTypePointerOrSlice()
case lexer.Int: case lexer.Int:
return this.parseTypeArray()
case lexer.LParen: case lexer.LParen:
} }
panic(this.bug()) panic(this.bug())
@ -55,9 +57,9 @@ func (this *Parser) parseTypePointerOrSlice () (entity.Type, error) {
if err != nil { return nil, err } if err != nil { return nil, err }
start := this.pos() start := this.pos()
xpc := appendCopy(startTokensType, lexer.Colon) err = this.expectNextDesc (
fmt.Println(xpc) "Colon or Type",
err = this.expectNextDesc("Colon or Type", xpc...) appendCopy(startTokensType, lexer.Colon)...)
if err != nil { return nil, err } if err != nil { return nil, err }
if this.token.Is(lexer.Colon) { if this.token.Is(lexer.Colon) {
@ -76,12 +78,27 @@ func (this *Parser) parseTypePointerOrSlice () (entity.Type, error) {
Referenced: referenced, Referenced: referenced,
}, nil }, nil
} }
} }
func (this *Parser) parseTypeArray () (entity.Type, error) { func (this *Parser) parseTypeArray () (entity.Type, error) {
// TODO err := this.expectDesc("Array type", lexer.Int)
return nil, nil 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) { func (this *Parser) parseTypeStruct () (entity.Type, error) {