perl5 error handling improvements
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12873 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
98daf4763d
commit
e7a4f42877
4 changed files with 23 additions and 37 deletions
|
|
@ -5,6 +5,10 @@ See the RELEASENOTES file for a summary of changes in each release.
|
|||
Version 2.0.5 (in progress)
|
||||
===========================
|
||||
|
||||
2011-12-10: talby
|
||||
[perl5] SWIG_error() now gets decorated with perl source file/line number.
|
||||
[perl5] error handling now conforms to public XS api (fixes perl v5.14 issue).
|
||||
|
||||
2011-12-10: wsfulton
|
||||
[Android/Java] Fix directors to compile on Android.
|
||||
|
||||
|
|
|
|||
|
|
@ -4,46 +4,31 @@
|
|||
|
||||
SWIGINTERN const char*
|
||||
SWIG_Perl_ErrorType(int code) {
|
||||
const char* type = 0;
|
||||
switch(code) {
|
||||
case SWIG_MemoryError:
|
||||
type = "MemoryError";
|
||||
break;
|
||||
return "MemoryError";
|
||||
case SWIG_IOError:
|
||||
type = "IOError";
|
||||
break;
|
||||
return "IOError";
|
||||
case SWIG_RuntimeError:
|
||||
type = "RuntimeError";
|
||||
break;
|
||||
return "RuntimeError";
|
||||
case SWIG_IndexError:
|
||||
type = "IndexError";
|
||||
break;
|
||||
return "IndexError";
|
||||
case SWIG_TypeError:
|
||||
type = "TypeError";
|
||||
break;
|
||||
return "TypeError";
|
||||
case SWIG_DivisionByZero:
|
||||
type = "ZeroDivisionError";
|
||||
break;
|
||||
return "ZeroDivisionError";
|
||||
case SWIG_OverflowError:
|
||||
type = "OverflowError";
|
||||
break;
|
||||
return "OverflowError";
|
||||
case SWIG_SyntaxError:
|
||||
type = "SyntaxError";
|
||||
break;
|
||||
return "SyntaxError";
|
||||
case SWIG_ValueError:
|
||||
type = "ValueError";
|
||||
break;
|
||||
return "ValueError";
|
||||
case SWIG_SystemError:
|
||||
type = "SystemError";
|
||||
break;
|
||||
return "SystemError";
|
||||
case SWIG_AttributeError:
|
||||
type = "AttributeError";
|
||||
break;
|
||||
return "AttributeError";
|
||||
default:
|
||||
type = "RuntimeError";
|
||||
return "RuntimeError";
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
/* Error manipulation */
|
||||
|
||||
#define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code)
|
||||
#define SWIG_Error(code, msg) sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
|
||||
#define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg)
|
||||
#define SWIG_fail goto fail
|
||||
|
||||
/* Perl-specific SWIG API */
|
||||
|
|
@ -141,8 +141,6 @@ typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
|
|||
#endif /* MULTIPLICITY */
|
||||
#endif /* PERL_OBJECT */
|
||||
|
||||
/* Workaround for bug in perl 5.6.x croak and earlier */
|
||||
#if (PERL_VERSION < 8)
|
||||
# ifdef PERL_OBJECT
|
||||
# define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
|
||||
static void SWIG_Perl_croak_null(CPerlObj *pPerl)
|
||||
|
|
@ -150,17 +148,16 @@ static void SWIG_Perl_croak_null(CPerlObj *pPerl)
|
|||
static void SWIG_croak_null()
|
||||
# endif
|
||||
{
|
||||
SV *err=ERRSV;
|
||||
SV *err = get_sv("@", GV_ADD);
|
||||
# if (PERL_VERSION < 6)
|
||||
croak("%_", err);
|
||||
# else
|
||||
if (SvOK(err) && !SvROK(err)) croak("%_", err);
|
||||
croak(Nullch);
|
||||
if (sv_isobject(err))
|
||||
croak(0);
|
||||
else
|
||||
croak("%s", SvPV_nolen(err));
|
||||
# endif
|
||||
}
|
||||
#else
|
||||
# define SWIG_croak_null() croak(Nullch)
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
%end_block %enddef
|
||||
|
||||
/* raise exception */
|
||||
%define %raise(obj, type, desc) sv_setsv(GvSV(PL_errgv), obj); SWIG_fail %enddef
|
||||
%define %raise(obj, type, desc) sv_setsv(get_sv("@", GV_ADD), obj); SWIG_fail %enddef
|
||||
|
||||
/* Include the unified typemap library */
|
||||
%include <typemaps/swigtypemaps.swg>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue