     ending: if objects.indexOf('\n') >= 0 then "\n" + @idt() + ']' else ']'
     '[' + objects + ending
 
-}
 
 # A faux-node that is never created by the grammar, but is used during
 # code generation to generate a quick "array.push(value)" tree of nodes.

      child + '.prototype = new ' + construct + "();\n" + @idt() +
      child + '.prototype.constructor = ' + child + ';'

}

statement ExtendsNode

# A dotted accessor into a part of a value, or the :: shorthand for
# an accessor into the object's prototype.
AccessorNode: exports.AccessorNode: inherit BaseNode, {
  type: 'Accessor'

  constructor: (name, tag) ->

    to:     range.to.compile(o) + ' - ' + from + plus
    name + '.splice.apply(' + name + ', [' + from + ', ' + to + '].concat(' + @value.compile(o) + '))'


# A function definition. The only node that creates a new Scope.
# A CodeNode does not have any children -- they're within the new scope.
exports.CodeNode: class CodeNode extends BaseNode
  type: 'Code'

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

  compile_node: (o) ->
    shared_scope: del o, 'shared_scope'
