       func.apply(this, arguments)
       child.traverse_children(cross_scope, func) if child instanceof BaseNode
 
-  # Default implementations of the common node identification methods. Nodes
+  # Default implementations of the common node properties and methods. Nodes
   # will override these with custom logic, if needed.
+  constructor_name:        'BaseNode'
+  children_attributes:     []
+
   unwrap:               -> this
   is_statement:         -> false
   is_pure_statement:    -> false
   top_sensitive:        -> false
 
-type BaseNode, 'BaseNode'
+register BaseNode, {name: 'BaseNode'}
 
 #### Expressions
 

      i: + 1
    args.join('')

type SplatNode, 'SplatNode'
children SplatNode, 'name'

#### WhileNode


    children: (child.toString(idt + TAB) for child in @children()).join('')
    "\n$idt$children"

register CodeNode, {name: 'CodeNode', children: ['params', 'body']}

#### SplatNode

