compiler: remove unneeded field & manually add parser to v.parsers (#2232)
compiler: remove unneeded field & manually add parser to v.parsers (#2232)pull/2233/head
parent
e14861694c
commit
a62dec2053
|
@ -124,6 +124,7 @@ fn (p mut Parser) comp_time() {
|
||||||
pp.is_vweb = true
|
pp.is_vweb = true
|
||||||
pp.set_current_fn( p.cur_fn ) // give access too all variables in current function
|
pp.set_current_fn( p.cur_fn ) // give access too all variables in current function
|
||||||
pp.parse(.main)
|
pp.parse(.main)
|
||||||
|
pp.v.add_parser(pp)
|
||||||
tmpl_fn_body := p.cgen.lines.slice(pos + 2, p.cgen.lines.len).join('\n').clone()
|
tmpl_fn_body := p.cgen.lines.slice(pos + 2, p.cgen.lines.len).join('\n').clone()
|
||||||
end_pos := tmpl_fn_body.last_index('Builder_str( sb )') + 19 // TODO
|
end_pos := tmpl_fn_body.last_index('Builder_str( sb )') + 19 // TODO
|
||||||
p.cgen.lines = p.cgen.lines.left(pos)
|
p.cgen.lines = p.cgen.lines.left(pos)
|
||||||
|
@ -287,7 +288,3 @@ fn (p mut Parser) gen_struct_str(typ Type) {
|
||||||
// This function will get parsee by V after the main pass.
|
// This function will get parsee by V after the main pass.
|
||||||
p.cgen.fns << 'string ${typ.name}_str();'
|
p.cgen.fns << 'string ${typ.name}_str();'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,6 @@ mut:
|
||||||
out_name_c string // name of the temporary C file
|
out_name_c string // name of the temporary C file
|
||||||
files []string // all V files that need to be parsed and compiled
|
files []string // all V files that need to be parsed and compiled
|
||||||
dir string // directory (or file) being compiled (TODO rename to path?)
|
dir string // directory (or file) being compiled (TODO rename to path?)
|
||||||
rdir string // abs dir
|
|
||||||
table &Table // table with types, vars, functions etc
|
table &Table // table with types, vars, functions etc
|
||||||
cgen &CGen // C code generator
|
cgen &CGen // C code generator
|
||||||
pref &Preferences // all the preferences and settings extracted to a struct for reusability
|
pref &Preferences // all the preferences and settings extracted to a struct for reusability
|
||||||
|
@ -208,24 +207,24 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (v mut V) add_parser(parser Parser) {
|
fn (v mut V) add_parser(parser Parser) {
|
||||||
for p in v.parsers {
|
|
||||||
if p.id == parser.id {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
v.parsers << parser
|
v.parsers << parser
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (v mut V) parse(file string, pass Pass) {
|
// find existing parser or create new one. returns v.parsers index
|
||||||
|
fn (v mut V) parse(file string, pass Pass) int {
|
||||||
//println('parse($file, $pass)')
|
//println('parse($file, $pass)')
|
||||||
for i, p in v.parsers {
|
for i, p in v.parsers {
|
||||||
if os.realpath(p.file_path) == os.realpath(file) {
|
if os.realpath(p.file_path) == os.realpath(file) {
|
||||||
v.parsers[i].parse(pass)
|
v.parsers[i].parse(pass)
|
||||||
return
|
//if v.parsers[i].pref.autofree { v.parsers[i].scanner.text.free() free(v.parsers[i].scanner) }
|
||||||
|
return i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mut p := v.new_parser_from_file(file)
|
mut p := v.new_parser_from_file(file)
|
||||||
p.parse(pass)
|
p.parse(pass)
|
||||||
|
//if p.pref.autofree { p.scanner.text.free() free(p.scanner) }
|
||||||
|
v.add_parser(p)
|
||||||
|
return v.parsers.len-1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -342,6 +341,7 @@ fn (v mut V) compile() {
|
||||||
// free the string builder which held the generated methods
|
// free the string builder which held the generated methods
|
||||||
v.vgen_buf.free()
|
v.vgen_buf.free()
|
||||||
vgen_parser.parse(.main)
|
vgen_parser.parse(.main)
|
||||||
|
// v.parsers.add(vgen_parser)
|
||||||
v.log('Done parsing.')
|
v.log('Done parsing.')
|
||||||
// Write everything
|
// Write everything
|
||||||
mut d := strings.new_builder(10000)// Avoid unnecessary allocations
|
mut d := strings.new_builder(10000)// Avoid unnecessary allocations
|
||||||
|
@ -583,12 +583,14 @@ fn (v mut V) add_v_files_to_compile() {
|
||||||
mut p := v.new_parser_from_file(file)
|
mut p := v.new_parser_from_file(file)
|
||||||
p.parse(.imports)
|
p.parse(.imports)
|
||||||
//if p.pref.autofree { p.scanner.text.free() free(p.scanner) }
|
//if p.pref.autofree { p.scanner.text.free() free(p.scanner) }
|
||||||
|
v.add_parser(p)
|
||||||
}
|
}
|
||||||
// Parse user imports
|
// Parse user imports
|
||||||
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)
|
||||||
p.parse(.imports)
|
p.parse(.imports)
|
||||||
//if p.pref.autofree { p.scanner.text.free() free(p.scanner) }
|
//if p.pref.autofree { p.scanner.text.free() free(p.scanner) }
|
||||||
|
v.add_parser(p)
|
||||||
}
|
}
|
||||||
// Parse lib imports
|
// Parse lib imports
|
||||||
v.parse_lib_imports()
|
v.parse_lib_imports()
|
||||||
|
@ -632,7 +634,7 @@ fn (v &V) get_builtin_files() []string {
|
||||||
|
|
||||||
// get user files
|
// get user files
|
||||||
fn (v &V) get_user_files() []string {
|
fn (v &V) get_user_files() []string {
|
||||||
mut dir := v.rdir
|
mut dir := v.dir
|
||||||
v.log('get_v_files($dir)')
|
v.log('get_v_files($dir)')
|
||||||
// Need to store user files separately, because they have to be added after libs, but we dont know
|
// Need to store user files separately, because they have to be added after libs, but we dont know
|
||||||
// which libs need to be added yet
|
// which libs need to be added yet
|
||||||
|
@ -685,12 +687,12 @@ fn (v mut V) parse_lib_imports() {
|
||||||
// Add all imports referenced by these libs
|
// Add all imports referenced by these libs
|
||||||
for file in vfiles {
|
for file in vfiles {
|
||||||
if file in done_imports { continue }
|
if file in done_imports { continue }
|
||||||
v.parse(file, .imports)
|
pid := v.parse(file, .imports)
|
||||||
done_imports << file
|
done_imports << file
|
||||||
// if p.import_table.module_name != mod {
|
p_mod := v.parsers[pid].import_table.module_name
|
||||||
// verror('bad module name: $file was imported as `$mod` but it is defined as module `$p.import_table.module_name`')
|
if p_mod != mod {
|
||||||
// }
|
verror('bad module name: $file was imported as `$mod` but it is defined as module `$p_mod`')
|
||||||
//if p.pref.autofree { p.scanner.text.free() free(p.scanner) }
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
done_fits << fit.file_path
|
done_fits << fit.file_path
|
||||||
|
@ -909,7 +911,6 @@ fn new_v(args[]string) &V {
|
||||||
return &V{
|
return &V{
|
||||||
os: _os
|
os: _os
|
||||||
out_name: out_name
|
out_name: out_name
|
||||||
rdir: rdir
|
|
||||||
dir: dir
|
dir: dir
|
||||||
lang_dir: vroot
|
lang_dir: vroot
|
||||||
table: new_table(obfuscate)
|
table: new_table(obfuscate)
|
||||||
|
|
|
@ -99,7 +99,6 @@ const (
|
||||||
fn (v mut V) new_parser_from_string(text string, id string) Parser {
|
fn (v mut V) new_parser_from_string(text string, id string) Parser {
|
||||||
mut p := v.new_parser(new_scanner(text), id)
|
mut p := v.new_parser(new_scanner(text), id)
|
||||||
p.scan_tokens()
|
p.scan_tokens()
|
||||||
v.add_parser(p)
|
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,8 +129,6 @@ fn (v mut V) new_parser_from_file(path string) Parser {
|
||||||
v.cgen.file = path
|
v.cgen.file = path
|
||||||
p.scan_tokens()
|
p.scan_tokens()
|
||||||
//p.scanner.debug_tokens()
|
//p.scanner.debug_tokens()
|
||||||
v.add_parser(p)
|
|
||||||
|
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue