On Tue, Feb 10, 2009 at 2:49 PM, Allen Wirfs-Brock <span dir="ltr">&lt;<a href="mailto:Allen.Wirfs-Brock@microsoft.com">Allen.Wirfs-Brock@microsoft.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I guess it is time for one of my alternative lists.</blockquote><div><br>Good. Thanks!<br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
 &nbsp;The original question was what if any restrictions should ES3.1 place upon host objects&#39; [[Class]] values. &nbsp;The alternatives on the table are:<br>
<br>
1) An implementation can give any host object any [[Class]] value it wants, including value that have specified meanings within the spec. &nbsp;This is what ES3 says.<br>
2) An implementation may not use any of the specified [[Class]] values for a host object.<br>
2a) An implementation may only use the specified [[Class]] values for a host object that is a fully conforming implement of a Section 15 object. &nbsp;(in which case, it is probably really a native object and not a host object at all).<br>

3) An implementation may only use the specified [[Class]] values for host objects that conform to some specified set of invariants that ES3.1 specifies for each such [[Class]] value.<br>
<br>
#1 is what we have now with ES3 and at least some of us want to tighten the specification because it currently means when in the presence of host objects that testing [[Class]] guarantees nothing.<br>
<br>
#2 seem nice and simple to me but may not be a good fit with existing implementations and probably requires rethinking of [[Class]]==&quot;Function&quot; predicates in the Function.prototype.bind algorithm.<br>
#2a ultimately seem the same as #2<br>
<br>
#3 would be fine but requires work. We would need to &nbsp;decide on the invariants for &nbsp;specified [[Class]] value.</blockquote><div><br>Yes, I am in favor of #2.<br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
(parting shot, if [[Class]] was really called [[ToStringIdentifier]] would we even be having this conversation?)<br>
<font color="#888888"><br></font></blockquote></div><br>Yes, but we may have then made the (IMO) mistake of introducing a new internal unforgeable nominal type property, such as your earlier [[IsArray]], but applicable as well to at least Date, RegExp, and Function, without noticing the unfortunate redundancy with the existing unforgeable [[ToStringIdentifier]] property.<br>
<br><br>-- <br>Text by me above is hereby placed in the public domain<br><br> &nbsp; &nbsp;Cheers,<br> &nbsp; &nbsp;--MarkM<br><br>