compiler: let methods return voidptr without a segfault
parent
7d763e0776
commit
fce4199412
|
@ -238,9 +238,13 @@ fn (p mut Parser) gen_method_call(receiver_type, ftyp string, cgen_name string,
|
||||||
// Method returns (void*) => cast it to int, string, user etc
|
// Method returns (void*) => cast it to int, string, user etc
|
||||||
// number := *(int*)numbers.first()
|
// number := *(int*)numbers.first()
|
||||||
if ftyp == 'void*' {
|
if ftyp == 'void*' {
|
||||||
|
if receiver_type.starts_with('array_') {
|
||||||
// array_int => int
|
// array_int => int
|
||||||
cast = receiver_type.all_after('_')
|
cast = receiver_type.all_after('_')
|
||||||
cast = '*($cast*) '
|
cast = '*($cast*) '
|
||||||
|
}else{
|
||||||
|
cast = '(voidptr) '
|
||||||
|
}
|
||||||
}
|
}
|
||||||
p.cgen.set_placeholder(method_ph, '$cast $method_call')
|
p.cgen.set_placeholder(method_ph, '$cast $method_call')
|
||||||
//return method_call
|
//return method_call
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
|
||||||
|
struct Zest { val int }
|
||||||
|
|
||||||
|
fn (t Zest) get_a_finger_to_the_moon() voidptr {
|
||||||
|
return voidptr(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_the_dao_way() voidptr {
|
||||||
|
return voidptr(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_returning_a_void_pointer_from_a_method() {
|
||||||
|
t := &Zest{ val: 123 }
|
||||||
|
z := voidptr(0)
|
||||||
|
assert z == t.get_a_finger_to_the_moon()
|
||||||
|
assert t.get_a_finger_to_the_moon() == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_returning_a_void_pointer_from_a_function() {
|
||||||
|
z := voidptr(0)
|
||||||
|
assert z == get_the_dao_way()
|
||||||
|
assert get_the_dao_way() == 0
|
||||||
|
}
|
Loading…
Reference in New Issue