in reply to SvTRUE(ERRSV) crsahes in Perl 5.10
It ouptuts, for me:use warnings; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'EOC'; void call_Subtract(int a , int b) { dSP; int count; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(sv_2mortal(newSViv(a))); XPUSHs(sv_2mortal(newSViv(b))); PUTBACK; printf("PL_errgv2 = %p\n", PL_errgv); //count = call_pv("Subtract", G_EVAL|G_SCALAR); count = call_pv("Subtract", G_SCALAR); SPAGAIN; printf("PL_errgv3 = %p\n", PL_errgv); /* Check the eval first */ if (SvTRUE(ERRSV)) /* crashes here */ { STRLEN n_a; printf ("Uh oh - %s\n", SvPV(ERRSV, n_a)); POPs; } else { if (count != 1) croak("call_Subtract: wanted 1 value from 'Subtract', g +ot %d\n", count); printf ("%d - %d = %d\n", a, b, POPi); } PUTBACK; FREETMPS; LEAVE; } EOC call_Subtract(25, 12); sub Subtract { my $ret = $_[0] - $_[1]; return $ret; }
Cheers,PL_errgv2 = 002E3F20 PL_errgv3 = 002E3F20 25 - 12 = 13
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: SvTRUE(ERRSV) crsahes in Perl 5.10
by Anonymous Monk on Nov 16, 2010 at 09:54 UTC | |
by syphilis (Archbishop) on Nov 16, 2010 at 12:14 UTC | |
by BrowserUk (Patriarch) on Nov 16, 2010 at 12:26 UTC |