compiler: cached module - cleanup, remove unneeded code (#2297)
* test * only call existing module init * add back commentpull/2298/head
parent
f461a21a50
commit
9faefe85e1
|
@ -271,14 +271,6 @@ fn (v mut V) compile() {
|
|||
v.parse(file, .decl)
|
||||
}
|
||||
|
||||
// generate missing module init's
|
||||
init_parsers := v.module_gen_init_parsers()
|
||||
// run decl pass
|
||||
for i in 0..init_parsers.len {
|
||||
mut ip := init_parsers[i]
|
||||
ip.parse(.decl)
|
||||
}
|
||||
|
||||
// Main pass
|
||||
cgen.pass = Pass.main
|
||||
if v.pref.is_debug {
|
||||
|
@ -344,11 +336,6 @@ fn (v mut V) compile() {
|
|||
// new vfmt is not ready yet
|
||||
}
|
||||
}
|
||||
// run main parser on the init parsers
|
||||
for i in 0..init_parsers.len {
|
||||
mut ip := init_parsers[i]
|
||||
ip.parse(.main)
|
||||
}
|
||||
// Generate .vh if we are building a module
|
||||
if v.pref.build_mode == .build_module {
|
||||
v.generate_vh()
|
||||
|
@ -400,36 +387,6 @@ fn (v mut V) compile() {
|
|||
v.cc()
|
||||
}
|
||||
|
||||
fn (v mut V) module_gen_init_parsers() []Parser {
|
||||
mut parsers := []Parser
|
||||
if v.pref.build_mode == .build_module {
|
||||
init_fn_name := mod_gen_name(v.mod) + '__init'
|
||||
if !v.table.known_fn(init_fn_name) {
|
||||
mod_def := if v.mod.contains('.') { v.mod.all_after('.') } else { v.mod }
|
||||
mut fn_v := 'module $mod_def\n\n'
|
||||
fn_v += 'fn init() { /*println(\'$v.mod module init\')*/ }'
|
||||
mut p := v.new_parser_from_string(fn_v, 'init_gen_$v.mod')
|
||||
p.mod = v.mod
|
||||
parsers << p
|
||||
}
|
||||
}
|
||||
else if v.pref.build_mode == .default_mode {
|
||||
for mod in v.table.imports {
|
||||
if mod in v.cached_mods { continue }
|
||||
init_fn_name := mod_gen_name(mod) + '__init'
|
||||
if !v.table.known_fn(init_fn_name) {
|
||||
mod_def := if mod.contains('.') { mod.all_after('.') } else { mod }
|
||||
mut fn_v := 'module $mod_def\n\n'
|
||||
fn_v += 'fn init() { /*println(\'$v.mod module init\')*/ }'
|
||||
mut p := v.new_parser_from_string(fn_v, 'init_gen_$mod')
|
||||
p.mod = mod
|
||||
parsers << p
|
||||
}
|
||||
}
|
||||
}
|
||||
return parsers
|
||||
}
|
||||
|
||||
fn (v mut V) generate_init() {
|
||||
$if js { return }
|
||||
if v.pref.build_mode == .build_module {
|
||||
|
@ -437,7 +394,6 @@ fn (v mut V) generate_init() {
|
|||
v.cgen.nogen = false
|
||||
consts_init_body := v.cgen.consts_init.join_lines()
|
||||
init_fn_name := mod_gen_name(v.mod) + '__init_consts'
|
||||
println('generating init for $v.mod: $init_fn_name')
|
||||
v.cgen.genln('void ${init_fn_name}() {\n$consts_init_body\n}')
|
||||
v.cgen.nogen = nogen
|
||||
}
|
||||
|
@ -446,7 +402,9 @@ fn (v mut V) generate_init() {
|
|||
mut call_mod_init_consts := ''
|
||||
for mod in v.table.imports {
|
||||
init_fn_name := mod_gen_name(mod) + '__init'
|
||||
call_mod_init += '${init_fn_name}();\n'
|
||||
if v.table.known_fn(init_fn_name) {
|
||||
call_mod_init += '${init_fn_name}();\n'
|
||||
}
|
||||
if mod in v.cached_mods {
|
||||
call_mod_init_consts += '${init_fn_name}_consts();\n'
|
||||
}
|
||||
|
@ -655,7 +613,7 @@ fn (v &V) v_files_from_dir(dir string) []string {
|
|||
fn (v mut V) add_v_files_to_compile() {
|
||||
mut builtin_files := v.get_builtin_files()
|
||||
// Builtin cache exists? Use it.
|
||||
builtin_vh := '$v_modules_path/builtin.vh'
|
||||
builtin_vh := '$v_modules_path${os.PathSeparator}builtin.vh'
|
||||
if v.pref.is_debug && os.file_exists(builtin_vh) {
|
||||
builtin_files = [builtin_vh]
|
||||
}
|
||||
|
@ -672,7 +630,8 @@ fn (v mut V) add_v_files_to_compile() {
|
|||
for file in v.get_user_files() {
|
||||
mut p := v.new_parser_from_file(file)
|
||||
// set mod so we dont have to resolve submodule
|
||||
if v.pref.build_mode == .build_module && file.contains(v.mod.replace('.', os.PathSeparator)) {
|
||||
if v.pref.build_mode == .build_module &&
|
||||
file.contains(v.mod.replace('.', os.PathSeparator)) {
|
||||
p.mod = v.mod
|
||||
}
|
||||
p.parse(.imports)
|
||||
|
|
|
@ -278,7 +278,7 @@ fn (p mut Parser) parse(pass Pass) {
|
|||
p.builtin_mod = p.mod == 'builtin'
|
||||
p.can_chash = p.mod=='ui' || p.mod == 'darwin'// TODO tmp remove
|
||||
// Import pass - the first and the smallest pass that only analyzes imports
|
||||
|
||||
// fully qualify the module name, eg base64 to encoding.base64
|
||||
fq_mod := p.table.qualify_module(p.mod, p.file_path)
|
||||
p.import_table.module_name = fq_mod
|
||||
p.table.register_module(fq_mod)
|
||||
|
|
Loading…
Reference in New Issue