Changeset 735


Ignore:
Timestamp:
2011-04-10T16:09:17+02:00 (4 years ago)
Author:
moo
Message:

decompiler: fix array assoc handling, remove default return

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Decompiler.class.php

    r733 r735  
    252252        $exp = "array("; 
    253253        $indent = $indent . INDENT; 
    254         $assoclen = 0; 
     254        $assocWidth = 0; 
    255255        $multiline = 0; 
    256256        $i = 0; 
    257257        foreach ($this->value as $k => $v) { 
    258258            if ($i !== $k) { 
     259                $assocWidth = 1; 
     260            } 
     261            ++$i; 
     262        } 
     263        foreach ($this->value as $k => $v) { 
     264            if ($assocWidth) { 
    259265                $len = strlen($k); 
    260                 if ($assoclen < $len) { 
    261                     $assoclen = $len; 
     266                if ($assocWidth < $len) { 
     267                    $assocWidth = $len; 
    262268                } 
    263269            } 
     
    266272                $multiline ++; 
    267273            } 
    268             ++ $i; 
    269         } 
    270         if ($assoclen) { 
    271             $assoclen += 2; 
     274        } 
     275        if ($assocWidth) { 
     276            $assocWidth += 2; 
    272277        } 
    273278 
     
    289294 
    290295            $k = var_export($k, true); 
    291             if ($multiline) { 
    292                 $exp .= sprintf("%{$assoclen}s => ", $k); 
    293             } 
    294             else if ($assoclen) { 
    295                 $exp .= $k . ' => '; 
     296            if ($assocWidth) { 
     297                if ($multiline) { 
     298                    $exp .= sprintf("%{$assocWidth}s => ", $k); 
     299                } 
     300                else { 
     301                    $exp .= $k . ' => '; 
     302                } 
    296303            } 
    297304 
     
    447454    } 
    448455    // }}} 
    449     function &fixOpcode($opcodes, $removeTailing = false) // {{{ 
    450     { 
    451         if ($removeTailing) { 
    452             $last = count($opcodes) - 1; 
    453             if ($opcodes[$last]['opcode'] == XC_HANDLE_EXCEPTION) { 
    454                 unset($opcodes[$last]); 
    455             } 
    456         } 
     456    function &fixOpcode($opcodes, $removeTailing = false, $defaultReturnValue = null) // {{{ 
     457    { 
    457458        for ($i = 0, $cnt = count($opcodes); $i < $cnt; $i ++) { 
    458459            if (function_exists('xcache_get_fixed_opcode')) { 
     
    486487            } 
    487488        } 
     489 
     490        if ($removeTailing) { 
     491            $last = count($opcodes) - 1; 
     492            if ($opcodes[$last]['opcode'] == XC_HANDLE_EXCEPTION) { 
     493                unset($opcodes[$last]); 
     494                --$last; 
     495            } 
     496            if ($opcodes[$last]['opcode'] == XC_RETURN) { 
     497                $op1 = $opcodes[$last]['op1']; 
     498                if ($op1['op_type'] == XC_IS_CONST && array_key_exists('constant', $op1) && $op1['constant'] === $defaultReturnValue) { 
     499                    unset($opcodes[$last]); 
     500                    --$last; 
     501                } 
     502            } 
     503        } 
    488504        return $opcodes; 
    489505    } 
     
    491507    function &dop_array($op_array, $indent = '') // {{{ 
    492508    { 
    493         $op_array['opcodes'] = $this->fixOpcode($op_array['opcodes'], true); 
     509        $op_array['opcodes'] = $this->fixOpcode($op_array['opcodes'], true, $indent == '' ? 1 : null); 
    494510        $opcodes = &$op_array['opcodes']; 
    495511        $EX['indent'] = ''; 
Note: See TracChangeset for help on using the changeset viewer.