mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
parser: change cur_line, tmp_line only in main pass
This commit is contained in:
parent
38c58f9f1b
commit
67c2932f34
@ -50,7 +50,7 @@ fn new_cgen(out_name_c string) *CGen {
|
||||
}
|
||||
|
||||
fn (g mut CGen) genln(s string) {
|
||||
if g.nogen || g.run == .decl {
|
||||
if g.nogen || g.run != .main {
|
||||
return
|
||||
}
|
||||
if g.is_tmp {
|
||||
@ -66,7 +66,7 @@ fn (g mut CGen) genln(s string) {
|
||||
}
|
||||
|
||||
fn (g mut CGen) gen(s string) {
|
||||
if g.nogen || g.run == .decl {
|
||||
if g.nogen || g.run != .main {
|
||||
return
|
||||
}
|
||||
if g.is_tmp {
|
||||
@ -77,6 +77,18 @@ fn (g mut CGen) gen(s string) {
|
||||
}
|
||||
}
|
||||
|
||||
fn (g mut CGen) resetln(s string) {
|
||||
if g.nogen || g.run != .main {
|
||||
return
|
||||
}
|
||||
if g.is_tmp {
|
||||
g.tmp_line = s
|
||||
}
|
||||
else {
|
||||
g.cur_line = s
|
||||
}
|
||||
}
|
||||
|
||||
fn (g mut CGen) save() {
|
||||
s := g.lines.join('\n')
|
||||
g.out.writeln(s)
|
||||
@ -109,7 +121,7 @@ fn (g mut CGen) add_placeholder() int {
|
||||
}
|
||||
|
||||
fn (g mut CGen) set_placeholder(pos int, val string) {
|
||||
if g.nogen {
|
||||
if g.nogen || g.run != .main {
|
||||
return
|
||||
}
|
||||
// g.lines.set(pos, val)
|
||||
@ -135,7 +147,7 @@ fn (g mut CGen) add_placeholder2() int {
|
||||
}
|
||||
|
||||
fn (g mut CGen) set_placeholder2(pos int, val string) {
|
||||
if g.nogen {
|
||||
if g.nogen || g.run != .main {
|
||||
return
|
||||
}
|
||||
if g.is_tmp {
|
||||
|
@ -696,7 +696,7 @@ fn (p mut Parser) fn_call_args(f *Fn) *Fn {
|
||||
T := p.table.find_type(typ)
|
||||
fmt := p.typ_to_fmt(typ, 0)
|
||||
if fmt != '' {
|
||||
p.cgen.cur_line = p.cgen.cur_line.replace('println (', '/*opt*/printf ("' + fmt + '\\n", ')
|
||||
p.cgen.resetln(p.cgen.cur_line.replace('println (', '/*opt*/printf ("' + fmt + '\\n", '))
|
||||
continue
|
||||
}
|
||||
if typ.ends_with('*') {
|
||||
@ -714,7 +714,7 @@ fn (p mut Parser) fn_call_args(f *Fn) *Fn {
|
||||
if name == '}' {
|
||||
p.error(error_msg)
|
||||
}
|
||||
p.cgen.cur_line = p.cgen.cur_line.left(index)
|
||||
p.cgen.resetln(p.cgen.cur_line.left(index))
|
||||
p.create_type_string(T, name)
|
||||
p.cgen.cur_line.replace(typ, '')
|
||||
p.next()
|
||||
|
@ -277,7 +277,7 @@ fn (p mut Parser) parse() {
|
||||
//mut line := p.cgen.fn_main + lines.join('\n')
|
||||
//line = line.trim_space()
|
||||
p.cgen.fn_main = p.cgen.fn_main + lines.join('\n')
|
||||
p.cgen.cur_line = ''
|
||||
p.cgen.resetln('')
|
||||
for i := start; i < end; i++ {
|
||||
p.cgen.lines[i] = ''
|
||||
}
|
||||
@ -381,7 +381,7 @@ fn (p mut Parser) const_decl() {
|
||||
// output a #define so that we don't pollute the binary with unnecessary global vars
|
||||
if is_compile_time_const(p.cgen.cur_line) {
|
||||
p.cgen.consts << '#define $name $p.cgen.cur_line'
|
||||
p.cgen.cur_line = ''
|
||||
p.cgen.resetln('')
|
||||
p.fgenln('')
|
||||
continue
|
||||
}
|
||||
@ -393,7 +393,7 @@ fn (p mut Parser) const_decl() {
|
||||
p.cgen.consts << p.table.cgen_name_type_pair(name, typ) + ';'
|
||||
p.cgen.consts_init << '$name = $p.cgen.cur_line;'
|
||||
}
|
||||
p.cgen.cur_line = ''
|
||||
p.cgen.resetln('')
|
||||
}
|
||||
p.fgenln('')
|
||||
}
|
||||
@ -1144,7 +1144,7 @@ fn (p mut Parser) assign_statement(v Var, ph int, is_map bool) {
|
||||
expr := p.cgen.cur_line.right(pos)
|
||||
left := p.cgen.cur_line.left(pos)
|
||||
//p.cgen.cur_line = left + 'opt_ok($expr)'
|
||||
p.cgen.cur_line = left + 'opt_ok($expr, sizeof($expr_type))'
|
||||
p.cgen.resetln(left + 'opt_ok($expr, sizeof($expr_type))')
|
||||
}
|
||||
else if !p.builtin_pkg && !p.check_types_no_throw(expr_type, p.assigned_type) {
|
||||
p.scanner.line_nr--
|
||||
@ -1813,7 +1813,7 @@ fn (p mut Parser) index_expr(typ string, fn_ph int) string {
|
||||
// Cant have &7, so need a tmp
|
||||
tmp := p.get_tmp()
|
||||
tmp_val := p.cgen.cur_line.right(assign_pos)
|
||||
p.cgen.cur_line = p.cgen.cur_line.left(assign_pos)
|
||||
p.cgen.resetln(p.cgen.cur_line.left(assign_pos))
|
||||
// val := p.cgen.end_tmp()
|
||||
if is_map {
|
||||
p.cgen.set_placeholder(fn_ph, 'map__set(&')
|
||||
@ -1841,7 +1841,7 @@ fn (p mut Parser) index_expr(typ string, fn_ph int) string {
|
||||
// "m, 0" gets killed since we need to start from scratch. It's messy.
|
||||
// "m, 0" is an index expression, save it before deleting and insert later in map_get()
|
||||
index_expr := p.cgen.cur_line.right(fn_ph)
|
||||
p.cgen.cur_line = p.cgen.cur_line.left(fn_ph)
|
||||
p.cgen.resetln(p.cgen.cur_line.left(fn_ph))
|
||||
// Can't pass integer literal, because map_get() requires a void*
|
||||
tmp := p.get_tmp()
|
||||
tmp_ok := p.get_tmp()
|
||||
@ -2342,7 +2342,7 @@ fn (p mut Parser) string_expr() {
|
||||
cur_line := p.cgen.cur_line.trim_space()
|
||||
if cur_line.contains('println (') && p.tok != .plus &&
|
||||
!cur_line.contains('string_add') && !cur_line.contains('eprintln') {
|
||||
p.cgen.cur_line = cur_line.replace('println (', 'printf(')
|
||||
p.cgen.resetln(cur_line.replace('println (', 'printf('))
|
||||
p.gen('$format\\n$args')
|
||||
return
|
||||
}
|
||||
@ -2402,7 +2402,7 @@ fn (p mut Parser) array_init() string {
|
||||
p.check(.rsbr)
|
||||
name := p.check_name()
|
||||
if p.table.known_type(name) {
|
||||
p.cgen.cur_line = ''
|
||||
p.cgen.resetln('')
|
||||
p.gen('{}')
|
||||
return '[$lit]$name'
|
||||
}
|
||||
@ -2428,7 +2428,7 @@ fn (p mut Parser) array_init() string {
|
||||
p.check_space(.semicolon)
|
||||
val := p.cgen.cur_line.right(pos)
|
||||
// p.cgen.cur_line = ''
|
||||
p.cgen.cur_line = p.cgen.cur_line.left(pos)
|
||||
p.cgen.resetln(p.cgen.cur_line.left(pos))
|
||||
// Special case for zero
|
||||
if false && val.trim_space() == '0' {
|
||||
p.gen('array_repeat( & V_ZERO, ')
|
||||
@ -3197,12 +3197,12 @@ fn (p mut Parser) return_st() {
|
||||
tmp := p.get_tmp()
|
||||
ret := p.cgen.cur_line.right(ph)
|
||||
|
||||
p.cgen.cur_line = '$expr_type $tmp = ($expr_type)($ret);'
|
||||
p.cgen.resetln('$expr_type $tmp = ($expr_type)($ret);')
|
||||
p.gen('return opt_ok(&$tmp, sizeof($expr_type))')
|
||||
}
|
||||
else {
|
||||
ret := p.cgen.cur_line.right(ph)
|
||||
p.cgen.cur_line = 'return $ret'
|
||||
p.cgen.resetln('return $ret')
|
||||
}
|
||||
p.check_types(expr_type, p.cur_fn.typ)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user