Changeset 1587 in svn


Ignore:
Timestamp:
2015-04-18T13:25:48Z (4 years ago)
Author:
Xuefer
Message:

phpdop: update for new struct layout

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/bin/phpdc.phpr

    r1285 r1587  
    33
    44$srcdir = dirname(__FILE__);
    5 require_once("$srcdir/../lib/Decompiler.class.php");
     5require_once("$srcdir/../lib/orig/Decompiler.class.php");
    66if (file_exists("$srcdir/phpdc.debug.php")) {
    77    include("$srcdir/phpdc.debug.php");
  • trunk/bin/phpdop.phpr

    r1338 r1587  
    88}
    99
    10 function get_op($op)
     10function get_op($op, $which)
    1111{
    12     switch ($op['op_type']) {
     12    switch ($op[$which . '_type']) {
    1313    case 1: // CONST
    14         return var_export($op['constant'], true);
     14        return $op[$which . '.var'] . var_export($op[$which . '.constant'], true);
    1515
    1616    case 2: // IS_TMP_VAR
    17         return 't@' . $op['var'];
     17        return 't@' . $op[$which . '.var'];
    1818
    1919    case 4:
    20         return 'v$' . $op['var'];
     20        return 'v$' . $op[$which . '.var'];
    2121
    2222    case 8: // UNUSED
    23         if (isset($op['opline_num'])) {
    24             return 'l#' . $op['opline_num'];
     23        if (isset($op[$which . '.opline_num'])) {
     24            return 'l#' . $op[$which . '.opline_num'];
    2525        }
    2626        else {
     
    2929
    3030    default:
    31         return $op['op_type'] . $op['var'];
     31        return $op[$which . '_type'] . '?' . $op[$which . '.var'];
    3232    }
    3333}
     
    3737    global $decompiler;
    3838
    39     $types = array('result' => 5, 'op1' => 20, 'op2' => 20);
     39    $types = array('result' => 8, 'op1' => 20, 'op2' => 20);
    4040    $opcodes = &$op_array['opcodes'];
    4141    $decompiler->fixOpcode($opcodes);
     
    5252        echo str_pad($name, 25);
    5353
    54         foreach ($types as $t => $len) {
    55             echo str_pad(isset($op[$t]) ? get_op($op[$t]) : "", $len);
     54        foreach ($types as $which => $len) {
     55            echo str_pad(get_op($op, $which), $len);
    5656        }
    5757        printf("%5s", isset($op['extended_value']) ?  $op['extended_value'] : "");
  • trunk/lib/Decompiler.class.php

    r1586 r1587  
    19741974                    $EX['called_scope'] = null;
    19751975                }
    1976                 $EX['fbc'] = isset($op2['constant']) ? $op2['constant'] : $this->getOpVal($op2, $EX);
     1976                // file_put_contents('/tmp/a', var_export($this->dc['op_array']['literals'], true));
     1977                $EX['fbc'] = isset($op2['constant']) ? $op2['var'] . ' ' . $op2['constant'] : $this->getOpVal($op2, $EX);
    19771978                break;
    19781979                // }}}
     
    20262027            case XC_DECLARE_INHERITED_CLASS_DELAYED: // {{{
    20272028                $key = $op1['constant'];
    2028                 // missing tailing \0 (outside of the string)
     2029                // possible missing tailing \0 (outside of the string)
    20292030                $key = substr($key . ".", 0, strlen($key));
     2031                    break;
    20302032                if (!isset($this->dc['class_table'][$key])) {
    20312033                    echo "class not found: ", $key, "\nexisting classes are:\n";
     
    23272329                break;
    23282330            case XC_DECLARE_FUNCTION:
    2329                 $this->dfunction($this->dc['function_table'][$op1['constant']], $EX['indent']);
     2331                $key = $op1['constant'];
     2332                // possible missing tailing \0 (outside of the string)
     2333                $key = substr($key . ".", 0, strlen($key));
     2334                $this->dfunction($this->dc['function_table'][$key], $EX['indent']);
    23302335                break;
    23312336            case XC_DECLARE_LAMBDA_FUNCTION: // {{{
    23322337                ob_start();
    2333                 $this->dfunction($this->dc['function_table'][$op1['constant']], $EX['indent']);
     2338                $key = $op1['constant'];
     2339                // possible missing tailing \0 (outside of the string)
     2340                $key = substr($key . ".", 0, strlen($key));
     2341                $this->dfunction($this->dc['function_table'][$key], $EX['indent']);
    23342342                $resvar = ob_get_clean();
    23352343                $istmpres = true;
  • trunk/processor/processor.m4

    r1578 r1587  
    663663                IFDASM(`{
    664664                    zval *zv;
    665                     zval *srczv = &dasm->active_op_array_src->literals[SRC(`$1.constant')].constant;
     665                    zval *srczv;
     666                    srczv = &dasm->active_op_array_src->literals[SRC(`$1.constant')].constant;
     667                    if (Z_TYPE_P(srczv) == IS_STRING) {
     668                        size_t index = SRC(`$1.constant');
     669                        fprintf(stderr, "%p %p %s\n", srczv, Z_STRVAL_P(srczv), Z_STRVAL_P(srczv));
     670                    }
    666671                    ALLOC_ZVAL(zv);
    667672                    MAKE_COPY_ZVAL(&srczv, zv);
    668673                    add_assoc_zval_ex(DST(), XCACHE_STRS("$1.constant"), zv);
     674                    add_assoc_long_ex(DST(), XCACHE_STRS("$1.var"), SRC(`$1.constant'));
    669675                }
    670676                ', `
  • trunk/xcache/xc_opcode_spec_def.h

    r1486 r1587  
    8484    OPSPEC(    UNUSED,     UNUSED,     UNUSED,        TMP) /* 57 BEGIN_SILENCE                  */
    8585    OPSPEC(    UNUSED,        TMP,     UNUSED,     UNUSED) /* 58 END_SILENCE                    */
     86#ifdef ZEND_ENGINE_2_4
     87    OPSPEC(INIT_FCALL,     UNUSED,        STD,     UNUSED) /* 59 INIT_FCALL_BY_NAME             */
     88#else
    8689    OPSPEC(INIT_FCALL,        STD,        STD,     UNUSED) /* 59 INIT_FCALL_BY_NAME             */
    87 #ifdef ZEND_ENGINE_2
    88     OPSPEC(     FCALL,        STD,     OPLINE,        VAR) /* 60 DO_FCALL                       */
    89     OPSPEC(     FCALL,        STD,     OPLINE,        VAR) /* 61 DO_FCALL_BY_NAME               */
     90#endif
     91#ifdef ZEND_ENGINE_2
     92    OPSPEC(     FCALL,        STD,     UNUSED,        VAR) /* 60 DO_FCALL                       */
     93    OPSPEC(     FCALL,     UNUSED,     UNUSED,        VAR) /* 61 DO_FCALL_BY_NAME               */
    9094#else
    9195    OPSPEC(     FCALL,        STD,     UNUSED,        VAR)
     
    209213#   endif
    210214    OPSPEC(    UNUSED,        STD,     OPLINE,     UNUSED) /* 108 THROW                          */
     215#   ifdef ZEND_ENGINE_2_4
     216    OPSPEC(    FCLASS,     UNUSED,        STD,      CLASS) /* 109 FETCH_CLASS                    */
     217#   else
    211218    OPSPEC(    FCLASS,        STD,        STD,      CLASS) /* 109 FETCH_CLASS                    */
     219#   endif
    212220    OPSPEC(    UNUSED,        STD,     UNUSED,        VAR) /* 110 CLONE                          */
    213221
  • trunk/xcache/xc_utils.c

    r1562 r1587  
    302302    }
    303303    switch (*op_type) {
     304    case IS_CONST:
     305        if (spec == OPSPEC_UNUSED || spec == OPSPEC_OPLINE) {
     306            *op_type = IS_UNUSED;
     307        }
     308        break;
    304309    case IS_TMP_VAR:
    305310    case IS_VAR:
Note: See TracChangeset for help on using the changeset viewer.