On Mar 5, 2009, at 9:26 PM, Allen Wirfs-Brock wrote:

In their code generation scheme, do they ever require the generated
function to have a particular non-global scope, or will global scope do?

Are you really talking about "scopes" in the formal language sense here?

Yes -- does Objective-J generate lambdas in other functions which refer to lexically scoped variables in enclosing functions. At least one Ajax library I know of (EXT) does this using eval.


Or are you asking whether or not there is a requirement for the values of all the name property to be globally different from each other.

No.


For the latter, if the debugger API provides function identity information that is distinct from the name then I would expect that name uniqueness would not be required.

Agree, but let's hear from the Obj-J folks.


If global only, then the Function constructor could make an instance
with mutable name, maybe. Not easy to spec given that in every other
respect the object returned by new Function is a function object, if
we want the spec to keep name immutable for declared and expressed
functions with names.

The spec'ing should be straight forward. All function construction funnels through the algorithm in 13.2 which already is defined to take a "Name" argument that is currently used to specify the value used to initialize the name property. It would be easy to extend the algorithm so that undefined means to not create the property, or to create is with a writable name property that is initialized to "anonymous" or whatever.

I'm warmer than ever to this idea ;-).


Pulling in the list from an earlier message, here is the set of cases that I believe we need to fill in with the value of the name property (if it has one) and whether or not it is writable:

  Defined by                        currently spec'ed name
FunctionDeclaration the identifier from the declaration FunctionExpression with name the identifier from the function expression
FunctionExpresion w/o name          the empty string

Or no name property at all, in the proposal we're talking about here.


Object literal get/set "get <property name>" or "set <property name>" Bound function "bind <target function name>" or " bind anonymous function"

With _ not space, right?



(new Function)                       "new Function"*

I thought we stuck at "" for this one.


Built-in                            specified name

Finally, if we have such a (writable) name property is the implication that toString should be required to use it in its generated representation?

The anonymous function expression carries no intrinsic name, so can't name itself when decompiled without extra spec machinery.

A function object (remember joined function objects in ES3?) created from the compiler-created immutable-shared function may or may not have a name property in the proposal, but calling toString on a function object created (to form a closure) should not, in my opinion, get the value of the "name" property of that particular (or any other) closure object.

Setting the name of the compiler-created function by assigning a property to one of N (N>=1) unjoined function objects could be done. No more "immutable" but the "shared" still applies. I do not favor this, but it could be done. I suspect the Obj-J folks want it.

/be
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to