You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
vm: lower isset/empty($obj->prop) natively via OP_ISSET_OBJ_PROP / OP_EMPTY_OBJ_PROP
Currently isset($obj->prop) / empty($obj->prop) fall through to
OpClassConst (generic AST.Run delegation). Add native opcodes that
pop the receiver and read the prop name from the const pool, then
dispatch to EvalIssetObjProp / EvalEmptyObjProp.
EvalIssetObjProp / EvalEmptyObjProp mirror checkExistence /
checkEmpty's runObjectVar branches — non-object receiver returns
false/true (no warn), otherwise HasProp + (for empty) ObjectGet +
IsValueEmpty.
IsIssetSupportedArg extended to accept objectVarNode shapes with
static names (non-dollar-prefix, non-nullsafe) and a recursively
supported receiver. Nested forms ($outer->inner->prop) work via
emitIssetContainerRead which now recurses via OP_OBJECT_GET_SAFE
for intermediate object reads.
Bodies that use only the natively-supported isset/empty shapes
(simple-local, array-access on simple container, object prop on
supported receiver) stay slot-safe. Dollar-prefix dyn-name and
nullsafe forms still AST-delegate via OpClassConst.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
0 commit comments