Created attachment 573001 [details] [diff] [review]
It's perfectly legal to call ensureLinear on a linear string right now. It's also completely pointless. We can make it a compile error so that this can't be done. This sort of mistake is most likely to bite changes that improve typing of a class member (say, from JSString to JSLinearString), although I could imagine it happening if someone suffered a brief memory lapse when writing some other patch.
Earlier this year C++11 had a declaration modifier, "new", which could be used to require that a declarator in a class hide an identically-typed declarator in a superclass. It got taken out because the ISO people were running out of places to shoehorn it, for non-method declarator syntax. Le sigh; that would have been perfect for these uses.
Oh well, this will likely work well enough.