Bug 1274159 - Part 2-1: Include the name of relevant interface in nsHTMLTagList.h; r=bz
☠☠ backed out by 3bef3e41a9c4 ☠ ☠
authorEdgar Chen <echen@mozilla.com>
Tue, 08 Nov 2016 15:45:28 +0800
changeset 325845 5c3a6908b84eb22a6ff121e52a948f1f6b5913e1
parent 325844 33c69deecb7a16639664b91e7e107e1d7dd74e33
child 325846 f2a5fc3e8c4eee37aee5e5b875e7afa94ef65208
push id31076
push usercbook@mozilla.com
push dateWed, 14 Dec 2016 15:41:53 +0000
treeherdermozilla-central@18b5a7a5d833 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbz
bugs1274159
milestone53.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1274159 - Part 2-1: Include the name of relevant interface in nsHTMLTagList.h; r=bz MozReview-Commit-ID: 8D29JfJcMG7
dom/html/nsHTMLContentSink.cpp
parser/htmlparser/nsHTMLTagList.h
parser/htmlparser/nsHTMLTags.cpp
parser/htmlparser/nsHTMLTags.h
--- a/dom/html/nsHTMLContentSink.cpp
+++ b/dom/html/nsHTMLContentSink.cpp
@@ -91,24 +91,22 @@ typedef nsGenericHTMLElement*
 nsGenericHTMLElement*
 NS_NewHTMLNOTUSEDElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,
                          FromParser aFromParser)
 {
   NS_NOTREACHED("The element ctor should never be called");
   return nullptr;
 }
 
-#define HTML_TAG(_tag, _classname) NS_NewHTML##_classname##Element,
-#define HTML_HTMLELEMENT_TAG(_tag) NS_NewHTMLElement,
+#define HTML_TAG(_tag, _classname, _interfacename) NS_NewHTML##_classname##Element,
 #define HTML_OTHER(_tag) NS_NewHTMLNOTUSEDElement,
 static const contentCreatorCallback sContentCreatorCallbacks[] = {
   NS_NewHTMLUnknownElement,
 #include "nsHTMLTagList.h"
 #undef HTML_TAG
-#undef HTML_HTMLELEMENT_TAG
 #undef HTML_OTHER
   NS_NewHTMLUnknownElement
 };
 
 class SinkContext;
 class HTMLContentSink;
 
 /**
--- a/parser/htmlparser/nsHTMLTagList.h
+++ b/parser/htmlparser/nsHTMLTagList.h
@@ -5,182 +5,189 @@
 
 // IWYU pragma: private, include "nsHTMLTags.h"
 
 /******
 
   This file contains the list of all HTML tags.
   See nsHTMLTags.h for access to the enum values for tags.
 
-  It is designed to be used as inline input to nsHTMLTags.cpp and
-  nsHTMLContentSink *only* through the magic of C preprocessing.
+  It is designed to be used as input to various places that will define the
+  HTML_TAG macro in useful ways through the magic of C preprocessing.
 
   All entries must be enclosed in the macro HTML_TAG which will have cruel
   and unusual things done to it.
 
   It is recommended (but not strictly necessary) to keep all entries
   in alphabetical order.
 
-  The first argument to HTML_TAG is both the enum identifier of the
-  property and the string value. The second argument is the "creator"
-  method of the form NS_New$TAGNAMEElement, that will be used by
+  The first argument to HTML_TAG is the tag name. The second argument is the
+  "creator" method of the form NS_New$TAGNAMEElement, that will be used by
   nsHTMLContentSink.cpp to create a content object for a tag of that
   type. Use NOTUSED, if the particular tag has a non-standard creator.
+  The third argument is the interface name specified for this element
+  in the HTML specification. It can be empty if the relevant interface name
+  is "HTMLElement".
 
   The HTML_OTHER macro is for values in the nsHTMLTag enum that are
   not strictly tags.
 
   Entries *must* use only lowercase characters.
 
   Don't forget to update /editor/libeditor/HTMLEditUtils.cpp as well.
 
   ** Break these invariants and bad things will happen. **
 
  ******/
