1
0
Fork 0

Decompiler: fix array(&$ref)

This commit is contained in:
Xuefer 2015-06-23 17:43:40 +08:00
parent 3e8255b2a7
commit 29e6904ec5
1 changed files with 17 additions and 28 deletions

View File

@ -110,10 +110,10 @@ function decompileAst($ast, $EX) // {{{
if (isset($ast[$i + 1])) {
$key = decompileAst($ast[$i], $EX);
$value = decompileAst($ast[$i + 1], $EX);
$array->value[] = array($key, $value);
$array->value[] = array($key, $value, '');
}
else {
$array->value[] = array(null, decompileAst($ast[$i], $EX));
$array->value[] = array(null, decompileAst($ast[$i], $EX), '');
}
}
return $array;
@ -470,7 +470,7 @@ class Decompiler_ListBox extends Decompiler_Box // {{{
// }}}
class Decompiler_Array extends Decompiler_Value // {{{
{
// emenets
// elements
function Decompiler_Array()
{
$this->value = array();
@ -483,11 +483,11 @@ class Decompiler_Array extends Decompiler_Value // {{{
$elementsCode = array();
$index = 0;
foreach ($this->value as $element) {
list($key, $value) = $element;
list($key, $value, $ref) = $element;
if (!isset($key)) {
$key = $index++;
}
$elementsCode[] = array(str($key, $subindent), str($value, $subindent), $key, $value);
$elementsCode[] = array(str($key, $subindent), str($value, $subindent), $key, $value, $ref);
}
$exp = "array(";
@ -518,7 +518,7 @@ class Decompiler_Array extends Decompiler_Value // {{{
$i = 0;
foreach ($elementsCode as $element) {
list($keyCode, $value) = $element;
list($keyCode, $value, , , $ref) = $element;
if ($multiline) {
if ($i) {
$exp .= ",";
@ -541,6 +541,7 @@ class Decompiler_Array extends Decompiler_Value // {{{
}
}
$exp .= $ref;
$exp .= $value;
$i++;
@ -571,7 +572,7 @@ class Decompiler_ConstArray extends Decompiler_Array // {{{
else {
$keyCode = value($key, $EX);
}
$elements[] = array($keyCode, value($value, $EX));
$elements[] = array($keyCode, value($value, $EX), '');
}
$this->value = $elements;
}
@ -2173,32 +2174,20 @@ class Decompiler
case XC_INIT_ARRAY:
case XC_ADD_ARRAY_ELEMENT: // {{{
$rvalue = $this->getOpVal($op1, $EX, true);
$assoc = $this->getOpVal($op2, $EX);
$element = array($assoc, $rvalue, empty($ext) ? '' : '&');
if ($opc == XC_ADD_ARRAY_ELEMENT) {
$assoc = $this->getOpVal($op2, $EX);
if (isset($assoc)) {
$curResVar->value[] = array($assoc, $rvalue);
}
else {
$curResVar->value[] = array(null, $rvalue);
if ($opc == XC_INIT_ARRAY) {
$resvar = new Decompiler_Array();
if (isset($rvalue)) {
$resvar->value[] = $element;
}
}
else {
if ($opc == XC_INIT_ARRAY) {
$resvar = new Decompiler_Array();
if (!isset($rvalue)) {
continue;
}
}
$assoc = $this->getOpVal($op2, $EX);
if (isset($assoc)) {
$resvar->value[] = array($assoc, $rvalue);
}
else {
$resvar->value[] = array(null, $rvalue);
}
$curResVar->value[] = $element;
}
unset($element);
break;
// }}}
case XC_QM_ASSIGN: