# HG changeset patch # User Bram Moolenaar # Date 1344424651 -7200 # Node ID a46a101bfddd4fcf30759f3847fa1e18546907f4 # Parent 6581d543a54cd8cd8ecbe0f576befac80e7b695e updated for version 7.3.623 Problem: Perl 5.14 commands crash Vim on MS-Windows. Solution: Use perl_get_sv() instead of GvSV(). (Raymond Ko) diff --git a/src/if_perl.xs b/src/if_perl.xs --- a/src/if_perl.xs +++ b/src/if_perl.xs @@ -76,6 +76,12 @@ # define EXTERN_C #endif +#if (PERL_REVISION == 5) && (PERL_VERSION >= 14) && defined(_MSC_VER) +/* Using PL_errgv to get the error message after perl_eval_sv() causes a crash + * with MSVC and Perl version 5.14. */ +# define AVOID_PL_ERRGV +#endif + /* Compatibility hacks over */ static PerlInterpreter *perl_interp = NULL; @@ -796,7 +802,11 @@ ex_perl(eap) SvREFCNT_dec(sv); +#ifdef AVOID_PL_ERRGV + err = SvPV(perl_get_sv("@", GV_ADD), length); +#else err = SvPV(GvSV(PL_errgv), length); +#endif FREETMPS; LEAVE; @@ -866,7 +876,11 @@ ex_perldo(eap) sv_catpvn(sv, "}", 1); perl_eval_sv(sv, G_DISCARD | G_NOARGS); SvREFCNT_dec(sv); +#ifdef AVOID_PL_ERRGV + str = SvPV(perl_get_sv("@", GV_ADD), length); +#else str = SvPV(GvSV(PL_errgv), length); +#endif if (length) goto err; @@ -880,7 +894,11 @@ ex_perldo(eap) sv_setpv(GvSV(PL_defgv), (char *)ml_get(i)); PUSHMARK(sp); perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL); +#ifdef AVOID_PL_ERRGV + str = SvPV(perl_get_sv("@", GV_ADD), length); +#else str = SvPV(GvSV(PL_errgv), length); +#endif if (length) break; SPAGAIN; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 623, +/**/ 622, /**/ 621,