mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: fix using pointer as interface receiver
This commit is contained in:
parent
0e241162d9
commit
8fd69e845f
@ -3429,7 +3429,8 @@ _Interface I_${cctype}_to_Interface(${cctype}* x) {
|
|||||||
};
|
};
|
||||||
}')
|
}')
|
||||||
methods_struct.writeln('\t{')
|
methods_struct.writeln('\t{')
|
||||||
for method in ityp.methods {
|
st_sym := g.table.get_type_symbol(st)
|
||||||
|
for method in st_sym.methods {
|
||||||
// .speak = Cat_speak
|
// .speak = Cat_speak
|
||||||
mut method_call := '${cctype}_${method.name}'
|
mut method_call := '${cctype}_${method.name}'
|
||||||
if !method.args[0].typ.is_ptr() {
|
if !method.args[0].typ.is_ptr() {
|
||||||
|
@ -7,11 +7,13 @@ struct Cat {
|
|||||||
breed string
|
breed string
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (d Cat) name() string {
|
fn (mut c Cat) name() string {
|
||||||
|
assert c.breed == 'Persian'
|
||||||
return 'Cat'
|
return 'Cat'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (d Cat) speak(s string) {
|
fn (c &Cat) speak(s string) {
|
||||||
|
assert c.breed == 'Persian'
|
||||||
assert s == 'Hi !'
|
assert s == 'Hi !'
|
||||||
println('meow')
|
println('meow')
|
||||||
}
|
}
|
||||||
@ -32,7 +34,6 @@ fn test_todo() {
|
|||||||
else{}
|
else{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn perform_speak(s Animal) {
|
fn perform_speak(s Animal) {
|
||||||
s.speak('Hi !')
|
s.speak('Hi !')
|
||||||
assert true
|
assert true
|
||||||
@ -47,9 +48,9 @@ fn perform_speak(s Animal) {
|
|||||||
fn test_perform_speak() {
|
fn test_perform_speak() {
|
||||||
dog := Dog{breed: 'Labrador Retriever'}
|
dog := Dog{breed: 'Labrador Retriever'}
|
||||||
perform_speak(dog)
|
perform_speak(dog)
|
||||||
cat := Cat{}
|
cat := Cat{breed: 'Persian'}
|
||||||
perform_speak(cat)
|
perform_speak(cat)
|
||||||
perform_speak(Cat{})
|
perform_speak(Cat{breed: 'Persian'})
|
||||||
handle_animals([dog, cat])
|
handle_animals([dog, cat])
|
||||||
/*
|
/*
|
||||||
f := Foo {
|
f := Foo {
|
||||||
@ -94,7 +95,6 @@ interface Animal {
|
|||||||
speak(s string)
|
speak(s string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn test_interface_array() {
|
fn test_interface_array() {
|
||||||
mut animals := []Animal{}
|
mut animals := []Animal{}
|
||||||
animals = [ Cat{}, Dog{} ]
|
animals = [ Cat{}, Dog{} ]
|
||||||
|
Loading…
Reference in New Issue
Block a user