Fix parser edge-cases, fix wasm, refactor

This commit is contained in:
Neemek 2025-04-04 09:52:41 +02:00
parent c364e09fc9
commit be7809d467
Signed by: neemek
GPG key ID: 28360A8951CD0E9B
5 changed files with 38 additions and 25 deletions

View file

@ -129,7 +129,9 @@ func (p *Parser) Parse(path string) (*Program, error) {
return nil, err
}
statements = append(statements, b)
if b != nil {
statements = append(statements, b)
}
}
return &Program{
@ -774,16 +776,23 @@ func (p *Parser) statement() (Node, error) {
return &BreakpointNode{}, nil
case TokenImport:
defer p.advance()
return nil, p.error("import statements must be top-level", p.curr)
default:
err := p.error("invalid statement", p.curr)
p.advance()
return nil, err
defer p.advance()
return nil, p.error("invalid statement", p.curr)
}
}
func (p *Parser) block(canBeStatement bool) (Node, error) {
if canBeStatement {
if !p.accept(TokenOpenBrace) {
if p.curr.Type == TokenEOF {
return nil, nil
}
return p.statement()
}
} else {