code: function ( node, replacements ) {
  			var ret, subnodes, operation,
  				messageParserEmitter = this;
  
  			switch ( typeof node ) {
  			case 'string':
  			case 'number':
  				ret = node;
  				break;
  			case 'object':
  				// node is an array of nodes
  				subnodes = $.map( node.slice( 1 ), function ( n ) {
  					return messageParserEmitter.emit( n, replacements );
  				} );
  
  				operation = node[0].toLowerCase();
  
  				if ( typeof messageParserEmitter[operation] === 'function' ) {
  					ret = messageParserEmitter[operation]( subnodes, replacements );
  				} else {
  					throw new Error( 'unknown operation "' + operation + '"' );
  				}
  
  				break;
  			case 'undefined':
  				// Parsing the empty string (as an entire expression, or as a
  				// paramExpression in a template) results in undefined
  				// Perhaps a more clever parser can detect this, and return the
  				// empty string? Or is that useful information?
  				// The logical thing is probably to return the empty string here
  				// when we encounter undefined.
  				ret = '';
  				break;
  			default:
  				throw new Error( 'unexpected type in AST: ' + typeof node );
  			}
  
  			return ret;
  		}
docs: (We put this method definition here, and not in prototype, to make
  sure it's not overwritten by any magic.) Walk entire node structure,
  applying replacements and template functions when appropriate
  
  @param {Mixed} node abstract syntax tree (top node or subnode)
  @param {Array} replacements for $1, $2, ... $n
  @return {Mixed} single-string node or array of nodes suitable for
  jQuery appending.