-HTML_TAG(a, Anchor)
+
+#define HTML_HTMLELEMENT_TAG(_tag) HTML_TAG(_tag, , )
+
+HTML_TAG(a, Anchor, Anchor)
 HTML_HTMLELEMENT_TAG(abbr)
 HTML_HTMLELEMENT_TAG(acronym)
 HTML_HTMLELEMENT_TAG(address)
-HTML_TAG(applet, SharedObject)
-HTML_TAG(area, Area)
+HTML_TAG(applet, SharedObject, Applet)
+HTML_TAG(area, Area, Area)
 HTML_HTMLELEMENT_TAG(article)
 HTML_HTMLELEMENT_TAG(aside)
-HTML_TAG(audio, Audio)
+HTML_TAG(audio, Audio, Audio)
 HTML_HTMLELEMENT_TAG(b)
-HTML_TAG(base, Shared)
+HTML_TAG(base, Shared, Base)
 HTML_HTMLELEMENT_TAG(basefont)
 HTML_HTMLELEMENT_TAG(bdo)
-HTML_TAG(bgsound, Unknown)
+HTML_TAG(bgsound, Unknown, Unknown)
 HTML_HTMLELEMENT_TAG(big)
-HTML_TAG(blockquote, Shared)
-HTML_TAG(body, Body)
-HTML_TAG(br, BR)
-HTML_TAG(button, Button)
-HTML_TAG(canvas, Canvas)
-HTML_TAG(caption, TableCaption)
+HTML_TAG(blockquote, Shared, Quote)
+HTML_TAG(body, Body, Body)
+HTML_TAG(br, BR, BR)
+HTML_TAG(button, Button, Button)
+HTML_TAG(canvas, Canvas, Canvas)
+HTML_TAG(caption, TableCaption, TableCaption)
 HTML_HTMLELEMENT_TAG(center)
 HTML_HTMLELEMENT_TAG(cite)
 HTML_HTMLELEMENT_TAG(code)
-HTML_TAG(col, TableCol)
-HTML_TAG(colgroup, TableCol)
-HTML_TAG(content, Content)
-HTML_TAG(data, Data)
-HTML_TAG(datalist, DataList)
+HTML_TAG(col, TableCol, TableCol)
+HTML_TAG(colgroup, TableCol, TableCol)
+HTML_TAG(content, Content, Content)
+HTML_TAG(data, Data, Data)
+HTML_TAG(datalist, DataList, DataList)
 HTML_HTMLELEMENT_TAG(dd)
-HTML_TAG(del, Mod)
-HTML_TAG(details, Details)
+HTML_TAG(del, Mod, Mod)
+HTML_TAG(details, Details, Details)
 HTML_HTMLELEMENT_TAG(dfn)
-HTML_TAG(dir, Shared)
-HTML_TAG(div, Div)
-HTML_TAG(dl, SharedList)
+HTML_TAG(dir, Shared, Directory)
+HTML_TAG(div, Div, Div)
+HTML_TAG(dl, SharedList, DList)
 HTML_HTMLELEMENT_TAG(dt)
 HTML_HTMLELEMENT_TAG(em)
-HTML_TAG(embed, SharedObject)
-HTML_TAG(fieldset, FieldSet)
+HTML_TAG(embed, SharedObject, Embed)
+HTML_TAG(fieldset, FieldSet, FieldSet)
 HTML_HTMLELEMENT_TAG(figcaption)
 HTML_HTMLELEMENT_TAG(figure)
-HTML_TAG(font, Font)
+HTML_TAG(font, Font, Font)
 HTML_HTMLELEMENT_TAG(footer)
-HTML_TAG(form, Form)
-HTML_TAG(frame, Frame)
-HTML_TAG(frameset, FrameSet)
-HTML_TAG(h1, Heading)
-HTML_TAG(h2, Heading)
-HTML_TAG(h3, Heading)
-HTML_TAG(h4, Heading)
-HTML_TAG(h5, Heading)
-HTML_TAG(h6, Heading)
-HTML_TAG(head, Shared)
+HTML_TAG(form, Form, Form)
+HTML_TAG(frame, Frame, Frame)
+HTML_TAG(frameset, FrameSet, FrameSet)
+HTML_TAG(h1, Heading, Heading)
+HTML_TAG(h2, Heading, Heading)
+HTML_TAG(h3, Heading, Heading)
+HTML_TAG(h4, Heading, Heading)
+HTML_TAG(h5, Heading, Heading)
+HTML_TAG(h6, Heading, Heading)
+HTML_TAG(head, Shared, Head)
 HTML_HTMLELEMENT_TAG(header)
 HTML_HTMLELEMENT_TAG(hgroup)
