PropertyName was introduced to treat non-indexed / indexed property. https://bugs.webkit.org/show_bug.cgi?id=86241 At that time, indexed/non-indexed abstract operations are not separated. So PropertyName is needed to treat non-indexed / indexed properties. However, now these abstract operations are separated. So there's no need to have both Identifier and PropertyName. Thus we can merge PropertyName into Identifier. And since PropertyName doesn't have onwership to its backing StringImpl*, it sometimes cause failures. Merging PropertyName into Identifier elliminates this mistakes.
Currently, some JIT code assumes the PropertyName's layout. It only holds StringImpl*. (Not RefPtr<StringImpl>). So in the meantime, we just use it.
(In reply to comment #1) > Currently, some JIT code assumes the PropertyName's layout. It only holds > StringImpl*. (Not RefPtr<StringImpl>). > So in the meantime, we just use it. Right. It would be wrong to have the JITs use RefPtr<StringImpl>. One way to make this work would be to replace all JIT uses of PropertyName with just StringImpl*.