mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
compiler: fix interface bug
This commit is contained in:
parent
217bbdfd66
commit
8bfa7f0d82
|
@ -839,9 +839,15 @@ fn (p mut Parser) fn_call(f mut Fn, method_ph int, receiver_var, receiver_type s
|
||||||
idx = i
|
idx = i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.cgen.resetln('')
|
|
||||||
var := p.expr_var.name
|
var := p.expr_var.name
|
||||||
iname := f.args[0].typ // Speaker
|
iname := f.args[0].typ // Speaker
|
||||||
|
// remove useless var
|
||||||
|
if p.cgen.is_tmp {
|
||||||
|
p.cgen.tmp_line = p.cgen.tmp_line.replace(' $var', '')
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
p.cgen.cur_line = p.cgen.cur_line.replace(' $var', '')
|
||||||
|
}
|
||||||
p.gen('(($f.typ (*)())(${iname}_name_table[${var}._interface_idx][$idx]))(${var}._object')
|
p.gen('(($f.typ (*)())(${iname}_name_table[${var}._interface_idx][$idx]))(${var}._object')
|
||||||
receiver_is_interface = true
|
receiver_is_interface = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,18 +26,19 @@ interface Speak2er {
|
||||||
struct Foo {
|
struct Foo {
|
||||||
speaker Speaker
|
speaker Speaker
|
||||||
speakers []Speaker
|
speakers []Speaker
|
||||||
}
|
}
|
||||||
|
|
||||||
fn perform_speak(s Speaker) {
|
fn perform_speak(s Speaker) {
|
||||||
s.speak()
|
s.speak()
|
||||||
assert true
|
assert true
|
||||||
name := s.name()
|
name := s.name()
|
||||||
assert name == 'Dog' || name == 'Cat'
|
assert name == 'Dog' || name == 'Cat'
|
||||||
|
println(s.name())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn perform_speakers(speakers []Speaker) {
|
fn perform_speakers(speakers []Speaker) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_perform_speak() {
|
fn test_perform_speak() {
|
||||||
dog := Dog{}
|
dog := Dog{}
|
||||||
|
@ -48,7 +49,7 @@ fn test_perform_speak() {
|
||||||
/*
|
/*
|
||||||
f := Foo {
|
f := Foo {
|
||||||
speaker: dog
|
speaker: dog
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -70,6 +71,3 @@ fn test_register() {
|
||||||
f.register()
|
f.register()
|
||||||
handle_reg(f)
|
handle_reg(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user