#define FILL_ADVANCE_NODE_ARG(ptr, op, arg) STMT_START { \
ARG_SET(ptr, arg); FILL_ADVANCE_NODE(ptr, op); (ptr) += 1; } STMT_END
-#define MAGIC 0234
+#define REG_MAGIC 0234
#define SIZE_ONLY (PL_regcode == &PL_regdummy)
#define UCHARAT(p) PL_regdummy
#endif /* lint */
-#define FAIL(m) croak ("/%.127s/: %s", PL_regprecomp,m)
-#define FAIL2(pat,m) re_croak2("/%.127s/: ",pat,PL_regprecomp,m)
+#define FAIL(m) \
+ STMT_START { \
+ if (!SIZE_ONLY) \
+ SAVEDESTRUCTOR(clear_re,(void*)PL_regcomp_rx); \
+ croak ("/%.127s/: %s", PL_regprecomp,m); \
+ } STMT_END
+
+#define FAIL2(pat,m) \
+ STMT_START { \
+ if (!SIZE_ONLY) \
+ SAVEDESTRUCTOR(clear_re,(void*)PL_regcomp_rx); \
+ re_croak2("/%.127s/: ",pat,PL_regprecomp,m); \
+ } STMT_END
#define EXTRA_SIZE(guy) ((sizeof(guy)-1)/sizeof(struct regnode))
/* The following have no fixed length. char* since we do strchr on it. */
#ifndef DOINIT
-EXTCONST char varies[];
+EXTCONST char PL_varies[];
#else
-EXTCONST char varies[] = {
+EXTCONST char PL_varies[] = {
BRANCH, BACK, STAR, PLUS, CURLY, CURLYX, REF, REFF, REFFL,
- WHILEM, CURLYM, CURLYN, BRANCHJ, IFTHEN, SUSPEND, 0
+ WHILEM, CURLYM, CURLYN, BRANCHJ, IFTHEN, SUSPEND, CLUMP, 0
};
#endif
/* The following always have a length of 1. char* since we do strchr on it. */
+/* (Note that lenght 1 means "one character" under UTF8, not "one octet".) */
#ifndef DOINIT
-EXTCONST char simple[];
+EXTCONST char PL_simple[];
#else
-EXTCONST char simple[] = {
- ANY, SANY, ANYOF,
- ALNUM, ALNUML, NALNUM, NALNUML,
- SPACE, SPACEL, NSPACE, NSPACEL,
- DIGIT, NDIGIT, 0
+EXTCONST char PL_simple[] = {
+ REG_ANY, ANYUTF8, SANY, SANYUTF8, ANYOF, ANYOFUTF8,
+ ALNUM, ALNUMUTF8, ALNUML, ALNUMLUTF8,
+ NALNUM, NALNUMUTF8, NALNUML, NALNUMLUTF8,
+ SPACE, SPACEUTF8, SPACEL, SPACELUTF8,
+ NSPACE, NSPACEUTF8, NSPACEL, NSPACELUTF8,
+ DIGIT, DIGITUTF8, NDIGIT, NDIGITUTF8, 0
};
#endif