 # indented block of code -- the implementation of a function, a clause in an
 # `if`, `switch`, or `try`, and so on...
 exports.Expressions = class Expressions extends Base
-
-  children: ['expressions']
-
   (nodes) ->
     @expressions = compact flatten nodes or []
+
+  children: ['expressions']
 
   # Tack an expression on to the end of this expression list.
   push: (node) ->

# it, all other loops can be manufactured. Useful in cases where you need more
# flexibility or more speed than a comprehension can provide.
exports.While = class While extends Base

  children: ['condition', 'guard', 'body']

  isStatement: YES

  (condition, options) ->
    @condition = if options?.invert then condition.invert() else condition
    @guard     = options?.guard

  makeReturn: ->
    @returns = yes

# A `.` accessor into a property of a value, or the `::` shorthand for
# an accessor into the object's prototype.
exports.Accessor = class Accessor extends Base
  (@name, tag) ->
    @proto = if tag is 'proto' then '.prototype' else ''
    @soak  = tag is 'soak'

  children: ['name']

  compile: (o) ->
    name = @name.compile o
    @proto + if IS_STRING.test name then "[#{name}]" else ".#{name}"
