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
|
||||
// number := *(int*)numbers.first()
|
||||
if ftyp == 'void*' {
|
||||
if receiver_type.starts_with('array_') {
|
||||
// array_int => int
|
||||
cast = receiver_type.all_after('_')
|
||||
cast = '*($cast*) '
|
||||
}else{
|
||||
cast = '(voidptr) '
|
||||
}
|
||||
}
|
||||
p.cgen.set_placeholder(method_ph, '$cast $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