-HTML_TAG(hr, HR)
-HTML_TAG(html, Shared)
+HTML_TAG(hr, HR, HR)
+HTML_TAG(html, Shared, Html)
 HTML_HTMLELEMENT_TAG(i)
-HTML_TAG(iframe, IFrame)
+HTML_TAG(iframe, IFrame, IFrame)
 HTML_HTMLELEMENT_TAG(image)
-HTML_TAG(img, Image)
-HTML_TAG(input, Input)
-HTML_TAG(ins, Mod)
+HTML_TAG(img, Image, Image)
+HTML_TAG(input, Input, Input)
+HTML_TAG(ins, Mod, Mod)
 HTML_HTMLELEMENT_TAG(kbd)
-HTML_TAG(keygen, Span)
-HTML_TAG(label, Label)
-HTML_TAG(legend, Legend)
-HTML_TAG(li, LI)
-HTML_TAG(link, Link)
-HTML_TAG(listing, Pre)
+HTML_TAG(keygen, Span, Span)
+HTML_TAG(label, Label, Label)
+HTML_TAG(legend, Legend, Legend)
+HTML_TAG(li, LI, LI)
+HTML_TAG(link, Link, Link)
+HTML_TAG(listing, Pre, Pre)
 HTML_HTMLELEMENT_TAG(main)
-HTML_TAG(map, Map)
+HTML_TAG(map, Map, Map)
 HTML_HTMLELEMENT_TAG(mark)
-HTML_TAG(marquee, Div)
-HTML_TAG(menu, Menu)
-HTML_TAG(menuitem, MenuItem)
-HTML_TAG(meta, Meta)
-HTML_TAG(meter, Meter)
-HTML_TAG(multicol, Unknown)
+HTML_TAG(marquee, Div, Div)
+HTML_TAG(menu, Menu, Menu)
+HTML_TAG(menuitem, MenuItem, MenuItem)
+HTML_TAG(meta, Meta, Meta)
+HTML_TAG(meter, Meter, Meter)
+HTML_TAG(multicol, Unknown, Unknown)
 HTML_HTMLELEMENT_TAG(nav)
 HTML_HTMLELEMENT_TAG(nobr)
 HTML_HTMLELEMENT_TAG(noembed)
 HTML_HTMLELEMENT_TAG(noframes)
 HTML_HTMLELEMENT_TAG(noscript)
-HTML_TAG(object, Object)
-HTML_TAG(ol, SharedList)
-HTML_TAG(optgroup, OptGroup)
-HTML_TAG(option, Option)
-HTML_TAG(output, Output)
-HTML_TAG(p, Paragraph)
-HTML_TAG(param, Shared)
-HTML_TAG(picture, Picture)
+HTML_TAG(object, Object, Object)
+HTML_TAG(ol, SharedList, OList)
+HTML_TAG(optgroup, OptGroup, OptGroup)
+HTML_TAG(option, Option, Option)
+HTML_TAG(output, Output, Output)
+HTML_TAG(p, Paragraph, Paragraph)
+HTML_TAG(param, Shared, Param)
+HTML_TAG(picture, Picture, Picture)
 HTML_HTMLELEMENT_TAG(plaintext)
-HTML_TAG(pre, Pre)
-HTML_TAG(progress, Progress)
-HTML_TAG(q, Shared)
+HTML_TAG(pre, Pre, Pre)
+HTML_TAG(progress, Progress, Progress)
+HTML_TAG(q, Shared, Quote)
 HTML_HTMLELEMENT_TAG(rb)
 HTML_HTMLELEMENT_TAG(rp)
 HTML_HTMLELEMENT_TAG(rt)
 HTML_HTMLELEMENT_TAG(rtc)
 HTML_HTMLELEMENT_TAG(ruby)
 HTML_HTMLELEMENT_TAG(s)
 HTML_HTMLELEMENT_TAG(samp)
