> -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Michael O'Brien > Sent: 15. april 2008 15:06 > To: Jeff Dyer > Cc: es4-discuss Discuss; Jon Zeppieri > Subject: Re: Declarations > > Jeff, > > Can I tease out a bit more detail. I'm not sure I agree with > what the correct answer should be. > > Lars raised the issue with "var" a while back and I think, if > my memory serves me, the conclusion was that the variable > should be hoisted to the top of the var block, but the > initialization statement should execute in place. > > ie. > > => declaration for y hoisted to here > print(y) // Y should exist here but be null > x = 1 > var y = x // Assigment from x remains here > > > If the above is true for variables, should we not have the > same rules > for functions and for > classes? ie. shouldn't class static initialization code > remain inline > where the class is defined? > I'd recommend that we make var,function and class all behave > the same > way.
They don't work the same way, in ES3. IMO method init needs to be hoisted in classes like function init is in ES3. I think this is important for implementations with vtables. Classes are compile-time entities (with types and namespaces) and may need to be privileged that way, in initialization terms. More later. --lars > > Does any of the above change if enclosed in a package block? > I presume > the class declaration should > be hoisted to the top of the package block. But still, the > initialization remain inline where the > class was declared. > > > Michael > > > > On Apr 15, 2008, at 11:58 AM, Jeff Dyer wrote: > > This is an RI bug too (my fault). AS3 initializes programs in a > > single pass, > > before evaluating the top level code. The RI does both in > one pass. > > I just > > filed a bug (http://bugs.ecmascript.org/ticket/382) > > > > Jd > > > > On 4/15/08 11:38 AM, Michael O'Brien wrote: > > > >> Jon, thanks. Any thoughts on the original post? > >> > >> > >>>>> Question about declarations: > >>>>> > >>>>> Consider: > >>>>> > >>>>> print(Shape.x) > >>>>> public class Shape { public static var x = 1; } > >>>>> print(Shape.x) > >>>>> > >>>>> fun() > >>>>> function fun() { print("fun"); } > >>>>> > >>>>> > >>>>> In the RI this prints: > >>>>> > >>>>> undefined > >>>>> 1 > >>>>> fun > >>>>> > >>>>> In ASC this prints: > >>>>> 1 > >>>>> 1 > >>>>> fun > >>>>> > >>>>> What happens in the RI is the class declaration seems to occur > >>>>> where > >>>>> it is coded. It is not being > >>>>> hoisted to the top of the enclosing var block. Whereas the > >>>>> function > >>>>> declaration is and thus can > >>>>> be called before its declaration. > >>>>> > >>>>> Is this an RI bug or just a divergence from AS3? > >>>>> > >>>>> Michael > >>>> > >>>> _______________________________________________ > >>>> Es4-discuss mailing list > >>>> [email protected] > >>>> https://mail.mozilla.org/listinfo/es4-discuss > >>>> > >>>> > >> > >> _______________________________________________ > >> Es4-discuss mailing list > >> [email protected] > >> https://mail.mozilla.org/listinfo/es4-discuss > > > > _______________________________________________ > Es4-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es4-discuss > _______________________________________________ Es4-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es4-discuss
