Changeset 44 for eaccelerator/trunk/eaccelerator.c
- Timestamp:
- 12/27/04 15:02:31 (4 years ago)
- Files:
-
- eaccelerator/trunk/eaccelerator.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
eaccelerator/trunk/eaccelerator.c
r35 r44 5767 5767 }; 5768 5768 5769 static const char* extopnames_fe[] = { 5770 "", /* 0 */ 5771 "FE_FETCH_BYREF", /* 1 */ 5772 "FE_FETCH_WITH_KEY" /* 2 */ 5773 }; 5774 5769 5775 static void dump_write(const char* s, uint len) { 5770 5776 uint i = 0; … … 5888 5894 } 5889 5895 5896 static const char *color_list[] = { 5897 "#FF0000", 5898 "#00FF00", 5899 "#0000FF", 5900 "#FFFF00", 5901 "#00FFFF", 5902 "#FF00FF", 5903 "#800000", 5904 "#008000", 5905 "#000080", 5906 "#808000", 5907 "#008080", 5908 "#800080" 5909 }; 5910 5911 static char *color(int num) { 5912 return color_list[num % (sizeof(color_list)/sizeof(char *))]; 5913 } 5914 5915 static char *get_file_contents(char *filename) 5916 { 5917 struct stat st; 5918 char *buf; 5919 FILE *fp; 5920 5921 if (stat(filename, &st) == -1) 5922 return NULL; 5923 5924 buf = emalloc(st.st_size); 5925 if (buf == NULL) 5926 return NULL; 5927 5928 fp = fopen(filename, "rb"); 5929 fread(buf, 1, st.st_size, fp); 5930 fclose(fp); 5931 5932 return buf; 5933 } 5934 5935 static void print_file_line(char *p, int line) 5936 { 5937 char *s; 5938 5939 if (p == NULL) { 5940 zend_printf("..can't open file.."); 5941 return; 5942 } 5943 5944 while (line > 0 && *p) { 5945 if (*p == '\n') { 5946 line --; 5947 } 5948 else if (line == 1) { 5949 if (*p == '<') 5950 zend_printf("<"); 5951 else if (*p == '>') 5952 zend_printf(">"); 5953 else 5954 zend_printf("%c", *p); 5955 } 5956 5957 p++; 5958 } 5959 } 5960 5890 5961 static void dump_op_array(eaccelerator_op_array* p TSRMLS_DC) { 5891 5962 zend_op *opline; 5892 5963 zend_op *end; 5964 char *filebuf; 5965 unsigned last_line = 0; 5893 5966 5894 5967 #ifdef ZEND_ENGINE_2 5895 zend_printf("T = %u, size = %u\n, brk_count = %u <br>\n", p->T, p->last, p->last_brk_cont);5896 #else 5897 zend_printf("T = %u, size = %u\n, uses_globals = %d, brk_count = %u <br>\n", p->T, p->last ,p->uses_globals, p->last_brk_cont);5968 zend_printf("T = %u, size = %u\n, brk_count = %u, file = %s<br>\n", p->T, p->last, p->last_brk_cont, p->filename); 5969 #else 5970 zend_printf("T = %u, size = %u\n, uses_globals = %d, brk_count = %u, file = %s<br>\n", p->T, p->last ,p->uses_globals, p->last_brk_cont, p->filename); 5898 5971 #endif 5899 5972 … … 5919 5992 end = opline + p->last; 5920 5993 5994 filebuf = get_file_contents(p->filename); 5995 5921 5996 ZEND_PUTS("<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"900\" bgcolor=\"#000000\" align=\"center\" style=\"table-layout:fixed\">\n"); 5922 5997 ZEND_PUTS("<thead valign=\"middle\" bgcolor=\"#9999cc\"><tr><th width=\"40\">N</th><th width=\"160\">OPCODE</th><th width=\"160\">EXTENDED_VALUE</th><th width=\"220\">OP1</th><th width=\"220\">OP2</th><th width=\"80\">RESULT</th></tr></thead>\n"); … … 5924 5999 for (;opline < end; opline++) { 5925 6000 const opcode_dsc* op = get_opcode_dsc(opline->opcode); 6001 6002 while (last_line < opline->lineno) { 6003 last_line++; 6004 zend_printf("<tr><td colspan=6 bgcolor=black><pre><font color=#80ff80>"); 6005 print_file_line(filebuf, last_line); 6006 zend_printf("</font></pre></td></tr>\n"); 6007 } 6008 5926 6009 if (op != NULL) { 5927 zend_printf("<tr><td> %d </td><td>%s </td>",n, op->opname);6010 zend_printf("<tr><td><font color=%s>%d</font> </td><td>%s </td>",color(n), n, op->opname); 5928 6011 if ((op->ops & EXT_MASK) == EXT_OPLINE) { 5929 zend_printf("<td> opline(%lu) </td>",opline->extended_value);6012 zend_printf("<td><font color=%s>opline(%lu)</font> </td>",color(opline->extended_value),opline->extended_value); 5930 6013 } else if ((op->ops & EXT_MASK) == EXT_FCALL) { 5931 6014 zend_printf("<td>args(%lu) </td>",opline->extended_value); … … 5940 6023 } else if ((op->ops & EXT_MASK) == EXT_FETCH) { 5941 6024 zend_printf("<td>%s </td>", extopnames_fetch[opline->extended_value]); 6025 } else if ((op->ops & EXT_MASK) == EXT_FE) { 6026 zend_printf("<td>%s </td>", extopnames_fe[opline->extended_value]); 5942 6027 } else if ((op->ops & EXT_MASK) == EXT_DECLARE) { 5943 6028 zend_printf("<td>%s </td>", extopnames_declare[opline->extended_value]); … … 5951 6036 zend_printf("<td>$class%u </td>",VAR_NUM(opline->extended_value)); 5952 6037 } else if ((op->ops & EXT_MASK) == EXT_BIT) { 5953 zend_printf("<td>% d </td>",opline->extended_value?1:0);6038 zend_printf("<td>%s </td>",opline->extended_value?"true":"false"); 5954 6039 } else if ((op->ops & EXT_MASK) == EXT_ISSET) { 5955 6040 if (opline->extended_value == ZEND_ISSET) { … … 5989 6074 5990 6075 if ((op->ops & OP1_MASK) == OP1_OPLINE) { 5991 zend_printf("<td> opline(%d) </td>",opline->op1.u.opline_num);6076 zend_printf("<td><font color=%s>opline(%d)</font> </td>", color(opline->op1.u.opline_num), opline->op1.u.opline_num); 5992 6077 #ifdef ZEND_ENGINE_2 5993 6078 } else if ((op->ops & OP1_MASK) == OP1_JMPADDR) { 5994 zend_printf("<td>opline(%u) </td>",(unsigned int)(opline->op1.u.jmp_addr - p->opcodes)); 6079 zend_printf("<td><font color=%s>opline(%u)</font> </td>", 6080 color((unsigned int)(opline->op1.u.jmp_addr - p->opcodes)), 6081 (unsigned int)(opline->op1.u.jmp_addr - p->opcodes)); 5995 6082 } else if ((op->ops & OP1_MASK) == OP1_CLASS) { 5996 6083 zend_printf("<td>$class%u </td>",VAR_NUM(opline->op1.u.var)); … … 6016 6103 offset = jmp_to->parent; 6017 6104 } while (--level > 0); 6018 zend_printf("<td> opline(%d) </td>",jmp_to->brk);6105 zend_printf("<td><font color=%s>opline(%d)</font> </td>",color(jmp_to->brk),jmp_to->brk); 6019 6106 } else { 6020 6107 brk_failed: … … 6035 6122 offset = jmp_to->parent; 6036 6123 } while (--level > 0); 6037 zend_printf("<td> opline(%d) </td>",jmp_to->cont);6124 zend_printf("<td><font color=%s>opline(%d)</font> </td>",color(jmp_to->cont),jmp_to->cont); 6038 6125 } else { 6039 6126 cont_failed: … … 6043 6130 zend_printf("<td>arg(%ld) </td>",opline->op1.u.constant.value.lval); 6044 6131 } else if ((op->ops & OP1_MASK) == OP1_VAR) { 6045 zend_printf("<td> $var%u </td>",VAR_NUM(opline->op1.u.var));6132 zend_printf("<td><font color=%s>$var%u</font> </td>", color(VAR_NUM(opline->op1.u.var)), VAR_NUM(opline->op1.u.var)); 6046 6133 } else if ((op->ops & OP1_MASK) == OP1_TMP) { 6047 zend_printf("<td> $tmp%u </td>",VAR_NUM(opline->op1.u.var));6134 zend_printf("<td><font color=%s>$tmp%u</font> </td>", color(VAR_NUM(opline->op1.u.var)), VAR_NUM(opline->op1.u.var)); 6048 6135 } else { 6049 6136 if (opline->op1.op_type == IS_CONST) { … … 6052 6139 ZEND_PUTS(" </td>"); 6053 6140 } else if (opline->op1.op_type == IS_TMP_VAR) { 6054 zend_printf("<td> $tmp%u </td>",VAR_NUM(opline->op1.u.var));6141 zend_printf("<td><font color=%s>$tmp%u</font> </td>", color(VAR_NUM(opline->op1.u.var)), VAR_NUM(opline->op1.u.var)); 6055 6142 } else if (opline->op1.op_type == IS_VAR) { 6056 zend_printf("<td> $var%u </td>",VAR_NUM(opline->op1.u.var));6143 zend_printf("<td><font color=%s>$var%u</font> </td>", color(VAR_NUM(opline->op1.u.var)), VAR_NUM(opline->op1.u.var)); 6057 6144 } else if (opline->op1.op_type == IS_UNUSED) { 6058 6145 ZEND_PUTS("<td> </td>"); … … 6063 6150 6064 6151 if ((op->ops & OP2_MASK) == OP2_OPLINE) { 6065 zend_printf("<td> opline(%d) </td>",opline->op2.u.opline_num);6152 zend_printf("<td><font color=%s>opline(%d)</font> </td>",color(opline->op2.u.opline_num),opline->op2.u.opline_num); 6066 6153 #ifdef ZEND_ENGINE_2 6067 6154 } else if ((op->ops & OP2_MASK) == OP2_JMPADDR) { 6068 zend_printf("<td> opline(%u) </td>",(unsigned int)(opline->op2.u.jmp_addr - p->opcodes));6155 zend_printf("<td><font color=%s>opline(%u)</font> </td>",color((unsigned int)(opline->op2.u.jmp_addr - p->opcodes)),(unsigned int)(opline->op2.u.jmp_addr - p->opcodes)); 6069 6156 } else if ((op->ops & OP2_MASK) == OP2_CLASS) { 6070 6157 zend_printf("<td>$class%u </td>",VAR_NUM(opline->op2.u.var)); 6071 6158 #endif 6072 6159 } else if ((op->ops & OP2_MASK) == OP2_VAR) { 6073 zend_printf("<td> $var%u </td>",VAR_NUM(opline->op2.u.var));6160 zend_printf("<td><font color=%s>$var%u</font> </td>", color(VAR_NUM(opline->op2.u.var)), VAR_NUM(opline->op2.u.var)); 6074 6161 } else if ((op->ops & OP2_MASK) == OP2_FETCH) { 6075 6162 #ifdef ZEND_ENGINE_2 … … 6112 6199 ZEND_PUTS(" </td>"); 6113 6200 } else if (opline->op2.op_type == IS_TMP_VAR) { 6114 zend_printf("<td> $tmp%u </td>",VAR_NUM(opline->op2.u.var));6201 zend_printf("<td><font color=%s>$tmp%u</font> </td>", color(VAR_NUM(opline->op2.u.var)), VAR_NUM(opline->op2.u.var)); 6115 6202 } else if (opline->op2.op_type == IS_VAR) { 6116 zend_printf("<td> $var%u </td>",VAR_NUM(opline->op2.u.var));6203 zend_printf("<td><font color=%s>$var%u</font> </td>", color(VAR_NUM(opline->op2.u.var)), VAR_NUM(opline->op2.u.var)); 6117 6204 } else if (opline->op2.op_type == IS_UNUSED) { 6118 6205 ZEND_PUTS("<td> </td>"); … … 6129 6216 ZEND_PUTS("</td>"); 6130 6217 } else if (opline->result.op_type == IS_TMP_VAR) { 6131 zend_printf("<td> $tmp%u</td>",VAR_NUM(opline->result.u.var));6218 zend_printf("<td><font color=%s>$tmp%u</font> </td>", color(VAR_NUM(opline->op2.u.var)), VAR_NUM(opline->op2.u.var)); 6132 6219 } else if (opline->result.op_type == IS_VAR) { 6133 6220 if ((opline->result.u.EA.type & EXT_TYPE_UNUSED) != 0) 6134 zend_printf("<td> $var%u <small>(unused)</small></td>",VAR_NUM(opline->result.u.var));6221 zend_printf("<td><font color=%s>$var%u <small>(unused)</small></font> </td>", color(VAR_NUM(opline->result.u.var)), VAR_NUM(opline->result.u.var)); 6135 6222 else 6136 zend_printf("<td> $var%u</td>",VAR_NUM(opline->result.u.var));6223 zend_printf("<td><font color=%s>$var%u</font> </td>", color(VAR_NUM(opline->result.u.var)), VAR_NUM(opline->result.u.var)); 6137 6224 } else if (opline->result.op_type == IS_UNUSED) { 6138 6225 ZEND_PUTS("<td> </td>"); … … 6145 6232 break; 6146 6233 case RES_TMP: 6147 zend_printf("<td> $tmp%u</td>",VAR_NUM(opline->result.u.var));6234 zend_printf("<td><font color=%s>$tmp%u</font> </td>", color(VAR_NUM(opline->result.u.var)), VAR_NUM(opline->result.u.var)); 6148 6235 break; 6149 6236 case RES_VAR: 6150 6237 if ((opline->result.u.EA.type & EXT_TYPE_UNUSED) != 0) { 6151 zend_printf("<td> $var%u <small>(unused)</small></td>",VAR_NUM(opline->result.u.var));6238 zend_printf("<td><font color=%s>$var%u <small>(unused)</small></font> </td>", color(VAR_NUM(opline->result.u.var)), VAR_NUM(opline->result.u.var)); 6152 6239 } else { 6153 zend_printf("<td> $var%u</td>",VAR_NUM(opline->result.u.var));6240 zend_printf("<td><font color=%s>$var%u</font> </td>", color(VAR_NUM(opline->result.u.var)), VAR_NUM(opline->result.u.var)); 6154 6241 } 6155 6242 break; … … 6165 6252 } 6166 6253 ZEND_PUTS("</tbody></table>\n"); 6254 6255 efree(filebuf); 6167 6256 } 6168 6257 }