Skip to content

Conversation

@khaledalam
Copy link

Description

Fixes #10497 - Allows direct modification of object properties stored in constants.

Problem

Previously, this code would fail with a fatal error:

const a = new stdClass;
a->b = 42;  // Fatal error: Cannot use temporary expression in write context

Solution

Modified the compiler to properly handle ZEND_AST_CONST in variable compilation contexts:

Constants now emit IS_VAR instead of IS_TMP_VAR when used in write contexts
This allows property assignment opcodes to work correctly with constant objects

Tests:

  • Added Zend/tests/gh10497.phpt - comprehensive test for the fix
  • Updated Zend/tests/gh12102_3.phpt - reflects improved constant handling

Behavior

Now supports all property operations on constant objects:

const obj = new stdClass;
obj->prop = 'value';
obj->prop = 'new value';
obj->another = 'test';
obj->counter = 0;
obj->counter++;
obj->num = 10;
obj->num += 5;
unset(obj->prop);
obj->nested = new stdClass;
obj->nested->value = 123;

The constant reference remains immutable, but the object itself is mutable as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cannot directly modify an object stored in a constant

1 participant