mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
parser: fix generic function call in for in
expression
This commit is contained in:
parent
3dbf7a4039
commit
6008fa44c6
@ -844,7 +844,12 @@ fn (p mut Parser) fn_call(f mut Fn, method_ph int, receiver_var, receiver_type s
|
|||||||
generic := f.is_generic
|
generic := f.is_generic
|
||||||
p.fn_call_args(mut f)
|
p.fn_call_args(mut f)
|
||||||
if generic {
|
if generic {
|
||||||
p.cgen.resetln(p.cgen.cur_line.replace('$cgen_name (', '$f.name ('))
|
line := if p.cgen.is_tmp {
|
||||||
|
p.cgen.tmp_line
|
||||||
|
} else {
|
||||||
|
p.cgen.cur_line
|
||||||
|
}
|
||||||
|
p.cgen.resetln(line.replace('$cgen_name (', '$f.name ('))
|
||||||
// println('calling inst $f.name: $p.cgen.cur_line')
|
// println('calling inst $f.name: $p.cgen.cur_line')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,6 +99,7 @@ struct ParserState {
|
|||||||
cgen_lines []string
|
cgen_lines []string
|
||||||
cgen_cur_line string
|
cgen_cur_line string
|
||||||
cgen_tmp_line string
|
cgen_tmp_line string
|
||||||
|
cgen_is_tmp bool
|
||||||
tokens []Token
|
tokens []Token
|
||||||
token_idx int
|
token_idx int
|
||||||
tok TokenKind
|
tok TokenKind
|
||||||
@ -293,6 +294,7 @@ pub fn (p &Parser) save_state() ParserState {
|
|||||||
cgen_lines : p.cgen.lines
|
cgen_lines : p.cgen.lines
|
||||||
cgen_cur_line : p.cgen.cur_line
|
cgen_cur_line : p.cgen.cur_line
|
||||||
cgen_tmp_line : p.cgen.tmp_line
|
cgen_tmp_line : p.cgen.tmp_line
|
||||||
|
cgen_is_tmp : p.cgen.is_tmp
|
||||||
tokens : p.tokens
|
tokens : p.tokens
|
||||||
token_idx : p.token_idx
|
token_idx : p.token_idx
|
||||||
tok : p.tok
|
tok : p.tok
|
||||||
@ -314,6 +316,7 @@ pub fn (p mut Parser) restore_state(state ParserState, scanner bool, cgen bool)
|
|||||||
p.cgen.lines = state.cgen_lines
|
p.cgen.lines = state.cgen_lines
|
||||||
p.cgen.cur_line = state.cgen_cur_line
|
p.cgen.cur_line = state.cgen_cur_line
|
||||||
p.cgen.tmp_line = state.cgen_tmp_line
|
p.cgen.tmp_line = state.cgen_tmp_line
|
||||||
|
p.cgen.is_tmp = state.cgen_is_tmp
|
||||||
}
|
}
|
||||||
p.tokens = state.tokens
|
p.tokens = state.tokens
|
||||||
p.token_idx = state.token_idx
|
p.token_idx = state.token_idx
|
||||||
@ -335,6 +338,7 @@ fn (p mut Parser) clear_state(scanner bool, cgen bool) {
|
|||||||
p.cgen.lines = []
|
p.cgen.lines = []
|
||||||
p.cgen.cur_line = ''
|
p.cgen.cur_line = ''
|
||||||
p.cgen.tmp_line = ''
|
p.cgen.tmp_line = ''
|
||||||
|
p.cgen.is_tmp = false
|
||||||
}
|
}
|
||||||
p.tokens = []
|
p.tokens = []
|
||||||
p.token_idx = 0
|
p.token_idx = 0
|
||||||
|
@ -80,3 +80,21 @@ fn test_generic_method() {
|
|||||||
p.translate(2, 1.0)
|
p.translate(2, 1.0)
|
||||||
assert p.x == 2.0 && p.y == 1.0
|
assert p.x == 2.0 && p.y == 1.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_values<T>(i T) []T {
|
||||||
|
return [i]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_generic_fn_in_for_in_expression() {
|
||||||
|
for value in get_values(1) {
|
||||||
|
assert value == 1
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, val in get_values(0) {
|
||||||
|
assert i == val
|
||||||
|
}
|
||||||
|
|
||||||
|
for value in get_values('a') {
|
||||||
|
assert value == 'a'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user