Skip to content

Commit

Permalink
Fix #1775
Browse files Browse the repository at this point in the history
  • Loading branch information
dreamsxin authored and sergeyklay committed Feb 21, 2019
1 parent ce5176e commit 6e53b86
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
10 changes: 7 additions & 3 deletions Library/Backends/ZendEngine3/Backend.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ public function getFcallManager()
public function getVariableCode(Variable $variable)
{
if ($variable->isDoublePointer() ||
$variable->isSuperGlobal() ||
\in_array($variable->getName(), ['this_ptr', 'return_value']) ||
\in_array($variable->getType(), ['int', 'long'])) {
return $variable->getName();
Expand Down Expand Up @@ -217,7 +216,7 @@ public function generateInitCode(&$groupVariables, $type, $pointer, Variable $va
{
$isComplex = ('variable' == $type || 'string' == $type || 'array' == $type || 'resource' == $type || 'callable' == $type || 'object' == $type);

if ($isComplex && !$variable->isDoublePointer() && !$variable->isSuperGlobal()) { /* && $variable->mustInitNull() */
if ($isComplex && !$variable->isDoublePointer()) { /* && $variable->mustInitNull() */
$groupVariables[] = $variable->getName();
switch ($variable->getRealname()) {
case '__$null':
Expand All @@ -237,7 +236,12 @@ public function generateInitCode(&$groupVariables, $type, $pointer, Variable $va
return;
}

if ($variable->isDoublePointer() || $variable->isSuperGlobal()) {
if ($variable->isSuperGlobal()) {
$groupVariables[] = $variable->getName();
return;
}

if ($variable->isDoublePointer()) {
/* Double pointers for ZE3 are used as zval * */
$ptr = $isComplex ? $pointer : $pointer.$pointer;
if ($variable->mustInitNull()) {
Expand Down
7 changes: 4 additions & 3 deletions kernels/ZendEngine3/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ int zephir_fetch_parameters(int num_args, int required_args, int optional_args,
/**
* Gets the global zval into PG macro
*/
int zephir_get_global(zval **arr, const char *global, unsigned int global_length)
int zephir_get_global(zval *arr, const char *global, unsigned int global_length)
{
zval *gv;
zend_bool jit_initialization = PG(auto_globals_jit);
Expand All @@ -96,14 +96,15 @@ int zephir_get_global(zval **arr, const char *global, unsigned int global_length
if ((gv = zend_hash_find_ind(&EG(symbol_table), str)) != NULL) {
ZVAL_DEREF(gv);
if (Z_TYPE_P(gv) == IS_ARRAY) {
*arr = gv;
ZVAL_COPY_VALUE(arr, gv);
zend_string_release(str);
return SUCCESS;
}
}
}

*arr = NULL;
ZEPHIR_INIT_NVAR(arr);
array_init(arr);
zend_string_release(str);
return FAILURE;
}
Expand Down
2 changes: 1 addition & 1 deletion kernels/ZendEngine3/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ extern zend_string* i_self;
#define RETURN_MM_NULL() { RETVAL_NULL(); ZEPHIR_MM_RESTORE(); return; }

/* Globals functions */
int zephir_get_global(zval **arr, const char *global, unsigned int global_length);
int zephir_get_global(zval *arr, const char *global, unsigned int global_length);

/* Count */
void zephir_fast_count(zval *result, zval *array);
Expand Down

0 comments on commit 6e53b86

Please sign in to comment.