Changeset 744 in svn for trunk/Decompiler.class.php


Ignore:
Timestamp:
2011-04-14T04:56:16Z (4 years ago)
Author:
Xuefer
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.