Skip to content

Commit

Permalink
Updated StaticPublicPropertiesTest.php
Browse files Browse the repository at this point in the history
  • Loading branch information
dreamsxin committed Jan 1, 2020
1 parent c61147b commit aeff1fd
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 7 deletions.
53 changes: 50 additions & 3 deletions Library/Statements/Let/StaticPropertyAdd.php
Expand Up @@ -184,9 +184,56 @@ public function assignStatic(
$statement
);

$compilationContext->backend->addStaticProperty($classEntry, $property, $variableVariable, $compilationContext);
if ($variableVariable->isTemporal()) {
$variableVariable->setIdle(true);
switch ($variableVariable->getType()) {
case 'int':
case 'uint':
case 'long':
case 'ulong':
case 'char':
case 'uchar':
$tempVariable = $compilationContext->symbolTable->getTempNonTrackedVariable(
'variable',
$compilationContext,
true
);

$compilationContext->backend->assignLong($tempVariable, $variableVariable, $compilationContext);
$compilationContext->backend->addStaticProperty($classEntry, $property, $tempVariable, $compilationContext);

if ($tempVariable->isTemporal()) {
$tempVariable->setIdle(true);
}
break;

case 'double':
$tempVariable = $compilationContext->symbolTable->getTempNonTrackedVariable(
'variable',
$compilationContext,
true
);

$compilationContext->backend->assignDouble($tempVariable, $variableVariable, $compilationContext);
$compilationContext->backend->addStaticProperty($classEntry, $property, $tempVariable, $compilationContext);

if ($tempVariable->isTemporal()) {
$tempVariable->setIdle(true);
}
break;

case 'bool':
$tempVariable = $compilationContext->symbolTable->getTempNonTrackedVariable('variable', $compilationContext, true);
$compilationContext->backend->assignBool($tempVariable, $variableVariable, $compilationContext);
$compilationContext->backend->addStaticProperty($classEntry, $property, $tempVariable, $compilationContext);
if ($tempVariable->isTemporal()) {
$tempVariable->setIdle(true);
}
break;
default:
$compilationContext->backend->addStaticProperty($classEntry, $property, $variableVariable, $compilationContext);
if ($variableVariable->isTemporal()) {
$variableVariable->setIdle(true);
}
break;
}

break;
Expand Down
54 changes: 51 additions & 3 deletions Library/Statements/Let/StaticPropertySub.php
Expand Up @@ -184,10 +184,58 @@ public function assignStatic(
$statement
);

$compilationContext->backend->addStaticProperty($classEntry, $property, $variableVariable, $compilationContext);
if ($variableVariable->isTemporal()) {
$variableVariable->setIdle(true);
switch ($variableVariable->getType()) {
case 'int':
case 'uint':
case 'long':
case 'ulong':
case 'char':
case 'uchar':
$tempVariable = $compilationContext->symbolTable->getTempNonTrackedVariable(
'variable',
$compilationContext,
true
);

$compilationContext->backend->assignLong($tempVariable, $variableVariable, $compilationContext);
$compilationContext->backend->subStaticProperty($classEntry, $property, $tempVariable, $compilationContext);

if ($tempVariable->isTemporal()) {
$tempVariable->setIdle(true);
}
break;

case 'double':
$tempVariable = $compilationContext->symbolTable->getTempNonTrackedVariable(
'variable',
$compilationContext,
true
);

$compilationContext->backend->assignDouble($tempVariable, $variableVariable, $compilationContext);
$compilationContext->backend->subStaticProperty($classEntry, $property, $tempVariable, $compilationContext);

if ($tempVariable->isTemporal()) {
$tempVariable->setIdle(true);
}
break;

case 'bool':
$tempVariable = $compilationContext->symbolTable->getTempNonTrackedVariable('variable', $compilationContext, true);
$compilationContext->backend->assignBool($tempVariable, $variableVariable, $compilationContext);
$compilationContext->backend->subStaticProperty($classEntry, $property, $tempVariable, $compilationContext);
if ($tempVariable->isTemporal()) {
$tempVariable->setIdle(true);
}
break;
default:
$compilationContext->backend->subStaticProperty($classEntry, $property, $variableVariable, $compilationContext);
if ($variableVariable->isTemporal()) {
$variableVariable->setIdle(true);
}
break;
}

break;

default:
Expand Down
16 changes: 16 additions & 0 deletions test/properties/staticpublicproperties.zep
Expand Up @@ -64,4 +64,20 @@ class StaticPublicProperties
let self::someAdd += 1.0;
let self::someSub -= 1.0;
}

public static function testAddAndSub4()
{
var v;
let v = 1;
let self::someAdd += v;
let self::someSub -= v;
}

public static function testAddAndSub5()
{
var v;
let v = "1";
let self::someAdd += v;
let self::someSub -= v;
}
}
16 changes: 15 additions & 1 deletion unit-tests/Extension/Properties/StaticPublicPropertiesTest.php
Expand Up @@ -44,8 +44,22 @@ public function testIssues2020()
\Test\Properties\StaticPublicProperties::testAddAndSub();
$this->assertEquals(1, \Test\Properties\StaticPublicProperties::$someAdd);
$this->assertEquals(-1, \Test\Properties\StaticPublicProperties::$someSub);
\Test\Properties\StaticPublicProperties::testAddAndSub();

// PHP Notice: A non well formed numeric value encountered
//\Test\Properties\StaticPublicProperties::testAddAndSub2();
//$this->assertEquals(2, \Test\Properties\StaticPublicProperties::$someAdd);
//$this->assertEquals(-2, \Test\Properties\StaticPublicProperties::$someSub);

\Test\Properties\StaticPublicProperties::testAddAndSub3();
$this->assertEquals(2, \Test\Properties\StaticPublicProperties::$someAdd);
$this->assertEquals(-2, \Test\Properties\StaticPublicProperties::$someSub);

\Test\Properties\StaticPublicProperties::testAddAndSub4();
$this->assertEquals(3, \Test\Properties\StaticPublicProperties::$someAdd);
$this->assertEquals(-3, \Test\Properties\StaticPublicProperties::$someSub);

\Test\Properties\StaticPublicProperties::testAddAndSub4();
$this->assertEquals(4, \Test\Properties\StaticPublicProperties::$someAdd);
$this->assertEquals(-5, \Test\Properties\StaticPublicProperties::$someSub);
}
}

0 comments on commit aeff1fd

Please sign in to comment.