v/vlib/v2/builder/parse.v
2024-01-01 23:29:54 +02:00

38 lines
1.2 KiB
V

// Copyright (c) 2020-2024 Joe Conigliaro. All rights reserved.
// Use of this source code is governed by an MIT license
// that can be found in the LICENSE file.
module builder
import v2.ast
import v2.parser
fn (mut b Builder) parse_files(files []string) []ast.File {
mut parser_reused := parser.Parser.new(b.pref)
mut ast_files := []ast.File{}
// parse builtin
if !b.pref.skip_builtin {
ast_files << parser_reused.parse_files(get_v_files_from_dir(b.pref.get_vlib_module_path('builtin')), mut
b.file_set)
// ast_files << parser_reused.parse_files(get_v_files_from_dir(b.pref.get_vlib_module_path('sync')), mut b.file_set)
}
// parse user files
ast_files << parser_reused.parse_files(files, mut b.file_set)
if b.pref.skip_imports {
return ast_files
}
// parse imports
mut parsed_imports := []string{}
for afi := 0; afi < ast_files.len; afi++ {
ast_file := ast_files[afi]
for mod in ast_file.imports {
if mod.name in parsed_imports {
continue
}
mod_path := b.pref.get_module_path(mod.name, ast_file.name)
ast_files << parser_reused.parse_files(get_v_files_from_dir(mod_path), mut
b.file_set)
parsed_imports << mod.name
}
}
return ast_files
}