Changeset 355 for eaccelerator/trunk/ea_dasm.c
- Timestamp:
- 06/20/08 15:50:40 (2 months ago)
- Files:
-
- eaccelerator/trunk/ea_dasm.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
eaccelerator/trunk/ea_dasm.c
r344 r355 35 35 extern eaccelerator_mm *eaccelerator_mm_instance; 36 36 37 #define LOOKUP(arr, index, max, ptr) if (index < max) { ptr = arr[index]; } else { ptr = "UNDEFINED (todo)"; }; 38 37 39 /* {{{ static const char *extopnames_declare[] */ 38 40 static const char *extopnames_declare[] = { … … 42 44 "DECLARE_INHERITED_CLASS" /* 3 */ 43 45 }; 46 #define EXTOPNAMES_DECLARE_NUM 4 47 #define GET_EXTOPNAMES_DECLARE(index, ptr) LOOKUP(extopnames_declare, index, EXTOPNAMES_DECLARE_NUM, ptr) 44 48 /* }}} */ 45 49 … … 57 61 "IS_CONSTANT_ARRAY" /* 9 */ 58 62 }; 63 #define EXTOPNAMES_CAST_NUM 10 64 #define GET_EXTOPNAMES_CAST(index, ptr) LOOKUP(extopnames_cast, index, EXTOPNAMES_CAST_NUM, ptr) 59 65 /* }}} */ 60 66 … … 64 70 "FETCH_ADD_LOCK" /* 1 */ 65 71 }; 72 #define EXTOPNAMES_FETCH_NUM 2 73 #define GET_EXTOPNAMES_FETCH(index, ptr) LOOKUP(extopnames_fetch, index, EXTOPNAMES_FETCH_NUM, ptr) 66 74 /* }}} */ 67 75 … … 75 83 "FETCH_CLASS_AUTO" /* 5 */ 76 84 }; 85 #define EXTOPNAMES_FETCH_CLASS_NUM 6 86 #define GET_EXTOPNAMES_FETCH_CLASS(index, ptr) LOOKUP(extopnames_fetch_class, index, EXTOPNAMES_FETCH_CLASS_NUM, ptr) 77 87 /* }}} */ 78 88 … … 84 94 "CTOR_CALL" /* 3 */ 85 95 }; 96 #define EXTOPNAMES_INIT_FCALL_NUM 4 97 #define GET_EXTOPNAMES_INIT_FCALL(index, ptr) LOOKUP(extopnames_init_fcall, index, EXTOPNAMES_INIT_FCALL_NUM, ptr) 86 98 /* }}} */ 87 99 … … 93 105 "ARG_SEND_BY_REF | ZEND_ARG_COMPILE_TIME_BOUND" /* 3 */ 94 106 }; 107 #define EXTOPNAMES_SENDNOREF_NUM 4 108 #define GET_EXTOPNAMES_SENDNOREF(index, ptr) LOOKUP(extopnames_sendnoref, index, EXTOPNAMES_SENDNOREF_NUM, ptr) 95 109 /* }}} */ 96 110 … … 103 117 "UNKNOWN 1" /* 4 */ 104 118 }; 119 #define FETCHTYPENAME_NUM 5 120 #define GET_FETCHTYPENAME(index, ptr) LOOKUP(fetchtypename, index, FETCHTYPENAME_NUM, ptr) 105 121 /* }}} */ 106 122 … … 111 127 "FE_FETCH_WITH_KEY" /* 2 */ 112 128 }; 129 #define EXTOPNAMES_FE_NUM 3 130 #define GET_EXTOPNAMES_FE(index, ptr) LOOKUP(extopnames_fe, index, EXTOPNAMES_FE_NUM, ptr) 113 131 /* }}} */ 114 132 … … 234 252 strncpy(buf, get_opcode_dsc(opline->extended_value)->opname, sizeof(buf)); 235 253 } else if ((op->ops & EXT_MASK) == EXT_CAST) { 236 strncpy(buf, extopnames_cast[opline->extended_value], sizeof(buf)); 254 const char *ptr = NULL; 255 GET_EXTOPNAMES_CAST(opline->extended_value, ptr); 256 strncpy(buf, ptr, sizeof(buf)); 237 257 } else if ((op->ops & EXT_MASK) == EXT_INIT_FCALL) { 238 strncpy(buf, extopnames_init_fcall[opline->extended_value], sizeof(buf)); 258 const char *ptr = NULL; 259 GET_EXTOPNAMES_INIT_FCALL(opline->extended_value, ptr); 260 strncpy(buf, ptr, sizeof(buf)); 239 261 } else if ((op->ops & EXT_MASK) == EXT_FETCH) { 240 strncpy(buf, extopnames_fetch[opline->extended_value], sizeof(buf)); 262 const char *ptr = NULL; 263 GET_EXTOPNAMES_FETCH(opline->extended_value, ptr); 264 strncpy(buf, ptr, sizeof(buf)); 241 265 } else if ((op->ops & EXT_MASK) == EXT_FE) { 242 strncpy(buf, extopnames_fe[opline->extended_value], sizeof(buf)); 266 const char *ptr = NULL; 267 GET_EXTOPNAMES_FE(opline->extended_value, ptr); 268 strncpy(buf, ptr, sizeof(buf)); 243 269 } else if ((op->ops & EXT_MASK) == EXT_DECLARE) { 244 strncpy(buf, extopnames_declare[opline->extended_value], sizeof(buf)); 270 const char *ptr = NULL; 271 GET_EXTOPNAMES_DECLARE(opline->extended_value, ptr); 272 strncpy(buf, ptr, sizeof(buf)); 245 273 } else if ((op->ops & EXT_MASK) == EXT_SEND_NOREF) { 246 strncpy(buf, extopnames_sendnoref[opline->extended_value], sizeof(buf)); 274 const char *ptr = NULL; 275 GET_EXTOPNAMES_SENDNOREF(opline->extended_value, ptr); 276 strncpy(buf, ptr, sizeof(buf)); 247 277 } else if ((op->ops & EXT_MASK) == EXT_FCLASS) { 248 // XXX: hack to prevent segfault 249 snprintf(buf, sizeof(buf), "%s", extopnames_fetch_class[opline->extended_value]); 278 const char *ptr = NULL; 279 GET_EXTOPNAMES_FETCH_CLASS(opline->extended_value, ptr); 280 snprintf(buf, sizeof(buf), "%s", ptr); 250 281 } else if ((op->ops & EXT_MASK) == EXT_IFACE) { 251 282 snprintf(buf, sizeof(buf), "interface(%lu)", opline->extended_value); … … 368 399 snprintf(buf, sizeof(buf), "$var%u", VAR_NUM(opline->op2.u.var)); 369 400 } else if ((op->ops & OP2_MASK) == OP2_FETCH) { 401 const char *typename = NULL; 402 GET_FETCHTYPENAME(opline->op2.u.EA.type, typename); 370 403 if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { 371 snprintf(buf, sizeof(buf), "%s $class%u", fetchtypename[opline->op2.u.EA.type], VAR_NUM(opline->op2.u.var));404 snprintf(buf, sizeof(buf), "%s $class%u", typename, VAR_NUM(opline->op2.u.var)); 372 405 } else { 373 snprintf(buf, sizeof(buf), "%s", fetchtypename[opline->op2.u.EA.type]);406 snprintf(buf, sizeof(buf), "%s", typename); 374 407 } 375 408 } else if ((op->ops & OP2_MASK) == OP2_INCLUDE) {