]> granicus.if.org Git - php/commitdiff
better output for disassembler
authorkrakjoe <joe.watkins@live.co.uk>
Thu, 21 Nov 2013 13:52:20 +0000 (13:52 +0000)
committerkrakjoe <joe.watkins@live.co.uk>
Thu, 21 Nov 2013 13:52:20 +0000 (13:52 +0000)
phpdbg_print.c
phpdbg_prompt.c
phpdbg_prompt.h

index 8929fb0faf819589a827cd0aabdd0c43b3e37a58..9865fe9750f012a63b9b94d9776d0e6f022d7df8 100644 (file)
@@ -42,7 +42,8 @@ static inline void phpdbg_print_function_helper(zend_function *method TSRMLS_DC)
     switch (method->type) {
         case ZEND_USER_FUNCTION: {
             zend_op_array* op_array = &(method->op_array);
-
+                       HashTable vars;
+                       
             if (op_array) {
                 zend_op     *opline = &(op_array->opcodes[0]);
                 zend_uint   opcode = 0,
@@ -64,16 +65,21 @@ static inline void phpdbg_print_function_helper(zend_function *method TSRMLS_DC)
                         op_array->filename ? op_array->filename : "unknown");
                 }
 
-
+                               zend_hash_init(&vars, op_array->last, NULL, NULL, 0);
                 do {
-                    const char *decode = phpdbg_decode_opcode(opline->opcode);
+                    char *decode = phpdbg_decode_opline(op_array, opline, &vars TSRMLS_CC);
                     if (decode != NULL) {
                         phpdbg_writeln(
-                            "\t\t#%lu\t%p %s", opline->lineno, opline, decode);
+                            "\t\t#%lu\t%p %-30s %s", 
+                            opline->lineno,
+                            opline, 
+                            phpdbg_decode_opcode(opline->opcode),
+                            decode);
                     } else phpdbg_error("\tFailed to decode opline @ %ld", opline);
-
+                                       free(decode);
                     opline++;
                 } while (++opcode < end);
+                zend_hash_destroy(&vars);
             }
         } break;
 
index 27c54fd9e396b0521d8dc5c3ada52a5878b492b4..4f557cdc9e55883d07cd47000b968598aa24d532 100644 (file)
@@ -1059,7 +1059,7 @@ static inline char *phpdbg_decode_op(zend_op_array *ops, znode_op *op, zend_uint
        return decode;
 } /* }}} */
 
-static inline char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRMLS_DC) /*{{{ */
+char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRMLS_DC) /*{{{ */
 {
        char *decode[3];
        
index e41ef624d2ef2a3197e8f901d73aabbdb51965b2..a410cc4ec4a478f1d2c318e7fbd174006bcbc37a 100644 (file)
@@ -23,6 +23,7 @@
 void phpdbg_init(char *init_file, size_t init_file_len, zend_bool use_default TSRMLS_DC);
 int phpdbg_interactive(TSRMLS_D);
 void phpdbg_print_opline(zend_execute_data *execute_data, zend_bool ignore_flags TSRMLS_DC);
+char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRMLS_DC);
 int phpdbg_compile(TSRMLS_D);
 void phpdbg_clean(zend_bool full TSRMLS_DC);
 void phpdbg_sigint_handler(int signo);