Array type parsing
This commit is contained in:
parent
23362b058d
commit
cb7734afe6
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user