-HTML_TAG(script, Script)
+HTML_TAG(script, Script, Script)
 HTML_HTMLELEMENT_TAG(section)
-HTML_TAG(select, Select)
-HTML_TAG(shadow, Shadow)
+HTML_TAG(select, Select, Select)
+HTML_TAG(shadow, Shadow, Shadow)
 HTML_HTMLELEMENT_TAG(small)
-HTML_TAG(source, Source)
-HTML_TAG(span, Span)
+HTML_TAG(source, Source, Source)
+HTML_TAG(span, Span, Span)
 HTML_HTMLELEMENT_TAG(strike)
 HTML_HTMLELEMENT_TAG(strong)
-HTML_TAG(style, Style)
+HTML_TAG(style, Style, Style)
 HTML_HTMLELEMENT_TAG(sub)
-HTML_TAG(summary, Summary)
+HTML_TAG(summary, Summary, )
 HTML_HTMLELEMENT_TAG(sup)
-HTML_TAG(table, Table)
-HTML_TAG(tbody, TableSection)
-HTML_TAG(td, TableCell)
-HTML_TAG(textarea, TextArea)
-HTML_TAG(tfoot, TableSection)
-HTML_TAG(th, TableCell)
-HTML_TAG(thead, TableSection)
-HTML_TAG(template, Template)
-HTML_TAG(time, Time)
-HTML_TAG(title, Title)
-HTML_TAG(tr, TableRow)
-HTML_TAG(track, Track)
+HTML_TAG(table, Table, Table)
+HTML_TAG(tbody, TableSection, TableSection)
+HTML_TAG(td, TableCell, TableCell)
+HTML_TAG(textarea, TextArea, TextArea)
+HTML_TAG(tfoot, TableSection, TableSection)
+HTML_TAG(th, TableCell, TableCell)
+HTML_TAG(thead, TableSection, TableSection)
+HTML_TAG(template, Template, Template)
+HTML_TAG(time, Time, Time)
+HTML_TAG(title, Title, Title)
+HTML_TAG(tr, TableRow, TableRow)
+HTML_TAG(track, Track, Track)
 HTML_HTMLELEMENT_TAG(tt)
 HTML_HTMLELEMENT_TAG(u)
-HTML_TAG(ul, SharedList)
+HTML_TAG(ul, SharedList, UList)
 HTML_HTMLELEMENT_TAG(var)
-HTML_TAG(video, Video)
+HTML_TAG(video, Video, Video)
 HTML_HTMLELEMENT_TAG(wbr)
-HTML_TAG(xmp, Pre)
+HTML_TAG(xmp, Pre, Pre)
 
 
 /* These are not for tags. But they will be included in the nsHTMLTag
    enum anyway */
 
 HTML_OTHER(text)
 HTML_OTHER(whitespace)
 HTML_OTHER(newline)
 HTML_OTHER(comment)
 HTML_OTHER(entity)
 HTML_OTHER(doctypeDecl)
 HTML_OTHER(markupDecl)
 HTML_OTHER(instruction)
+
+#undef HTML_HTMLELEMENT_TAG
--- a/parser/htmlparser/nsHTMLTags.cpp
+++ b/parser/htmlparser/nsHTMLTags.cpp
@@ -10,24 +10,22 @@
 #include "nsStaticAtom.h"
 #include "nsUnicharUtils.h"
 #include "mozilla/HashFunctions.h"
 #include <algorithm>
 
 using namespace mozilla;
 
 // static array of unicode tag names
-#define HTML_TAG(_tag, _classname) (u"" #_tag),
-#define HTML_HTMLELEMENT_TAG(_tag) (u"" #_tag),
+#define HTML_TAG(_tag, _classname, _interfacename) (u"" #_tag),
 #define HTML_OTHER(_tag)
 const char16_t* const nsHTMLTags::sTagUnicodeTable[] = {
 #include "nsHTMLTagList.h"
 };
 #undef HTML_TAG
