 # A `[ ... ]` indexed accessor into an array or object.
 exports.IndexNode: class IndexNode extends BaseNode
 
+  type:     'IndexNode'
+  children: ['index']
+
   constructor: (index, tag) ->
-    super {name: 'IndexNode', children: ['index']}
     @index: index
     @soak_node: tag is 'soak'
 

# or vanilla.
exports.ValueNode: class ValueNode extends BaseNode

  SOAK: " == undefined ? undefined : "

  # A **ValueNode** has a base and a list of property accesses.
  constructor: (base, properties) ->
    super {name: 'ValueNode', children: ['base', 'properties']}
    @base: base
    @properties: (properties or [])


# has no *children* -- they're within the inner scope.
exports.CodeNode: class CodeNode extends BaseNode

  type:     'CodeNode'
  children: ['params', 'body']

  constructor: (params, body, tag) ->
    @params:  params or []
    @body:    body or new Expressions()
    @bound:   tag is 'boundfunc'
