Correction:
Then I write an accessor:
(define (parent-c p) (let ((ret ((c-lambda (parent) child "___result_voidstar = &(((parent*)___arg1_voidstar)->c);")))) ((c-lambda (child scheme-object) void "___EXT(___set_data_rc)(___arg1_voidstar, ___arg2);") ; [2]
ret parent)
ret)
In this example I forgot to pass `p` to the first c-lambda and I passed `parent` to the second one instead. The corrected version would be:
(define (parent-c p) (let ((ret ((c-lambda (parent) child "___result_voidstar = &(((parent*)___arg1_voidstar)->c);") p))) ((c-lambda (child scheme-object) void "___EXT(___set_data_rc)(___arg1_voidstar, ___arg2);") ; [2] ret p) ret)