summaryrefslogtreecommitdiff
path: root/scope.h
diff options
context:
space:
mode:
authorDaniel Dragan <bulk88@hotmail.com>2012-11-15 15:11:10 -0500
committerFather Chrysostomos <sprout@cpan.org>2012-11-15 18:00:00 -0800
commit6702ba93464c105fae0da7b54ac21a0485c1f0b5 (patch)
tree7ea0ec76ff2ea8ba3eab5915211c0966b1c95002 /scope.h
parent2339cd98152c59549162d6ea3b4c0ab6ece0e6af (diff)
downloadperl-6702ba93464c105fae0da7b54ac21a0485c1f0b5.tar.gz
save_freeop is not an expression, remove PL_Xpv
save_freeop and SAVEFREEOP are never used in expressions only statements. Using PL_Xpv is never ideal. For me .text section dropped from 0xC1DFF to 0xC1DBF after applying this.
Diffstat (limited to 'scope.h')
-rw-r--r--scope.h15
1 files changed, 3 insertions, 12 deletions
diff --git a/scope.h b/scope.h
index de18fe0b6b..4373eacb3c 100644
--- a/scope.h
+++ b/scope.h
@@ -272,23 +272,14 @@ scope has the given name. Name must be a literal string.
#define save_freesv(op) save_pushptr((void *)(op), SAVEt_FREESV)
#define save_mortalizesv(op) save_pushptr((void *)(op), SAVEt_MORTALIZESV)
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+
# define save_freeop(op) \
- ({ \
+STMT_START { \
OP * const _o = (OP *)(op); \
assert(!_o->op_savefree); \
_o->op_savefree = 1; \
save_pushptr((void *)(_o), SAVEt_FREEOP); \
- })
-#else
-# define save_freeop(op) \
- ( \
- PL_Xpv = (XPV *)(op), \
- assert_(!((OP *)PL_Xpv)->op_savefree) \
- ((OP *)PL_Xpv)->op_savefree = 1, \
- save_pushptr((void *)(PL_Xpv), SAVEt_FREEOP) \
- )
-#endif
+ } STMT_END
#define save_freepv(pv) save_pushptr((void *)(pv), SAVEt_FREEPV)
#define save_op() save_pushptr((void *)(PL_op), SAVEt_OP)