Changeset 1308 in svn for trunk


Ignore:
Timestamp:
2013-07-14T20:46:23+02:00 (2 years ago)
Author:
Xuefer
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.