function DOMElement (scope, node_type, attributes, placement) {

  this._node_type = node_type;
  this._field_name_references = {};

  var output_type = new IRCompoundType({
    after: new IRDOMPlacementType(),
    inner: new IRDOMPlacementType()
  });

  var input_computables = [placement];

  // TODO: Should probably store index in here since all the code below is relying on the iterator order of this.
  var attrs = {};
  for (var attr in attributes) {
    var attribute_computables = attributes[attr];
    attrs[attr] = attribute_computables.slice();
    input_computables = input_computables.concat(attribute_computables);
  }

  this._attributes = attrs;

  Computable.call(this, scope, input_computables, output_type);
}
/**
 * @constructor
 * @extends Computable
 * @param {Scope} scope The scope that will contain this DOM element.
 * @param {string} node_type
 * @param {Object.<string, Array.<Computable>>} attributes
 * @param {Computable} placement
 */
@constructor
@extends Computable
@param {Scope} scope The scope that will contain this DOM element.
@constructor @extends Computable @param { Scope } scope The scope that will contain this DOM element .
function DOMElement (scope, node_type, attributes, placement) {
  this._node_type = node_type;
  this._field_name_references = {};
  var output_type = new IRCompoundType({
    after: new IRDOMPlacementType(),
    inner: new IRDOMPlacementType()
  });
  var input_computables = [placement];
  var attrs = {};
  for (var attr in attributes) {
    var attribute_computables = attributes[attr];
    attrs[attr] = attribute_computables.slice();
    input_computables = input_computables.concat(attribute_computables);
  }
  this._attributes = attrs;
  Computable.call(this, scope, input_computables, output_type);
}
function DOMElement ( scope , node_type , attributes , placement ) { this . _node_type = node_type ; this . _field_name_references = { } ; var output_type = new IRCompoundType ( { after : new IRDOMPlacementType ( ) , inner : new IRDOMPlacementType ( ) } ) ; var input_computables = [ placement ] ; var attrs = { } ; for ( var attr in attributes ) { var attribute_computables = attributes [ attr ] ; attrs [ attr ] = attribute_computables . slice ( ) ; input_computables = input_computables . concat ( attribute_computables ) ; } this . _attributes = attrs ; Computable . call ( this , scope , input_computables , output_type ) ; }
@constructor
 @extends Computable
 @param {Scope} scope The scope that will contain this DOM element.
@constructor @extends Computable @param { Scope } scope The scope that will contain this DOM element .
// TODO: Should probably store index in here since all the code below is relying on the iterator order of this.