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)
|
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
|
// Main pass
|
||||||
cgen.pass = Pass.main
|
cgen.pass = Pass.main
|
||||||
if v.pref.is_debug {
|
if v.pref.is_debug {
|
||||||
|
@ -344,11 +336,6 @@ fn (v mut V) compile() {
|
||||||
// new vfmt is not ready yet
|
// 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
|
// Generate .vh if we are building a module
|
||||||
if v.pref.build_mode == .build_module {
|
if v.pref.build_mode == .build_module {
|
||||||
v.generate_vh()
|
v.generate_vh()
|
||||||
|
@ -400,36 +387,6 @@ fn (v mut V) compile() {
|
||||||
v.cc()
|
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() {
|
fn (v mut V) generate_init() {
|
||||||
$if js { return }
|
$if js { return }
|
||||||
if v.pref.build_mode == .build_module {
|
if v.pref.build_mode == .build_module {
|
||||||
|
@ -437,7 +394,6 @@ fn (v mut V) generate_init() {
|
||||||
v.cgen.nogen = false
|
v.cgen.nogen = false
|
||||||
consts_init_body := v.cgen.consts_init.join_lines()
|
consts_init_body := v.cgen.consts_init.join_lines()
|
||||||
init_fn_name := mod_gen_name(v.mod) + '__init_consts'
|
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.genln('void ${init_fn_name}() {\n$consts_init_body\n}')
|
||||||
v.cgen.nogen = nogen
|
v.cgen.nogen = nogen
|
||||||
}
|
}
|
||||||
|
@ -446,7 +402,9 @@ fn (v mut V) generate_init() {
|
||||||
mut call_mod_init_consts := ''
|
mut call_mod_init_consts := ''
|
||||||
for mod in v.table.imports {
|
for mod in v.table.imports {
|
||||||
init_fn_name := mod_gen_name(mod) + '__init'
|
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 {
|
if mod in v.cached_mods {
|
||||||
call_mod_init_consts += '${init_fn_name}_consts();\n'
|
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() {
|
fn (v mut V) add_v_files_to_compile() {
|
||||||
mut builtin_files := v.get_builtin_files()
|
mut builtin_files := v.get_builtin_files()
|
||||||
// Builtin cache exists? Use it.
|
// 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) {
|
if v.pref.is_debug && os.file_exists(builtin_vh) {
|
||||||
builtin_files = [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() {
|
for file in v.get_user_files() {
|
||||||
mut p := v.new_parser_from_file(file)
|
mut p := v.new_parser_from_file(file)
|
||||||
// set mod so we dont have to resolve submodule
|
// 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.mod = v.mod
|
||||||
}
|
}
|
||||||
p.parse(.imports)
|
p.parse(.imports)
|
||||||
|
|
|
@ -278,7 +278,7 @@ fn (p mut Parser) parse(pass Pass) {
|
||||||
p.builtin_mod = p.mod == 'builtin'
|
p.builtin_mod = p.mod == 'builtin'
|
||||||
p.can_chash = p.mod=='ui' || p.mod == 'darwin'// TODO tmp remove
|
p.can_chash = p.mod=='ui' || p.mod == 'darwin'// TODO tmp remove
|
||||||
// Import pass - the first and the smallest pass that only analyzes imports
|
// 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)
|
fq_mod := p.table.qualify_module(p.mod, p.file_path)
|
||||||
p.import_table.module_name = fq_mod
|
p.import_table.module_name = fq_mod
|
||||||
p.table.register_module(fq_mod)
|
p.table.register_module(fq_mod)
|
||||||
|
|
Loading…
Reference in New Issue