Skip to content

Commit

Permalink
Merge pull request #3544 from ntn9995/fix-parser-empty-or-no-pkg
Browse files Browse the repository at this point in the history
Fix core:odin/parser crashing on empty and/or no package files
  • Loading branch information
gingerBill authored May 10, 2024
2 parents 20d35ac + 3add85e commit b4d0b1d
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion core/odin/parser/parse_files.odin
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import "core:path/filepath"
import "core:fmt"
import "core:os"
import "core:slice"
import "core:strings"

collect_package :: proc(path: string) -> (pkg: ^ast.Package, success: bool) {
NO_POS :: tokenizer.Pos{}
Expand All @@ -32,11 +33,18 @@ collect_package :: proc(path: string) -> (pkg: ^ast.Package, success: bool) {
if !ok {
return
}

src, ok = os.read_entire_file(fullpath)
if !ok {
delete(fullpath)
return
}
if strings.trim_space(string(src)) == "" {
delete(fullpath)
delete(src)
continue
}

file := ast.new(ast.File, NO_POS, NO_POS)
file.pkg = pkg
file.src = string(src)
Expand Down Expand Up @@ -69,7 +77,9 @@ parse_package :: proc(pkg: ^ast.Package, p: ^Parser = nil) -> bool {
if !parse_file(p, file) {
ok = false
}
if pkg.name == "" {
if file.pkg_decl == nil {
error(p, p.curr_tok.pos, "Expected a package declaration at the start of the file")
} else if pkg.name == "" {
pkg.name = file.pkg_decl.name
} else if pkg.name != file.pkg_decl.name {
error(p, file.pkg_decl.pos, "different package name, expected '%s', got '%s'", pkg.name, file.pkg_decl.name)
Expand Down

0 comments on commit b4d0b1d

Please sign in to comment.