On 4/7/2011 4:48 PM, P T Withington wrote:
On 2011-04-06, at 17:17, André Bargull wrote:

The special case for `typeof` is still necessary just as I've described in the 
comments for visitUnaryExpression:
// Details: noteCallSite() may change the expression to =>
//   `typeof ($lzsc$a.lineno = 42,<ID>)`
// If<ID>  is not defined in the lexical environment, the comma expression
// throws a ReferenceError when it is evaluated. Therefore we can't allow
// noteCallSite() for identifiers here.

If<ID>  is not defined in the lexical enviroment, `typeof<ID>` yields "undefined", 
but `typeof ($lzsc$a.lineno = 42,<ID>)` would throw a ReferenceError because the comma expression is 
evaluated before the `typeof` operator is applied.

Interesting.

I really thought that I invented the idea of being able to use `typeof` to check 
for the existence of a binding (by implementing it that way in our swf<  9 code 
generator, and using it to escape our undefined reference checker).  I did not 
realize that behavior was standardized.  It's pretty obscurely documented in ES3, 
made more clear by ES5.

The ES5 specification is definitely more readable than the ES3 one, even simple things like algorithms were only barely understandable (slight exaggeration here) in ES3.


I learn something from you every day!

Yeah! :D

Reply via email to