Yes, you are right. I should dereference first. But now, the issue is,
who can explain why the wrong code could also invoke class' public
method via THIS-print() successfully.
_wrong code_ : $var = ($type) SvIV($arg);
On 8/17/05, Nicholas Clark [EMAIL PROTECTED] wrote:
On Thu, Aug 11, 2005 at 11:55:49AM +0800, Dongxu Ma wrote:
According to typemap in ExtUtils and perl.h, casting IV to pointer
should be safe in this case, since on my machine(32bit, kernel
2.6.12), sizeof(int) == 4, which is the same as a pointer. Does
anyone have any idea about this issue?
I think that there's a bug in the typemap you're using:
-typemap---
TYPEMAP
Test *T_OBJECT
INPUT
T_OBJECT
if(sv_isa($arg, \Test\) sv_isobject($arg)) {
$var = INT2PTR($type, SvIV($arg));
SvIV(SvRV($arg))
} else {
warn(\$arg is not a blessed object\);
XSRETURN_UNDEF;
}
If I make the above change to use SvRV then I can avoid getting a segfault.
Nicholas Clark
--
Bst Rgrs, Dongxu