Ignore:
Timestamp:
2013-07-14T20:46:23+02:00 (9 months ago)
Author:
moo
Message:

Decompiler: bind FETCH_CLASS & CATCH together; fix unset for PHP5.1; improve printBacktrace for devel

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Decompiler.class.php

    r1307 r1308  
    1515        $args = array(); 
    1616        foreach ($stack['args'] as $arg) { 
    17             if (is_array($arg)) { 
     17            if (is_scalar($arg)) { 
     18                $args[] = var_export($arg, true); 
     19            } 
     20            else if (is_array($arg)) { 
    1821                $array = array(); 
    1922                foreach ($arg as $key => $value) { 
     
    2730            } 
    2831            else { 
    29                 $args[] = (string) $arg; 
     32                $args[] = gettype($arg); 
    3033            } 
    3134        } 
     
    987990                if ($opcodes[$i]['opcode'] == XC_CATCH) { 
    988991                    $catchOpLine = $i; 
    989                     $this->removeJmpInfo($EX, $catchOpLine); 
     992                    $this->removeJmpInfo($EX, $catchOpLine - 1); 
    990993 
    991994                    $catchNext = $opcodes[$catchOpLine]['extended_value']; 
     
    10141017            $this->endScope($EX); 
    10151018            echo $indent, '}', PHP_EOL; 
     1019            if (!$catchBlocks) { 
     1020                printBacktrace(); 
     1021                assert($catchBlocks); 
     1022            } 
    10161023            foreach ($catchBlocks as $catchFirst => $catchInfo) { 
    10171024                list($catchOpLine, $catchBodyLast) = $catchInfo; 
     
    13531360            case XC_CATCH: 
    13541361                $catchNext = $op['extended_value']; 
    1355                 $op['jmpouts'] = array($catchNext); 
    1356                 $opcodes[$catchNext]['jmpins'][] = $i; 
     1362                assert($opcodes[$i - 1]['opcode'] == XC_FETCH_CLASS); 
     1363                $opcodes[$i - 1]['jmpouts'] = array($catchNext); 
     1364                $opcodes[$catchNext]['jmpins'][] = $i - 1; 
    13571365                break; 
    13581366            } 
     
    15681576                } 
    15691577                else { 
    1570                     $rvalue = $this->getOpVal($op1, $EX); 
     1578                    $rvalue = isset($op1['constant']) ? '$' . $op1['constant'] /* PHP5.1- */ : $this->getOpVal($op1, $EX); 
    15711579                } 
    15721580 
Note: See TracChangeset for help on using the changeset viewer.