Per discussion in #379, the optimization for property expression generation was too optimistic: it assumed that the base class implements the property, but that's not necessarily the case -- it could be in some ancestor that isn't the base. The optimization is therefore removed.
Ideally we'd walk up the inheritance chain at expression generation time to find the appropriate class and use that, but the penalty for prototype access should be minimal.
Per discussion in #379, the optimization for property expression generation was too optimistic: it assumed that the base class implements the property, but that's not necessarily the case -- it could be in some ancestor that isn't the base. The optimization is therefore removed.
Ideally we'd walk up the inheritance chain at expression generation time to find the appropriate class and use that, but the penalty for prototype access should be minimal.