From: Lazar, L. <Lij...@am...> - 2011-11-21 07:20:29
|
Hi, We are using SWIG to generate C++ wrappers to interface with Perl. It was working fine until we found an issue when we moved to Perl 5.14. We get an exception for access violation if we call a Perl API with an incomplete argument list. In Perl 5.12, the same would print a Runtime error message to the console. After some debugging we found that the error happens in a #define called SWIG_Error where it tries to set value in a variable 'PL_errgv'. This variable is coming as null for Perl 5.14, but for Perl 5.12 this is coming legit. In Perl 5.12, we found two places from which this variable can be obtained - 1) As a member of Perl interpreter context 2) Return value of a function called Perl_Ierrgv_ptr() The member variable pointer in interpreter context is coming as null in both 5.14 and 5.12, however due to a set of #defines PL_errgv maps to the return value from Perl_Ierrgv_ptr() in Perl 5.12. I couldn't find the function Perl_Ierrgv_ptr()in Perl 5.14. It always points to the member variable of interpreter context which turns out to be null. We made a workaround to redefine SWIG_Error like: #define SWIG_Error(code, msg) sv_setpvf(perl_get_sv("@",GV_ADD),"%s %s\n", SWIG_ErrorType(code), msg) We don't want to rely on workaround, so could you advise on what should be the correct way? If it's a problem related to SWIG for Perl 5.14, could you fix it? Thanks, Lijo |