I send a new topic message about the following, but for some reason it seems slow getting to es-discuss. So, I'm trying it via a replay:
Here is a new proposal for some additional meta properties that should be considered for ES7 https://github.com/allenwb/ESideas/blob/master/ES7MetaProps.md On Feb 26, 2015, at 12:19 PM, Mark S. Miller wrote: > On Thu, Feb 26, 2015 at 10:52 AM, Andrea Giammarchi > <[email protected]> wrote: > `callee` could be spec'd similar to `super` and transpiled or resolved > statically instead of dynamically, but `callee.caller` or in general the > function `caller` raised many security concerns, giving you the ability to > reach objects you probably shouldn't have. > > These two were different beasts, but `callee` for numerous reasons, and > specially for anonymous and non referenced Object methods syntax, is really > leaving a hole in the language, IMO > > > To respond to this, I searched in vain for the following message on > es-discuss, only to find it in a private thread. This message helped > contribute towards the syntactic direction we finally took, where allowable > new meta-accesses are introduces by <keyword>.<identifier>, but only for > keywords that are not valid expressions by themselves. ES6 contains the first > example of this in "new.target". Many thanks to David Herman for this > generalization -- I didn't see it at all. > > Note that most of the meta.* proposals I list below I am not advocating -- > indeed I think most are probably bad ideas. I include them only as examples > of what lexical context meta accesses could be soundly added to the language > as special forms. > > For the record: > > > ---------- Forwarded message ---------- > From: Mark S. Miller <[email protected]> > Date: Fri, Jan 2, 2015 at 5:10 PM > Subject: Re: Subclassing Builtins > > > [...] close but not quite. E has a lexical reflective access special form > that gives quite a lot of access -- the "meta" keyword. The important > features that make it non-objectionable: > > a) Its usage patterns is to extract from it the more specific reflective > access needed for each use. > b) Its API is designed to encourage such authority division on use. > c) It is understood and documented from the beginning as giving broad access, > so hopefully no one will mistake it for providing less access than it does. > > So, hypothetically, if, say, we introduced "meta" as such a special form to > JS, then > > "meta.arguments" could provide arguments. > "meta.originalContructor" could provide the original constructor. > "meta.callee" could provide access to the function it appears in. > "meta.source" could provide access to the source code of the function it > appears in. > "meta.strictness" could be a boolean indicating the strictness of the code it > appears in. > "meta.environment" could provide a Map from variable name to value reflecting > the lexical scope at the place it appears. > > More dangerously but still plausibly > "meta" could provide an object with the above fields. The reason it is more > dangerous is that passing "meta" might give access to a field added in a > later spec. The reason it is still plausible is that passing "meta" itself, > unlike passing "arguments" or "meta.arguments", would be understood as > passing broad access. > > However, > "meta.caller", as something that provide[s] access to the current > activation's caller, must still be forbidden. > > > -- > Cheers, > --MarkM > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

