+
+
+#define SVp 0x0
+#define U32p 0x1
+#define line_tp 0x2
+#define OPp 0x3
+#define PADOFFSETp 0x4
+#define U8p 0x5
+#define IVp 0x6
+#define char_pp 0x7
+/* Keep this last: */
+#define op_offset_special 0x8
+
+/* table that drives most of the B::*OP methods */
+
+static const struct OP_methods {
+ const char *name;
+ U8 namelen;
+ U8 type; /* if op_offset_special, access is handled on a case-by-case basis */
+ U16 offset;
+} op_methods[] = {
+ { STR_WITH_LEN("next"), OPp, STRUCT_OFFSET(struct op, op_next), },/* 0*/
+ { STR_WITH_LEN("sibling"), op_offset_special, 0, },/* 1*/
+ { STR_WITH_LEN("targ"), PADOFFSETp, STRUCT_OFFSET(struct op, op_targ), },/* 2*/
+ { STR_WITH_LEN("flags"), U8p, STRUCT_OFFSET(struct op, op_flags), },/* 3*/
+ { STR_WITH_LEN("private"), U8p, STRUCT_OFFSET(struct op, op_private), },/* 4*/
+ { STR_WITH_LEN("first"), OPp, STRUCT_OFFSET(struct unop, op_first), },/* 5*/
+ { STR_WITH_LEN("last"), OPp, STRUCT_OFFSET(struct binop, op_last), },/* 6*/
+ { STR_WITH_LEN("other"), OPp, STRUCT_OFFSET(struct logop, op_other), },/* 7*/
+ { STR_WITH_LEN("pmreplstart"), op_offset_special, 0, },/* 8*/
+ { STR_WITH_LEN("redoop"), OPp, STRUCT_OFFSET(struct loop, op_redoop), },/* 9*/
+ { STR_WITH_LEN("nextop"), OPp, STRUCT_OFFSET(struct loop, op_nextop), },/*10*/
+ { STR_WITH_LEN("lastop"), OPp, STRUCT_OFFSET(struct loop, op_lastop), },/*11*/
+ { STR_WITH_LEN("pmflags"), U32p, STRUCT_OFFSET(struct pmop, op_pmflags),},/*12*/
+ { STR_WITH_LEN("code_list"),OPp, STRUCT_OFFSET(struct pmop, op_code_list),},/*13*/
+ { STR_WITH_LEN("sv"), SVp, STRUCT_OFFSET(struct svop, op_sv), },/*14*/
+ { STR_WITH_LEN("gv"), SVp, STRUCT_OFFSET(struct svop, op_sv), },/*15*/
+ { STR_WITH_LEN("padix"), PADOFFSETp,STRUCT_OFFSET(struct padop, op_padix),},/*16*/
+ { STR_WITH_LEN("cop_seq"), U32p, STRUCT_OFFSET(struct cop, cop_seq), },/*17*/
+ { STR_WITH_LEN("line"), line_tp, STRUCT_OFFSET(struct cop, cop_line), },/*18*/
+ { STR_WITH_LEN("hints"), U32p, STRUCT_OFFSET(struct cop, cop_hints), },/*19*/
+#ifdef USE_ITHREADS
+ { STR_WITH_LEN("pmoffset"),IVp, STRUCT_OFFSET(struct pmop, op_pmoffset),},/*20*/
+ { STR_WITH_LEN("filegv"), op_offset_special, 0, },/*21*/
+ { STR_WITH_LEN("file"), char_pp, STRUCT_OFFSET(struct cop, cop_file), },/*22*/
+ { STR_WITH_LEN("stash"), op_offset_special, 0, },/*23*/
+ { STR_WITH_LEN("stashpv"), op_offset_special, 0, },/*24*/
+ { STR_WITH_LEN("stashoff"),PADOFFSETp,STRUCT_OFFSET(struct cop,cop_stashoff),},/*25*/
+#else
+ { STR_WITH_LEN("pmoffset"),op_offset_special, 0, },/*20*/
+ { STR_WITH_LEN("filegv"), SVp, STRUCT_OFFSET(struct cop, cop_filegv),},/*21*/
+ { STR_WITH_LEN("file"), op_offset_special, 0, },/*22*/
+ { STR_WITH_LEN("stash"), SVp, STRUCT_OFFSET(struct cop, cop_stash), },/*23*/
+ { STR_WITH_LEN("stashpv"), op_offset_special, 0, },/*24*/
+ { STR_WITH_LEN("stashoff"),op_offset_special, 0, },/*25*/
+#endif
+ { STR_WITH_LEN("size"), op_offset_special, 0, },/*26*/
+ { STR_WITH_LEN("name"), op_offset_special, 0, },/*27*/
+ { STR_WITH_LEN("desc"), op_offset_special, 0, },/*28*/
+ { STR_WITH_LEN("ppaddr"), op_offset_special, 0, },/*29*/
+ { STR_WITH_LEN("type"), op_offset_special, 0, },/*30*/
+ { STR_WITH_LEN("opt"), op_offset_special, 0, },/*31*/
+ { STR_WITH_LEN("spare"), op_offset_special, 0, },/*32*/
+ { STR_WITH_LEN("children"),op_offset_special, 0, },/*33*/
+ { STR_WITH_LEN("pmreplroot"), op_offset_special, 0, },/*34*/
+ { STR_WITH_LEN("pmstashpv"), op_offset_special, 0, },/*35*/
+ { STR_WITH_LEN("pmstash"), op_offset_special, 0, },/*36*/
+ { STR_WITH_LEN("precomp"), op_offset_special, 0, },/*37*/
+ { STR_WITH_LEN("reflags"), op_offset_special, 0, },/*38*/
+ { STR_WITH_LEN("sv"), op_offset_special, 0, },/*39*/
+ { STR_WITH_LEN("gv"), op_offset_special, 0, },/*40*/
+ { STR_WITH_LEN("pv"), op_offset_special, 0, },/*41*/
+ { STR_WITH_LEN("label"), op_offset_special, 0, },/*42*/
+ { STR_WITH_LEN("arybase"), op_offset_special, 0, },/*43*/
+ { STR_WITH_LEN("warnings"),op_offset_special, 0, },/*44*/
+ { STR_WITH_LEN("io"), op_offset_special, 0, },/*45*/
+ { STR_WITH_LEN("hints_hash"),op_offset_special, 0, },/*46*/
+ { STR_WITH_LEN("slabbed"), op_offset_special, 0, },/*47*/
+ { STR_WITH_LEN("savefree"),op_offset_special, 0, },/*48*/
+ { STR_WITH_LEN("static"), op_offset_special, 0, },/*49*/
+ { STR_WITH_LEN("folded"), op_offset_special, 0, },/*50*/
+ { STR_WITH_LEN("moresib"), op_offset_special, 0, },/*51*/
+ { STR_WITH_LEN("parent"), op_offset_special, 0, },/*52*/
+ { STR_WITH_LEN("first"), op_offset_special, 0, },/*53*/
+ { STR_WITH_LEN("meth_sv"), op_offset_special, 0, },/*54*/
+ { STR_WITH_LEN("pmregexp"),op_offset_special, 0, },/*55*/
+# ifdef USE_ITHREADS
+ { STR_WITH_LEN("rclass"), op_offset_special, 0, },/*56*/
+# else
+ { STR_WITH_LEN("rclass"), op_offset_special, 0, },/*56*/
+# endif
+};
+