anchor.diff:  
     var getTag = JS('', '#.getTag', hooks);
     var getUnknownTag = JS('', '#.getUnknownTag', hooks);
  +  var prototypeForTag = JS('', '#.prototypeForTag', hooks);
   
     getTagFunction = (o) => JS('String|Null', '#(#)', getTag, o);
     alternateTagFunction =
         (o, String tag) => JS('String|Null', '#(#, #)', getUnknownTag, o, tag);
  +  prototypeForTagFunction =
  +      (String tag) => JS('', '#(#)', prototypeForTag, tag);
   }
   
   applyHooksTransformer(transformer, hooks) {
     var newHooks = JS('=Object|Null', '#(#)', transformer, hooks);
     return JS('', '# || #', newHooks, hooks);
   }
  -
   
   // JavaScript code fragments.
   //
  
positive.code:  * If a lookup via [getTagFunction] on an object [object] that has [tag] fails,
   * this function is called to provide an alternate tag.  This allows us to fail
   * gracefully if we can make a good guess, for example, when browsers add novel
   * kinds of HTMLElement that we have never heard of.
   */
  Function alternateTagFunction;
  
  
  String toStringForNativeObject(var obj) {
  
negative.code:     if (object instanceof HTMLElement) return "HTMLElement";
      return getUnknownTag(object, tag);
    }
    function prototypeForTag(tag) {
      if (typeof window == "undefined") return null;
      if (typeof window[tag] == "undefined") return null;
      var constructor = window[tag];
      if (typeof constructor != "function") return null;
      return constructor.prototype;
    }
    function discriminator(tag) { return null; }
  
    var isBrowser = typeof navigator == "object";
  