-#undef HTML_HTMLELEMENT_TAG
 #undef HTML_OTHER
 
 // static array of tag atoms
 nsIAtom* nsHTMLTags::sTagAtomTable[eHTMLTag_userdefined - 1];
 
 int32_t nsHTMLTags::gTableRefCount;
 PLHashTable* nsHTMLTags::gTagTable;
 PLHashTable* nsHTMLTags::gTagAtomTable;
@@ -53,38 +51,34 @@ HTMLTagsKeyCompareUCPtr(const void *key1
 static PLHashNumber
 HTMLTagsHashCodeAtom(const void *key)
 {
   return NS_PTR_TO_INT32(key) >> 2;
 }
 
 #define NS_HTMLTAG_NAME_MAX_LENGTH 10
 
-#define HTML_TAG(_tag, _classname) NS_STATIC_ATOM_BUFFER(Atombuffer_##_tag, #_tag)
-#define HTML_HTMLELEMENT_TAG(_tag) NS_STATIC_ATOM_BUFFER(Atombuffer_##_tag, #_tag)
+#define HTML_TAG(_tag, _classname, _interfacename) NS_STATIC_ATOM_BUFFER(Atombuffer_##_tag, #_tag)
 #define HTML_OTHER(_tag)
 #include "nsHTMLTagList.h"
 #undef HTML_TAG
-#undef HTML_HTMLELEMENT_TAG
 #undef HTML_OTHER
 
 
 // static
 nsresult
 nsHTMLTags::AddRefTable(void)
 {
   // static array of tag StaticAtom structs
-#define HTML_TAG(_tag, _classname) NS_STATIC_ATOM(Atombuffer_##_tag, &nsHTMLTags::sTagAtomTable[eHTMLTag_##_tag - 1]),
-#define HTML_HTMLELEMENT_TAG(_tag) NS_STATIC_ATOM(Atombuffer_##_tag, &nsHTMLTags::sTagAtomTable[eHTMLTag_##_tag - 1]),
+#define HTML_TAG(_tag, _classname, _interfacename) NS_STATIC_ATOM(Atombuffer_##_tag, &nsHTMLTags::sTagAtomTable[eHTMLTag_##_tag - 1]),
 #define HTML_OTHER(_tag)
   static const nsStaticAtom sTagAtoms_info[] = {
 #include "nsHTMLTagList.h"
   };
 #undef HTML_TAG
-#undef HTML_HTMLELEMENT_TAG
 #undef HTML_OTHER
 
   if (gTableRefCount++ == 0) {
     // Fill in our static atom pointers
     NS_RegisterStaticAtoms(sTagAtoms_info);
 
 
     NS_ASSERTION(!gTagTable && !gTagAtomTable, "pre existing hash!");
--- a/parser/htmlparser/nsHTMLTags.h
+++ b/parser/htmlparser/nsHTMLTags.h
@@ -13,30 +13,28 @@ class nsIAtom;
 
 /*
    Declare the enum list using the magic of preprocessing
    enum values are "eHTMLTag_foo" (where foo is the tag)
 
    To change the list of tags, see nsHTMLTagList.h
 
  */
-#define HTML_TAG(_tag, _classname) eHTMLTag_##_tag,
-#define HTML_HTMLELEMENT_TAG(_tag) eHTMLTag_##_tag,
+#define HTML_TAG(_tag, _classname, _interfacename) eHTMLTag_##_tag,
 #define HTML_OTHER(_tag) eHTMLTag_##_tag,
 enum nsHTMLTag {
   /* this enum must be first and must be zero */
   eHTMLTag_unknown = 0,
 #include "nsHTMLTagList.h"
 
   /* can't be moved into nsHTMLTagList since gcc3.4 doesn't like a
      comma at the end of enum list*/
   eHTMLTag_userdefined
 };
 #undef HTML_TAG
-#undef HTML_HTMLELEMENT_TAG
 #undef HTML_OTHER
 
 // All tags before eHTMLTag_text are HTML tags
 #define NS_HTML_TAG_MAX int32_t(eHTMLTag_text - 1)
 
 class nsHTMLTags {
 public:
   static nsresult AddRefTable(void);