diff options
author | Bram Moolenaar <Bram@vim.org> | 2012-08-08 13:17:31 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2012-08-08 13:17:31 +0200 |
commit | c271c48e8043ec388487b7489fb4692a154791d8 (patch) | |
tree | d9143827f6043d4aadd877e1153fb05c4097d8b9 | |
parent | e66822e3d1aa4eac1cb4b5a47a4a9c4a28581021 (diff) | |
download | vim-git-c271c48e8043ec388487b7489fb4692a154791d8.tar.gz |
updated for version 7.3.623v7.3.623
Problem: Perl 5.14 commands crash Vim on MS-Windows.
Solution: Use perl_get_sv() instead of GvSV(). (Raymond Ko)
-rw-r--r-- | src/if_perl.xs | 18 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/if_perl.xs b/src/if_perl.xs index 57dbe4699..4dc80beaa 100644 --- 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 index 8dd24bdc8..67ab5e726 100644 --- 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, |