+#define FAIL(m) croak ("/%.127s/: %s", regprecomp,m)
+#define FAIL2(pat,m) re_croak2("/%.127s/: ",pat,regprecomp,m)
+
+#define EXTRA_SIZE(guy) ((sizeof(guy)-1)/sizeof(struct regnode))
+
+#ifdef REG_COMP_C
+const static U8 regarglen[] = {
+# ifdef REGALIGN_STRUCT
+ 0,0,0,0,0,0,0,0,0,0,
+ /*CURLY*/ EXTRA_SIZE(struct regnode_2),
+ /*CURLYX*/ EXTRA_SIZE(struct regnode_2),
+ 0,0,0,0,0,0,0,0,0,0,0,0,
+ /*REF*/ EXTRA_SIZE(struct regnode_1),
+ /*OPEN*/ EXTRA_SIZE(struct regnode_1),
+ /*CLOSE*/ EXTRA_SIZE(struct regnode_1),
+ 0,0,
+ /*IFMATCH*/ EXTRA_SIZE(struct regnode_1),
+ /*UNLESSM*/ EXTRA_SIZE(struct regnode_1),
+ 0,0,0,0,0,0,0,0,0,0,0,0,
+ /*CURLYM*/ EXTRA_SIZE(struct regnode_2),
+ /*CURLYN*/ EXTRA_SIZE(struct regnode_2),
+ 0,
+ /*REFF*/ EXTRA_SIZE(struct regnode_1),
+ /*REFFL*/ EXTRA_SIZE(struct regnode_1),
+ /*EVAL*/ EXTRA_SIZE(struct regnode_1),
+ /*LONGJMP*/ EXTRA_SIZE(struct regnode_1),
+ /*BRANCHJ*/ EXTRA_SIZE(struct regnode_1),
+ /*IFTHEN*/ EXTRA_SIZE(struct regnode_1),
+ /*GROUPP*/ EXTRA_SIZE(struct regnode_1),
+ /*LOGICAL*/ 0,
+ /*SUSPEND*/ EXTRA_SIZE(struct regnode_1),
+ /*RENUM*/ EXTRA_SIZE(struct regnode_1), 0,
+# else
+ 0,0,0,0,0,0,0,0,0,0,
+ /*CURLY*/ 4, /*CURLYX*/ 4,
+ 0,0,0,0,0,0,0,0,0,0,0,0,
+ /*REF*/ 2, /*OPEN*/ 2, /*CLOSE*/ 2,
+ 0,0, /*IFMATCH*/ 2, /*UNLESSM*/ 2,
+ 0,0,0,0,0,0,0,0,0,0,0,0,/*CURLYM*/ 4,/*CURLYN*/ 4,
+ 0, /*REFF*/ 2, /*REFFL*/ 2, /*EVAL*/ 2, /*LONGJMP*/ 2, /*BRANCHJ*/ 2,
+ /*IFTHEN*/ 2, /*GROUPP*/ 2, /*LOGICAL*/ 0, /*RENUM*/ 2, /*RENUM*/ 2, 0,
+# endif
+};
+
+const static char reg_off_by_arg[] = {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0 .. 15 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0, /*IFMATCH*/ 2, /*UNLESSM*/ 2, 0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 32 .. 47 */
+ 0, /*LONGJMP*/ 1, /*BRANCHJ*/ 1, /*IFTHEN*/ 1, 0, 0,
+ /*RENUM*/ 1, /*RENUM*/ 1,0,
+};
+#endif
+
+#define REG_SEEN_ZERO_LEN 1
+#define REG_SEEN_LOOKBEHIND 2
+#define REG_SEEN_GPOS 4
+
+#ifdef DEBUGGING
+EXT char *colors[4]; /* not dEXT since we do EXTERN/INTERN.h shuffle */
+#endif