Variant VariableExpression::set(VariableEnvironment &env, CVarRef val) const { Variant &lhs = lval(env); if (RuntimeOption::EnableStrict) { if (!checkCompatibleAssignment(lhs, val)) { throw_strict(TypeVariableChangeException(location_to_string(loc())), StrictMode::StrictHardCore); } } return lhs = val; }
Variant VariableExpression::setOp(VariableEnvironment &env, int op, CVarRef rhs) const { Variant &lhs = lval(env); if (RuntimeOption::EnableStrict) { if (!checkCompatibleAssignment(lhs, rhs)) { throw_strict(TypeVariableChangeException(this->loc()->toString()), StrictMode::StrictHardCore); } } return LvalExpression::setOpVariant(lhs, op, rhs); }
Variant IncOpExpression::evalUncommon( LvalExpression *lval, Variant &left, CVarRef right, bool inc, const Location &self, const Location *other) { if (RuntimeOption::EnableStrict) { if (!VariableExpression::CheckCompatibleAssignment(left, right)) { // inline SET_LINE if (!set_line(self.line0, self.char0, self.line1, self.char1)) { return Variant::lvalBlackHole(); } throw_strict(TypeVariableChangeException( location_to_string(other)), StrictMode::StrictHardCore); } } // inline SET_LINE if (!set_line(self.line0, self.char0, self.line1, self.char1)) { return Variant::lvalBlackHole(); } return lval->setOpVariant(left, inc ? (int)T_INC : (int)T_DEC, right); }