Class static blocks

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Class static blocks

Michael O'Brien-4
I wanted to clarify the meaning of a static block. Consider:

class Shape {

        static var count
        var origin

        static {
                // Is this static initialization code?

                count = 1
        }

        {

                // Is this instance initialization code?

                origin = 0
        }
}


Reading the latest draft of the grammar I'm assuming that you must now  
put static init code inside a static {} block. Is this correct?

Does that mean that other directives outside of methods and static  
blocks are instance initialization code?  If so, does it run before or  
after the constructor code?

Michael

       
_______________________________________________
Es4-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es4-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Class static blocks

Jeff Dyer



On 4/20/08 11:52 AM, Michael O'Brien wrote:

> I wanted to clarify the meaning of a static block. Consider:
>
> class Shape {
>
> static var count
> var origin
>
> static {
> // Is this static initialization code?
>
> count = 1
> }
>
> {
>
> // Is this instance initialization code?
>
> origin = 0  
> }
> }
>
>
> Reading the latest draft of the grammar I'm assuming that you must now
> put static init code inside a static {} block. Is this correct?

That is correct.

> Does that mean that other directives outside of methods and static
> blocks are instance initialization code?

No, statements are no longer allowed at the top level of a class definition.
Class initialization code goes in 'static {...}' blocks, and instance
initialization code goes in constructors, of course. Multiple 'static {...}'
blocks are allowed.

Jd

_______________________________________________
Es4-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es4-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Class static blocks

Michael O'Brien-4
Jeff,

What happens to "var" declarations inside a static block?
Are they converted to static declarations or disallowed?

Similarly, I presume a redundant "static" attribute inside a static  
block is allowed.

Michael


On Apr 20, 2008, at 4:50 PM, Jeff Dyer wrote:

>
>
>
> On 4/20/08 11:52 AM, Michael O'Brien wrote:
>
>> I wanted to clarify the meaning of a static block. Consider:
>>
>> class Shape {
>>
>> static var count
>> var origin
>>
>> static {
>> // Is this static initialization code?
>>
>> count = 1
>> }
>>
>> {
>>
>> // Is this instance initialization code?
>>
>> origin = 0
>> }
>> }
>>
>>
>> Reading the latest draft of the grammar I'm assuming that you must  
>> now
>> put static init code inside a static {} block. Is this correct?
>
> That is correct.
>
>> Does that mean that other directives outside of methods and static
>> blocks are instance initialization code?
>
> No, statements are no longer allowed at the top level of a class  
> definition.
> Class initialization code goes in 'static {...}' blocks, and instance
> initialization code goes in constructors, of course. Multiple  
> 'static {...}'
> blocks are allowed.
>
> Jd
>

_______________________________________________
Es4-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es4-discuss
Reply | Threaded
Open this post in threaded view
|

RE: Class static blocks

Lars Hansen-3
Static blocks are anonymous parameterless functions.  "var" hoists
to the top of these functions (as in any other functions); "static"
is disallowed (because it's legal only on class attributes); and
other binding forms that are legal in functions ("function", "let",
"const") are legal.

--lars

> -----Original Message-----
> From: [hidden email]
> [mailto:[hidden email]] On Behalf Of Michael O'Brien
> Sent: 20. april 2008 22:16
> To: Jeff Dyer
> Cc: es4-discuss Discuss
> Subject: Re: Class static blocks
>
> Jeff,
>
> What happens to "var" declarations inside a static block?
> Are they converted to static declarations or disallowed?
>
> Similarly, I presume a redundant "static" attribute inside a
> static block is allowed.
>
> Michael
>
>
> On Apr 20, 2008, at 4:50 PM, Jeff Dyer wrote:
> >
> >
> >
> > On 4/20/08 11:52 AM, Michael O'Brien wrote:
> >
> >> I wanted to clarify the meaning of a static block. Consider:
> >>
> >> class Shape {
> >>
> >> static var count
> >> var origin
> >>
> >> static {
> >> // Is this static initialization code?
> >>
> >> count = 1
> >> }
> >>
> >> {
> >>
> >> // Is this instance initialization code?
> >>
> >> origin = 0
> >> }
> >> }
> >>
> >>
> >> Reading the latest draft of the grammar I'm assuming that you must
> >> now put static init code inside a static {} block. Is this correct?
> >
> > That is correct.
> >
> >> Does that mean that other directives outside of methods and static
> >> blocks are instance initialization code?
> >
> > No, statements are no longer allowed at the top level of a class
> > definition.
> > Class initialization code goes in 'static {...}' blocks,
> and instance
> > initialization code goes in constructors, of course.
> Multiple 'static
> > {...}'
> > blocks are allowed.
> >
> > Jd
> >
>
> _______________________________________________
> Es4-discuss mailing list
> [hidden email]
> https://mail.mozilla.org/listinfo/es4-discuss
>
_______________________________________________
Es4-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es4-discuss