summaryrefslogtreecommitdiff
path: root/regcomp.h
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2006-06-14 15:54:04 +0200
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2006-06-14 12:11:13 +0000
commite68ec53fb89aea41859fe8c109fe9b03a3599284 (patch)
tree4ae853d02c9b47af4dfdaba44be6931b4a0a8dd7 /regcomp.h
parent4bf88892922e6ea671fc32c0d448f3468e183c24 (diff)
downloadperl-e68ec53fb89aea41859fe8c109fe9b03a3599284.tar.gz
fix re debug segvs in global destruction, and a tweak to Benchmark to prevent infinite loops. (Re: ext/re/t/regop.pl SEGV)
Message-ID: <9b18b3110606140454p19f4241exae6528f1c7bb32d7@mail.gmail.com> p4raw-id: //depot/perl@28393
Diffstat (limited to 'regcomp.h')
-rw-r--r--regcomp.h49
1 files changed, 27 insertions, 22 deletions
diff --git a/regcomp.h b/regcomp.h
index 8363637724..84a0e5027f 100644
--- a/regcomp.h
+++ b/regcomp.h
@@ -568,57 +568,62 @@ re.pm, especially to the documentation.
#define RE_DEBUG_EXTRA_TRIE 0x010000
#define RE_DEBUG_EXTRA_OFFSETS 0x020000
+#define RE_DEBUG_FLAG(x) (re_debug_flags & x)
/* Compile */
#define DEBUG_COMPILE_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_COMPILE_MASK) x )
+ if (re_debug_flags & RE_DEBUG_COMPILE_MASK) x )
#define DEBUG_PARSE_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_COMPILE_PARSE) x )
+ if (re_debug_flags & RE_DEBUG_COMPILE_PARSE) x )
#define DEBUG_OPTIMISE_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_COMPILE_OPTIMISE) x )
+ if (re_debug_flags & RE_DEBUG_COMPILE_OPTIMISE) x )
#define DEBUG_PARSE_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_COMPILE_PARSE) x )
+ if (re_debug_flags & RE_DEBUG_COMPILE_PARSE) x )
#define DEBUG_DUMP_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_COMPILE_DUMP) x )
+ if (re_debug_flags & RE_DEBUG_COMPILE_DUMP) x )
#define DEBUG_OFFSETS_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_COMPILE_OFFSETS) x )
+ if (re_debug_flags & RE_DEBUG_COMPILE_OFFSETS) x )
#define DEBUG_TRIE_COMPILE_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_COMPILE_TRIE) x )
+ if (re_debug_flags & RE_DEBUG_COMPILE_TRIE) x )
/* Execute */
#define DEBUG_EXECUTE_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_EXECUTE_MASK) x )
+ if (re_debug_flags & RE_DEBUG_EXECUTE_MASK) x )
#define DEBUG_INTUIT_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_EXECUTE_INTUIT) x )
+ if (re_debug_flags & RE_DEBUG_EXECUTE_INTUIT) x )
#define DEBUG_MATCH_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_EXECUTE_MATCH) x )
+ if (re_debug_flags & RE_DEBUG_EXECUTE_MATCH) x )
#define DEBUG_TRIE_EXECUTE_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_EXECUTE_TRIE) x )
+ if (re_debug_flags & RE_DEBUG_EXECUTE_TRIE) x )
/* Extra */
#define DEBUG_EXTRA_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_EXTRA_MASK) x )
+ if (re_debug_flags & RE_DEBUG_EXTRA_MASK) x )
#define MJD_OFFSET_DEBUG(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_EXTRA_OFFSETS) \
+ if (re_debug_flags & RE_DEBUG_EXTRA_OFFSETS) \
Perl_warn_nocontext x )
#define DEBUG_TRIE_COMPILE_MORE_r(x) DEBUG_TRIE_COMPILE_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_EXTRA_TRIE) x )
+ if (re_debug_flags & RE_DEBUG_EXTRA_TRIE) x )
#define DEBUG_TRIE_EXECUTE_MORE_r(x) DEBUG_TRIE_EXECUTE_r( \
- if (SvIV(re_debug_flags) & RE_DEBUG_EXTRA_TRIE) x )
+ if (re_debug_flags & RE_DEBUG_EXTRA_TRIE) x )
#define DEBUG_TRIE_r(x) DEBUG_r( \
- if (SvIV(re_debug_flags) & (RE_DEBUG_COMPILE_TRIE \
+ if (re_debug_flags & (RE_DEBUG_COMPILE_TRIE \
| RE_DEBUG_EXECUTE_TRIE )) x )
/* initialization */
/* get_sv() can return NULL during global destruction. */
-#define GET_RE_DEBUG_FLAGS DEBUG_r( \
- re_debug_flags = get_sv(RE_DEBUG_FLAGS, 1); \
- if (re_debug_flags && !SvIOK(re_debug_flags)) { \
- sv_setiv(re_debug_flags, RE_DEBUG_COMPILE_DUMP | RE_DEBUG_EXECUTE_MASK ); \
- } )
+#define GET_RE_DEBUG_FLAGS DEBUG_r({ \
+ SV * re_debug_flags_sv = NULL; \
+ re_debug_flags_sv = get_sv(RE_DEBUG_FLAGS, 1); \
+ if (re_debug_flags_sv) { \
+ if (!SvUOK(re_debug_flags_sv)) \
+ sv_setuv(re_debug_flags_sv, RE_DEBUG_COMPILE_DUMP | RE_DEBUG_EXECUTE_MASK ); \
+ re_debug_flags=SvUV(re_debug_flags_sv); \
+ }\
+})
#ifdef DEBUGGING
-#define GET_RE_DEBUG_FLAGS_DECL SV *re_debug_flags = NULL; GET_RE_DEBUG_FLAGS;
+#define GET_RE_DEBUG_FLAGS_DECL UV re_debug_flags = 0; GET_RE_DEBUG_FLAGS;
#else
#define GET_RE_DEBUG_FLAGS_DECL
#endif