Changeset 744 for trunk


Ignore:
Timestamp:
2011-04-14T06:56:16+02:00 (3 years ago)
Author:
moo
Message:

remove toString which was unclear design

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Decompiler.class.php

    r743 r744  
    1111function str($code, $indent = '') // {{{ 
    1212{ 
     13    if (is_array($code)) { 
     14        $array = array(); 
     15        foreach ($code as $key => $value) { 
     16            $array[$key] = str($value, $indent); 
     17        } 
     18        return $array; 
     19    } 
    1320    if (is_object($code)) { 
    14         $code = toCode($code, $indent); 
    15         return $code->__toString(); 
     21        $code = foldToCode($code, $indent); 
     22        return $code->toCode($indent); 
    1623    } 
    1724 
     
    1926} 
    2027// }}} 
    21 function toCode($src, $indent = '') // {{{ wrap or rewrap anything to Decompiler_Code 
     28function foldToCode($src, $indent = '') // {{{ wrap or rewrap anything to Decompiler_Code 
    2229{ 
    2330    if (is_array($indent)) { 
     
    97104        return $this->src; 
    98105    } 
    99  
    100     function __toString() 
    101     { 
    102         return $this->src; 
    103     } 
    104106} 
    105107// }}} 
     
    122124    function toCode($indent) 
    123125    { 
    124         $op1 = toCode($this->op1, $indent); 
     126        $op1 = foldToCode($this->op1, $indent); 
    125127        if (is_a($this->op1, 'Decompiler_Binop') && $this->op1->opc != $this->opc) { 
    126128            $op1 = "($op1)"; 
     
    128130        $opstr = $this->parent->binops[$this->opc]; 
    129131        if ($op1 == '0' && $this->opc == XC_SUB) { 
    130             return $opstr . toCode($this->op2, $indent); 
    131         } 
    132         return $op1 . ' ' . $opstr . ' ' . toCode($this->op2, $indent); 
     132            return $opstr . str($this->op2, $indent); 
     133        } 
     134        return $op1 . ' ' . $opstr . ' ' . foldToCodfoldToCode($this->op2, $indent); 
    133135    } 
    134136} 
     
    187189    { 
    188190        if (is_a($this->value, 'Decompiler_ListBox')) { 
    189             $exp = toCode($this->value->obj->src, $indent); 
     191            $exp = foldToCode($this->value->obj->src, $indent); 
    190192        } 
    191193        else { 
    192             $exp = toCode($this->value, $indent); 
     194            $exp = foldToCode($this->value, $indent); 
    193195        } 
    194196        foreach ($this->offsets as $dim) { 
    195             $exp .= '[' . toCode($dim, $indent) . ']'; 
     197            $exp .= '[' . foldToCode($dim, $indent) . ']'; 
    196198        } 
    197199        return $exp; 
     
    216218            $dim->value = $this->src; 
    217219            if (!isset($dim->assign)) { 
    218                 return toCode($dim, $indent); 
    219             } 
    220             return toCode($this->dims[0]->assign, $indent) . ' = ' . toCode($dim, $indent); 
     220                return foldToCode($dim, $indent); 
     221            } 
     222            return foldToCode($this->dims[0]->assign, $indent) . ' = ' . foldToCode($dim, $indent); 
    221223        } 
    222224        /* flatten dims */ 
     
    227229                $assign = &$assign[$offset]; 
    228230            } 
    229             $assign = toCode($dim->assign, $indent); 
    230         } 
    231         return $this->toList($assigns) . ' = ' . toCode($this->src, $indent); 
     231            $assign = foldToCode($dim->assign, $indent); 
     232        } 
     233        return $this->toList($assigns) . ' = ' . foldToCode($this->src, $indent); 
    232234    } 
    233235 
     
    449451                    $curticks = $toticks; 
    450452                } 
    451                 echo $indent, toCode($op['php'], $indent), ";\n"; 
     453                echo $indent, str($op['php'], $indent), ";\n"; 
    452454            } 
    453455        } 
     
    461463        switch ($op['op_type']) { 
    462464        case XC_IS_CONST: 
    463             return toCode(value($op['constant']), $EX); 
     465            return foldToCode(value($op['constant']), $EX); 
    464466 
    465467        case XC_IS_VAR: 
     
    468470            $ret = $T[$op['var']]; 
    469471            if ($tostr) { 
    470                 $ret = toCode($ret, $EX); 
     472                $ret = foldToCode($ret, $EX); 
    471473            } 
    472474            if ($free) { 
     
    682684            $body = ob_get_clean(); 
    683685 
    684             $as = toCode($op['fe_as'], $EX); 
     686            $as = foldToCode($op['fe_as'], $EX); 
    685687            if (isset($op['fe_key'])) { 
    686                 $as = toCode($op['fe_key'], $EX) . ' => ' . $as; 
    687             } 
    688             echo "{$indent}foreach (" . toCode($op['fe_src'], $EX) . " as $as) {\n"; 
     688                $as = str($op['fe_key'], $EX) . ' => ' . str($as); 
     689            } 
     690            echo "{$indent}foreach (" . str($op['fe_src'], $EX) . " as $as) {\n"; 
    689691            echo $body; 
    690692            echo "{$indent}}"; 
     
    755757            // $this->dumpop($op, $EX); 
    756758            // any true comes here, so it's a "or" 
    757             $cond = implode(' and ', $op['cond_false']); 
     759            $cond = implode(' and ', str($op['cond_false'])); 
    758760            // var_dump($op['cond'] = $cond); 
    759761            /* 
     
    771773    function unquoteName($str) // {{{ 
    772774    { 
     775        $str = str($str); 
    773776        if (preg_match($this->rQuotedName, $str)) { 
    774777            $str = substr($str, 1, -1); 
     
    910913                    } 
    911914                    if ($opc == XC_UNSET_VAR) { 
    912                         $op['php'] = "unset(" . toCode($rvalue, $EX) . ")"; 
     915                        $op['php'] = "unset(" . str($rvalue, $EX) . ")"; 
    913916                        $lastphpop = &$op; 
    914917                    } 
     
    971974                        ++ $i; 
    972975                        $rvalue = $this->getOpVal($opcodes[$i]['op1'], $EX); 
    973                         $resvar = toCode($lvalue, $EX) . ' = ' . $rvalue; 
     976                        $resvar = str($lvalue, $EX) . ' = ' . $rvalue; 
    974977                    } 
    975978                    else if ($opc == XC_UNSET_DIM) { 
    976                         $op['php'] = "unset(" . toCode($rvalue, $EX) . ")"; 
     979                        $op['php'] = "unset(" . str($rvalue, $EX) . ")"; 
    977980                        $lastphpop = &$op; 
    978981                    } 
     
    995998                        $dim->assign = $lvalue; 
    996999                        if ($dim->isLast) { 
    997                             $resvar = toCode($dim->value, $EX); 
     1000                            $resvar = foldToCode($dim->value, $EX); 
    9981001                        } 
    9991002                        unset($dim); 
    10001003                        break; 
    10011004                    } 
    1002                     $resvar = "$lvalue = " . toCode($rvalue, $EX); 
     1005                    $resvar = "$lvalue = " . str($rvalue, $EX); 
    10031006                    break; 
    10041007                    // }}} 
     
    10071010                    $rvalue = $this->getOpVal($op2, $EX, false); 
    10081011                    if (is_a($rvalue, 'Decompiler_Fetch')) { 
    1009                         $src = toCode($rvalue->src, $EX); 
     1012                        $src = foldToCode($rvalue->src, $EX); 
    10101013                        if (substr($src, 1, -1) == substr($lvalue, 1)) { 
    10111014                            switch ($rvalue->fetchType) { 
     
    10211024                                    $var = $statics[$name]; 
    10221025                                    $resvar .= ' = '; 
    1023                                     $resvar .= toCode(value($var), $EX); 
     1026                                    $resvar .= str(value($var), $EX); 
    10241027                                } 
    10251028                                unset($statics); 
     
    10301033                    } 
    10311034                    // TODO: PHP_6 global 
    1032                     $rvalue = toCode($rvalue, $EX); 
     1035                    $rvalue = foldToCode($rvalue, $EX); 
    10331036                    $resvar = "$lvalue = &$rvalue"; 
    10341037                    break; 
     
    11171120                case XC_SEND_VAR: // {{{ 
    11181121                    $ref = ($opc == XC_SEND_REF ? '&' : ''); 
    1119                     $EX['argstack'][] = $ref . $this->getOpVal($op1, $EX); 
     1122                    $EX['argstack'][] = $ref . str($this->getOpVal($op1, $EX)); 
    11201123                    break; 
    11211124                    // }}} 
     
    12431246                    switch ($opc) { 
    12441247                    case XC_ADD_CHAR: 
    1245                         $op2val = toCode(chr($op2val), $EX); 
     1248                        $op2val = foldToCode(chr($op2val), $EX); 
    12461249                        break; 
    12471250                    case XC_ADD_STRING: 
    1248                         $op2val = toCode($op2val, $EX); 
     1251                        $op2val = foldToCode($op2val, $EX); 
    12491252                        break; 
    12501253                    case XC_ADD_VAR: 
     
    12581261                    } 
    12591262                    else { 
    1260                         $rvalue = $op1val . ' . ' . $op2val; 
     1263                        $rvalue = str($op1val) . ' . ' . str($op2val); 
    12611264                    } 
    12621265                    $resvar = $rvalue; 
     
    12701273                case XC_ECHO: // {{{ 
    12711274                    $op1val = $this->getOpVal($op1, $EX); 
    1272                     $resvar = "echo $op1val"; 
     1275                    $resvar = "echo " . str($op1val); 
    12731276                    break; 
    12741277                    // }}} 
     
    13181321                    // }}} 
    13191322                case XC_RETURN: // {{{ 
    1320                     $resvar = "return " . $this->getOpVal($op1, $EX); 
     1323                    $resvar = "return " . str($this->getOpVal($op1, $EX)); 
    13211324                    break; 
    13221325                    // }}} 
     
    13861389                        $targetop = &$EX['opcodes'][$op2['opline_num']]; 
    13871390                        if ($opc == XC_JMPNZ_EX) { 
    1388                             $targetop['cond_true'][] = toCode($rvalue, $EX); 
     1391                            $targetop['cond_true'][] = foldToCode($rvalue, $EX); 
    13891392                        } 
    13901393                        else { 
    1391                             $targetop['cond_false'][] = toCode($rvalue, $EX); 
     1394                            $targetop['cond_false'][] = foldToCode($rvalue, $EX); 
    13921395                        } 
    13931396                        unset($targetop); 
     
    14071410                    $switchValue = $this->getOpVal($op1, $EX); 
    14081411                    $caseValue = $this->getOpVal($op2, $EX); 
    1409                     $resvar = $switchValue . ' == ' . $caseValue; 
     1412                    $resvar = str($switchValue) . ' == ' . str($caseValue); 
    14101413                    break; 
    14111414                case XC_BRK: 
     
    14611464                case XC_END_SILENCE: // {{{ 
    14621465                    $EX['silence'] --; 
    1463                     $lastresvar = '@' . toCode($lastresvar, $EX); 
     1466                    $lastresvar = '@' . str($lastresvar, $EX); 
    14641467                    break; 
    14651468                    // }}} 
     
    15311534            $a = array_pop($EX['argstack']); 
    15321535            if (is_array($a)) { 
    1533                 array_unshift($args, toCode($a, $EX)); 
     1536                array_unshift($args, foldToCode($a, $EX)); 
    15341537            } 
    15351538            else { 
     
    16461649                    } 
    16471650                } 
    1648                 echo toCode($arg[0], $indent); 
     1651                echo str($arg[0], $indent); 
    16491652            } 
    16501653            if (isset($arg[1])) { 
    1651                 echo ' = ', toCode($arg[1], $indent); 
     1654                echo ' = ', str($arg[1], $indent); 
    16521655            } 
    16531656        } 
     
    17251728                    echo $newindent; 
    17261729                    echo $prefix, $name, ' = '; 
    1727                     echo toCode(value($v), $newindent); 
     1730                    echo str(value($v), $newindent); 
    17281731                    echo ";\n"; 
    17291732                } 
     
    17991802                if (isset($value)) { 
    18001803                    echo ' = '; 
    1801                     echo toCode(value($value), $newindent); 
     1804                    echo str(value($value), $newindent); 
    18021805                } 
    18031806                echo ";\n"; 
Note: See TracChangeset for help on using the changeset viewer.