aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8.1/libgo/go/exp/html/atom
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2016-01-14 16:43:34 -0800
committerDan Albert <danalbert@google.com>2016-01-22 14:51:24 -0800
commit3186be22b6598fbd467b126347d1c7f48ccb7f71 (patch)
tree2b176d3ce027fa5340160978effeb88ec9054aaa /gcc-4.8.1/libgo/go/exp/html/atom
parenta45222a0e5951558bd896b0513bf638eb376e086 (diff)
downloadtoolchain_gcc-3186be22b6598fbd467b126347d1c7f48ccb7f71.tar.gz
toolchain_gcc-3186be22b6598fbd467b126347d1c7f48ccb7f71.tar.bz2
toolchain_gcc-3186be22b6598fbd467b126347d1c7f48ccb7f71.zip
Check in a pristine copy of GCC 4.8.1.
The copy of GCC that we use for Android is still not working for mingw. Rather than finding all the differences that have crept into our GCC, just check in a copy from ftp://ftp.gnu.org/gnu/gcc/gcc-4.9.3/gcc-4.8.1.tar.bz2. GCC 4.8.1 was chosen because it is what we have been using for mingw thus far, and the emulator doesn't yet work when upgrading to 4.9. Bug: http://b/26523949 Change-Id: Iedc0f05243d4332cc27ccd46b8a4b203c88dcaa3
Diffstat (limited to 'gcc-4.8.1/libgo/go/exp/html/atom')
-rw-r--r--gcc-4.8.1/libgo/go/exp/html/atom/atom.go81
-rw-r--r--gcc-4.8.1/libgo/go/exp/html/atom/atom_test.go109
-rw-r--r--gcc-4.8.1/libgo/go/exp/html/atom/gen.go636
-rw-r--r--gcc-4.8.1/libgo/go/exp/html/atom/table.go694
-rw-r--r--gcc-4.8.1/libgo/go/exp/html/atom/table_test.go341
5 files changed, 1861 insertions, 0 deletions
diff --git a/gcc-4.8.1/libgo/go/exp/html/atom/atom.go b/gcc-4.8.1/libgo/go/exp/html/atom/atom.go
new file mode 100644
index 000000000..2dbd0fbf7
--- /dev/null
+++ b/gcc-4.8.1/libgo/go/exp/html/atom/atom.go
@@ -0,0 +1,81 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package atom provides integer codes (also known as atoms) for a fixed set of
+// frequently occurring HTML strings: tag names and attribute keys such as "p"
+// and "id".
+//
+// Sharing an atom's name between all elements with the same tag can result in
+// fewer string allocations when tokenizing and parsing HTML. Integer
+// comparisons are also generally faster than string comparisons.
+//
+// The value of an atom's particular code is not guaranteed to stay the same
+// between versions of this package. Neither is any ordering guaranteed:
+// whether atom.H1 < atom.H2 may also change. The codes are not guaranteed to
+// be dense. The only guarantees are that e.g. looking up "div" will yield
+// atom.Div, calling atom.Div.String will return "div", and atom.Div != 0.
+//
+// TODO(rsc): When this package moves out of exp we need to freeze atom values
+// across releases.
+package atom
+
+// Atom is an integer code for a string. The zero value maps to "".
+type Atom uint32
+
+// String returns the atom's name.
+func (a Atom) String() string {
+ start := uint32(a >> 8)
+ n := uint32(a & 0xff)
+ if start+n > uint32(len(atomText)) {
+ return ""
+ }
+ return atomText[start : start+n]
+}
+
+func (a Atom) string() string {
+ return atomText[a>>8 : a>>8+a&0xff]
+}
+
+// fnv computes the FNV hash with an arbitrary starting value h.
+func fnv(h uint32, s []byte) uint32 {
+ for i := range s {
+ h ^= uint32(s[i])
+ h *= 16777619
+ }
+ return h
+}
+
+func match(s string, t []byte) bool {
+ for i, c := range t {
+ if s[i] != c {
+ return false
+ }
+ }
+ return true
+}
+
+// Lookup returns the atom whose name is s. It returns zero if there is no
+// such atom. The lookup is case sensitive.
+func Lookup(s []byte) Atom {
+ if len(s) == 0 || len(s) > maxAtomLen {
+ return 0
+ }
+ h := fnv(hash0, s)
+ if a := table[h&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
+ return a
+ }
+ if a := table[(h>>16)&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
+ return a
+ }
+ return 0
+}
+
+// String returns a string whose contents are equal to s. In that sense, it is
+// equivalent to string(s) but may be more efficient.
+func String(s []byte) string {
+ if a := Lookup(s); a != 0 {
+ return a.String()
+ }
+ return string(s)
+}
diff --git a/gcc-4.8.1/libgo/go/exp/html/atom/atom_test.go b/gcc-4.8.1/libgo/go/exp/html/atom/atom_test.go
new file mode 100644
index 000000000..6e33704dd
--- /dev/null
+++ b/gcc-4.8.1/libgo/go/exp/html/atom/atom_test.go
@@ -0,0 +1,109 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package atom
+
+import (
+ "sort"
+ "testing"
+)
+
+func TestKnown(t *testing.T) {
+ for _, s := range testAtomList {
+ if atom := Lookup([]byte(s)); atom.String() != s {
+ t.Errorf("Lookup(%q) = %#x (%q)", s, uint32(atom), atom.String())
+ }
+ }
+}
+
+func TestHits(t *testing.T) {
+ for _, a := range table {
+ if a == 0 {
+ continue
+ }
+ got := Lookup([]byte(a.String()))
+ if got != a {
+ t.Errorf("Lookup(%q) = %#x, want %#x", a.String(), uint32(got), uint32(a))
+ }
+ }
+}
+
+func TestMisses(t *testing.T) {
+ testCases := []string{
+ "",
+ "\x00",
+ "\xff",
+ "A",
+ "DIV",
+ "Div",
+ "dIV",
+ "aa",
+ "a\x00",
+ "ab",
+ "abb",
+ "abbr0",
+ "abbr ",
+ " abbr",
+ " a",
+ "acceptcharset",
+ "acceptCharset",
+ "accept_charset",
+ "h0",
+ "h1h2",
+ "h7",
+ "onClick",
+ "λ",
+ // The following string has the same hash (0xa1d7fab7) as "onmouseover".
+ "\x00\x00\x00\x00\x00\x50\x18\xae\x38\xd0\xb7",
+ }
+ for _, tc := range testCases {
+ got := Lookup([]byte(tc))
+ if got != 0 {
+ t.Errorf("Lookup(%q): got %d, want 0", tc, got)
+ }
+ }
+}
+
+func TestForeignObject(t *testing.T) {
+ const (
+ afo = Foreignobject
+ afO = ForeignObject
+ sfo = "foreignobject"
+ sfO = "foreignObject"
+ )
+ if got := Lookup([]byte(sfo)); got != afo {
+ t.Errorf("Lookup(%q): got %#v, want %#v", sfo, got, afo)
+ }
+ if got := Lookup([]byte(sfO)); got != afO {
+ t.Errorf("Lookup(%q): got %#v, want %#v", sfO, got, afO)
+ }
+ if got := afo.String(); got != sfo {
+ t.Errorf("Atom(%#v).String(): got %q, want %q", afo, got, sfo)
+ }
+ if got := afO.String(); got != sfO {
+ t.Errorf("Atom(%#v).String(): got %q, want %q", afO, got, sfO)
+ }
+}
+
+func BenchmarkLookup(b *testing.B) {
+ sortedTable := make([]string, 0, len(table))
+ for _, a := range table {
+ if a != 0 {
+ sortedTable = append(sortedTable, a.String())
+ }
+ }
+ sort.Strings(sortedTable)
+
+ x := make([][]byte, 1000)
+ for i := range x {
+ x[i] = []byte(sortedTable[i%len(sortedTable)])
+ }
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ for _, s := range x {
+ Lookup(s)
+ }
+ }
+}
diff --git a/gcc-4.8.1/libgo/go/exp/html/atom/gen.go b/gcc-4.8.1/libgo/go/exp/html/atom/gen.go
new file mode 100644
index 000000000..9958a7188
--- /dev/null
+++ b/gcc-4.8.1/libgo/go/exp/html/atom/gen.go
@@ -0,0 +1,636 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+package main
+
+// This program generates table.go and table_test.go.
+// Invoke as
+//
+// go run gen.go |gofmt >table.go
+// go run gen.go -test |gofmt >table_test.go
+
+import (
+ "flag"
+ "fmt"
+ "math/rand"
+ "os"
+ "sort"
+ "strings"
+)
+
+// identifier converts s to a Go exported identifier.
+// It converts "div" to "Div" and "accept-charset" to "AcceptCharset".
+func identifier(s string) string {
+ b := make([]byte, 0, len(s))
+ cap := true
+ for _, c := range s {
+ if c == '-' {
+ cap = true
+ continue
+ }
+ if cap && 'a' <= c && c <= 'z' {
+ c -= 'a' - 'A'
+ }
+ cap = false
+ b = append(b, byte(c))
+ }
+ return string(b)
+}
+
+var test = flag.Bool("test", false, "generate table_test.go")
+
+func main() {
+ flag.Parse()
+
+ var all []string
+ all = append(all, elements...)
+ all = append(all, attributes...)
+ all = append(all, eventHandlers...)
+ all = append(all, extra...)
+ sort.Strings(all)
+
+ if *test {
+ fmt.Printf("// generated by go run gen.go -test; DO NOT EDIT\n\n")
+ fmt.Printf("package atom\n\n")
+ fmt.Printf("var testAtomList = []string{\n")
+ for _, s := range all {
+ fmt.Printf("\t%q,\n", s)
+ }
+ fmt.Printf("}\n")
+ return
+ }
+
+ // uniq - lists have dups
+ // compute max len too
+ maxLen := 0
+ w := 0
+ for _, s := range all {
+ if w == 0 || all[w-1] != s {
+ if maxLen < len(s) {
+ maxLen = len(s)
+ }
+ all[w] = s
+ w++
+ }
+ }
+ all = all[:w]
+
+ // Find hash that minimizes table size.
+ var best *table
+ for i := 0; i < 1000000; i++ {
+ if best != nil && 1<<(best.k-1) < len(all) {
+ break
+ }
+ h := rand.Uint32()
+ for k := uint(0); k <= 16; k++ {
+ if best != nil && k >= best.k {
+ break
+ }
+ var t table
+ if t.init(h, k, all) {
+ best = &t
+ break
+ }
+ }
+ }
+ if best == nil {
+ fmt.Fprintf(os.Stderr, "failed to construct string table\n")
+ os.Exit(1)
+ }
+
+ // Lay out strings, using overlaps when possible.
+ layout := append([]string{}, all...)
+
+ // Remove strings that are substrings of other strings
+ for changed := true; changed; {
+ changed = false
+ for i, s := range layout {
+ if s == "" {
+ continue
+ }
+ for j, t := range layout {
+ if i != j && t != "" && strings.Contains(s, t) {
+ changed = true
+ layout[j] = ""
+ }
+ }
+ }
+ }
+
+ // Join strings where one suffix matches another prefix.
+ for {
+ // Find best i, j, k such that layout[i][len-k:] == layout[j][:k],
+ // maximizing overlap length k.
+ besti := -1
+ bestj := -1
+ bestk := 0
+ for i, s := range layout {
+ if s == "" {
+ continue
+ }
+ for j, t := range layout {
+ if i == j {
+ continue
+ }
+ for k := bestk + 1; k <= len(s) && k <= len(t); k++ {
+ if s[len(s)-k:] == t[:k] {
+ besti = i
+ bestj = j
+ bestk = k
+ }
+ }
+ }
+ }
+ if bestk > 0 {
+ layout[besti] += layout[bestj][bestk:]
+ layout[bestj] = ""
+ continue
+ }
+ break
+ }
+
+ text := strings.Join(layout, "")
+
+ atom := map[string]uint32{}
+ for _, s := range all {
+ off := strings.Index(text, s)
+ if off < 0 {
+ panic("lost string " + s)
+ }
+ atom[s] = uint32(off<<8 | len(s))
+ }
+
+ // Generate the Go code.
+ fmt.Printf("// generated by go run gen.go; DO NOT EDIT\n\n")
+ fmt.Printf("package atom\n\nconst (\n")
+ for _, s := range all {
+ fmt.Printf("\t%s Atom = %#x\n", identifier(s), atom[s])
+ }
+ fmt.Printf(")\n\n")
+
+ fmt.Printf("const hash0 = %#x\n\n", best.h0)
+ fmt.Printf("const maxAtomLen = %d\n\n", maxLen)
+
+ fmt.Printf("var table = [1<<%d]Atom{\n", best.k)
+ for i, s := range best.tab {
+ if s == "" {
+ continue
+ }
+ fmt.Printf("\t%#x: %#x, // %s\n", i, atom[s], s)
+ }
+ fmt.Printf("}\n")
+ datasize := (1 << best.k) * 4
+
+ fmt.Printf("const atomText =\n")
+ textsize := len(text)
+ for len(text) > 60 {
+ fmt.Printf("\t%q +\n", text[:60])
+ text = text[60:]
+ }
+ fmt.Printf("\t%q\n\n", text)
+
+ fmt.Fprintf(os.Stderr, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize)
+}
+
+type byLen []string
+
+func (x byLen) Less(i, j int) bool { return len(x[i]) > len(x[j]) }
+func (x byLen) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
+func (x byLen) Len() int { return len(x) }
+
+// fnv computes the FNV hash with an arbitrary starting value h.
+func fnv(h uint32, s string) uint32 {
+ for i := 0; i < len(s); i++ {
+ h ^= uint32(s[i])
+ h *= 16777619
+ }
+ return h
+}
+
+// A table represents an attempt at constructing the lookup table.
+// The lookup table uses cuckoo hashing, meaning that each string
+// can be found in one of two positions.
+type table struct {
+ h0 uint32
+ k uint
+ mask uint32
+ tab []string
+}
+
+// hash returns the two hashes for s.
+func (t *table) hash(s string) (h1, h2 uint32) {
+ h := fnv(t.h0, s)
+ h1 = h & t.mask
+ h2 = (h >> 16) & t.mask
+ return
+}
+
+// init initializes the table with the given parameters.
+// h0 is the initial hash value,
+// k is the number of bits of hash value to use, and
+// x is the list of strings to store in the table.
+// init returns false if the table cannot be constructed.
+func (t *table) init(h0 uint32, k uint, x []string) bool {
+ t.h0 = h0
+ t.k = k
+ t.tab = make([]string, 1<<k)
+ t.mask = 1<<k - 1
+ for _, s := range x {
+ if !t.insert(s) {
+ return false
+ }
+ }
+ return true
+}
+
+// insert inserts s in the table.
+func (t *table) insert(s string) bool {
+ h1, h2 := t.hash(s)
+ if t.tab[h1] == "" {
+ t.tab[h1] = s
+ return true
+ }
+ if t.tab[h2] == "" {
+ t.tab[h2] = s
+ return true
+ }
+ if t.push(h1, 0) {
+ t.tab[h1] = s
+ return true
+ }
+ if t.push(h2, 0) {
+ t.tab[h2] = s
+ return true
+ }
+ return false
+}
+
+// push attempts to push aside the entry in slot i.
+func (t *table) push(i uint32, depth int) bool {
+ if depth > len(t.tab) {
+ return false
+ }
+ s := t.tab[i]
+ h1, h2 := t.hash(s)
+ j := h1 + h2 - i
+ if t.tab[j] != "" && !t.push(j, depth+1) {
+ return false
+ }
+ t.tab[j] = s
+ return true
+}
+
+// The lists of element names and attribute keys were taken from
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/section-index.html
+// as of the "HTML Living Standard - Last Updated 30 May 2012" version.
+
+var elements = []string{
+ "a",
+ "abbr",
+ "address",
+ "area",
+ "article",
+ "aside",
+ "audio",
+ "b",
+ "base",
+ "bdi",
+ "bdo",
+ "blockquote",
+ "body",
+ "br",
+ "button",
+ "canvas",
+ "caption",
+ "cite",
+ "code",
+ "col",
+ "colgroup",
+ "command",
+ "data",
+ "datalist",
+ "dd",
+ "del",
+ "details",
+ "dfn",
+ "dialog",
+ "div",
+ "dl",
+ "dt",
+ "em",
+ "embed",
+ "fieldset",
+ "figcaption",
+ "figure",
+ "footer",
+ "form",
+ "h1",
+ "h2",
+ "h3",
+ "h4",
+ "h5",
+ "h6",
+ "head",
+ "header",
+ "hgroup",
+ "hr",
+ "html",
+ "i",
+ "iframe",
+ "img",
+ "input",
+ "ins",
+ "kbd",
+ "keygen",
+ "label",
+ "legend",
+ "li",
+ "link",
+ "map",
+ "mark",
+ "menu",
+ "meta",
+ "meter",
+ "nav",
+ "noscript",
+ "object",
+ "ol",
+ "optgroup",
+ "option",
+ "output",
+ "p",
+ "param",
+ "pre",
+ "progress",
+ "q",
+ "rp",
+ "rt",
+ "ruby",
+ "s",
+ "samp",
+ "script",
+ "section",
+ "select",
+ "small",
+ "source",
+ "span",
+ "strong",
+ "style",
+ "sub",
+ "summary",
+ "sup",
+ "table",
+ "tbody",
+ "td",
+ "textarea",
+ "tfoot",
+ "th",
+ "thead",
+ "time",
+ "title",
+ "tr",
+ "track",
+ "u",
+ "ul",
+ "var",
+ "video",
+ "wbr",
+}
+
+var attributes = []string{
+ "accept",
+ "accept-charset",
+ "accesskey",
+ "action",
+ "alt",
+ "async",
+ "autocomplete",
+ "autofocus",
+ "autoplay",
+ "border",
+ "challenge",
+ "charset",
+ "checked",
+ "cite",
+ "class",
+ "cols",
+ "colspan",
+ "command",
+ "content",
+ "contenteditable",
+ "contextmenu",
+ "controls",
+ "coords",
+ "crossorigin",
+ "data",
+ "datetime",
+ "default",
+ "defer",
+ "dir",
+ "dirname",
+ "disabled",
+ "download",
+ "draggable",
+ "dropzone",
+ "enctype",
+ "for",
+ "form",
+ "formaction",
+ "formenctype",
+ "formmethod",
+ "formnovalidate",
+ "formtarget",
+ "headers",
+ "height",
+ "hidden",
+ "high",
+ "href",
+ "hreflang",
+ "http-equiv",
+ "icon",
+ "id",
+ "inert",
+ "ismap",
+ "itemid",
+ "itemprop",
+ "itemref",
+ "itemscope",
+ "itemtype",
+ "keytype",
+ "kind",
+ "label",
+ "lang",
+ "list",
+ "loop",
+ "low",
+ "manifest",
+ "max",
+ "maxlength",
+ "media",
+ "mediagroup",
+ "method",
+ "min",
+ "multiple",
+ "muted",
+ "name",
+ "novalidate",
+ "open",
+ "optimum",
+ "pattern",
+ "ping",
+ "placeholder",
+ "poster",
+ "preload",
+ "radiogroup",
+ "readonly",
+ "rel",
+ "required",
+ "reversed",
+ "rows",
+ "rowspan",
+ "sandbox",
+ "spellcheck",
+ "scope",
+ "scoped",
+ "seamless",
+ "selected",
+ "shape",
+ "size",
+ "sizes",
+ "span",
+ "src",
+ "srcdoc",
+ "srclang",
+ "start",
+ "step",
+ "style",
+ "tabindex",
+ "target",
+ "title",
+ "translate",
+ "type",
+ "typemustmatch",
+ "usemap",
+ "value",
+ "width",
+ "wrap",
+}
+
+var eventHandlers = []string{
+ "onabort",
+ "onafterprint",
+ "onbeforeprint",
+ "onbeforeunload",
+ "onblur",
+ "oncancel",
+ "oncanplay",
+ "oncanplaythrough",
+ "onchange",
+ "onclick",
+ "onclose",
+ "oncontextmenu",
+ "oncuechange",
+ "ondblclick",
+ "ondrag",
+ "ondragend",
+ "ondragenter",
+ "ondragleave",
+ "ondragover",
+ "ondragstart",
+ "ondrop",
+ "ondurationchange",
+ "onemptied",
+ "onended",
+ "onerror",
+ "onfocus",
+ "onhashchange",
+ "oninput",
+ "oninvalid",
+ "onkeydown",
+ "onkeypress",
+ "onkeyup",
+ "onload",
+ "onloadeddata",
+ "onloadedmetadata",
+ "onloadstart",
+ "onmessage",
+ "onmousedown",
+ "onmousemove",
+ "onmouseout",
+ "onmouseover",
+ "onmouseup",
+ "onmousewheel",
+ "onoffline",
+ "ononline",
+ "onpagehide",
+ "onpageshow",
+ "onpause",
+ "onplay",
+ "onplaying",
+ "onpopstate",
+ "onprogress",
+ "onratechange",
+ "onreset",
+ "onresize",
+ "onscroll",
+ "onseeked",
+ "onseeking",
+ "onselect",
+ "onshow",
+ "onstalled",
+ "onstorage",
+ "onsubmit",
+ "onsuspend",
+ "ontimeupdate",
+ "onunload",
+ "onvolumechange",
+ "onwaiting",
+}
+
+// extra are ad-hoc values not covered by any of the lists above.
+var extra = []string{
+ "align",
+ "annotation",
+ "annotation-xml",
+ "applet",
+ "basefont",
+ "bgsound",
+ "big",
+ "blink",
+ "center",
+ "color",
+ "desc",
+ "face",
+ "font",
+ "foreignObject", // HTML is case-insensitive, but SVG-embedded-in-HTML is case-sensitive.
+ "foreignobject",
+ "frame",
+ "frameset",
+ "image",
+ "isindex",
+ "listing",
+ "malignmark",
+ "marquee",
+ "math",
+ "mglyph",
+ "mi",
+ "mn",
+ "mo",
+ "ms",
+ "mtext",
+ "nobr",
+ "noembed",
+ "noframes",
+ "plaintext",
+ "prompt",
+ "public",
+ "spacer",
+ "strike",
+ "svg",
+ "system",
+ "tt",
+ "xmp",
+}
diff --git a/gcc-4.8.1/libgo/go/exp/html/atom/table.go b/gcc-4.8.1/libgo/go/exp/html/atom/table.go
new file mode 100644
index 000000000..20b8b8a59
--- /dev/null
+++ b/gcc-4.8.1/libgo/go/exp/html/atom/table.go
@@ -0,0 +1,694 @@
+// generated by go run gen.go; DO NOT EDIT
+
+package atom
+
+const (
+ A Atom = 0x1
+ Abbr Atom = 0x4
+ Accept Atom = 0x2106
+ AcceptCharset Atom = 0x210e
+ Accesskey Atom = 0x3309
+ Action Atom = 0x21b06
+ Address Atom = 0x5d507
+ Align Atom = 0x1105
+ Alt Atom = 0x4503
+ Annotation Atom = 0x18d0a
+ AnnotationXml Atom = 0x18d0e
+ Applet Atom = 0x2d106
+ Area Atom = 0x31804
+ Article Atom = 0x39907
+ Aside Atom = 0x4f05
+ Async Atom = 0x9305
+ Audio Atom = 0xaf05
+ Autocomplete Atom = 0xd50c
+ Autofocus Atom = 0xe109
+ Autoplay Atom = 0x10c08
+ B Atom = 0x101
+ Base Atom = 0x11404
+ Basefont Atom = 0x11408
+ Bdi Atom = 0x1a03
+ Bdo Atom = 0x12503
+ Bgsound Atom = 0x13807
+ Big Atom = 0x14403
+ Blink Atom = 0x14705
+ Blockquote Atom = 0x14c0a
+ Body Atom = 0x2f04
+ Border Atom = 0x15606
+ Br Atom = 0x202
+ Button Atom = 0x15c06
+ Canvas Atom = 0x4b06
+ Caption Atom = 0x1e007
+ Center Atom = 0x2df06
+ Challenge Atom = 0x23e09
+ Charset Atom = 0x2807
+ Checked Atom = 0x33f07
+ Cite Atom = 0x9704
+ Class Atom = 0x3d905
+ Code Atom = 0x16f04
+ Col Atom = 0x17603
+ Colgroup Atom = 0x17608
+ Color Atom = 0x18305
+ Cols Atom = 0x18804
+ Colspan Atom = 0x18807
+ Command Atom = 0x19b07
+ Content Atom = 0x42c07
+ Contenteditable Atom = 0x42c0f
+ Contextmenu Atom = 0x3480b
+ Controls Atom = 0x1ae08
+ Coords Atom = 0x1ba06
+ Crossorigin Atom = 0x1c40b
+ Data Atom = 0x44304
+ Datalist Atom = 0x44308
+ Datetime Atom = 0x25b08
+ Dd Atom = 0x28802
+ Default Atom = 0x5207
+ Defer Atom = 0x17105
+ Del Atom = 0x4d603
+ Desc Atom = 0x4804
+ Details Atom = 0x6507
+ Dfn Atom = 0x8303
+ Dialog Atom = 0x1b06
+ Dir Atom = 0x9d03
+ Dirname Atom = 0x9d07
+ Disabled Atom = 0x10008
+ Div Atom = 0x10703
+ Dl Atom = 0x13e02
+ Download Atom = 0x40908
+ Draggable Atom = 0x1a109
+ Dropzone Atom = 0x3a208
+ Dt Atom = 0x4e402
+ Em Atom = 0x7f02
+ Embed Atom = 0x7f05
+ Enctype Atom = 0x23007
+ Face Atom = 0x2dd04
+ Fieldset Atom = 0x1d508
+ Figcaption Atom = 0x1dd0a
+ Figure Atom = 0x1f106
+ Font Atom = 0x11804
+ Footer Atom = 0x5906
+ For Atom = 0x1fd03
+ ForeignObject Atom = 0x1fd0d
+ Foreignobject Atom = 0x20a0d
+ Form Atom = 0x21704
+ Formaction Atom = 0x2170a
+ Formenctype Atom = 0x22c0b
+ Formmethod Atom = 0x2470a
+ Formnovalidate Atom = 0x2510e
+ Formtarget Atom = 0x2660a
+ Frame Atom = 0x8705
+ Frameset Atom = 0x8708
+ H1 Atom = 0x13602
+ H2 Atom = 0x29602
+ H3 Atom = 0x2c502
+ H4 Atom = 0x30e02
+ H5 Atom = 0x4e602
+ H6 Atom = 0x27002
+ Head Atom = 0x2fa04
+ Header Atom = 0x2fa06
+ Headers Atom = 0x2fa07
+ Height Atom = 0x27206
+ Hgroup Atom = 0x27a06
+ Hidden Atom = 0x28606
+ High Atom = 0x29304
+ Hr Atom = 0x13102
+ Href Atom = 0x29804
+ Hreflang Atom = 0x29808
+ Html Atom = 0x27604
+ HttpEquiv Atom = 0x2a00a
+ I Atom = 0x601
+ Icon Atom = 0x42b04
+ Id Atom = 0x5102
+ Iframe Atom = 0x2b406
+ Image Atom = 0x2ba05
+ Img Atom = 0x2bf03
+ Inert Atom = 0x4c105
+ Input Atom = 0x3f605
+ Ins Atom = 0x1cd03
+ Isindex Atom = 0x2c707
+ Ismap Atom = 0x2ce05
+ Itemid Atom = 0x9806
+ Itemprop Atom = 0x57e08
+ Itemref Atom = 0x2d707
+ Itemscope Atom = 0x2e509
+ Itemtype Atom = 0x2ef08
+ Kbd Atom = 0x1903
+ Keygen Atom = 0x3906
+ Keytype Atom = 0x51207
+ Kind Atom = 0xfd04
+ Label Atom = 0xba05
+ Lang Atom = 0x29c04
+ Legend Atom = 0x1a806
+ Li Atom = 0x1202
+ Link Atom = 0x14804
+ List Atom = 0x44704
+ Listing Atom = 0x44707
+ Loop Atom = 0xbe04
+ Low Atom = 0x13f03
+ Malignmark Atom = 0x100a
+ Manifest Atom = 0x5b608
+ Map Atom = 0x2d003
+ Mark Atom = 0x1604
+ Marquee Atom = 0x5f207
+ Math Atom = 0x2f704
+ Max Atom = 0x30603
+ Maxlength Atom = 0x30609
+ Media Atom = 0xa205
+ Mediagroup Atom = 0xa20a
+ Menu Atom = 0x34f04
+ Meta Atom = 0x45604
+ Meter Atom = 0x26105
+ Method Atom = 0x24b06
+ Mglyph Atom = 0x2c006
+ Mi Atom = 0x9b02
+ Min Atom = 0x31003
+ Mn Atom = 0x25402
+ Mo Atom = 0x47a02
+ Ms Atom = 0x2e802
+ Mtext Atom = 0x31305
+ Multiple Atom = 0x32108
+ Muted Atom = 0x32905
+ Name Atom = 0xa004
+ Nav Atom = 0x3e03
+ Nobr Atom = 0x7404
+ Noembed Atom = 0x7d07
+ Noframes Atom = 0x8508
+ Noscript Atom = 0x28b08
+ Novalidate Atom = 0x2550a
+ Object Atom = 0x21106
+ Ol Atom = 0xcd02
+ Onabort Atom = 0x16007
+ Onafterprint Atom = 0x1e50c
+ Onbeforeprint Atom = 0x21f0d
+ Onbeforeunload Atom = 0x5c90e
+ Onblur Atom = 0x3e206
+ Oncancel Atom = 0xb308
+ Oncanplay Atom = 0x12709
+ Oncanplaythrough Atom = 0x12710
+ Onchange Atom = 0x3b808
+ Onclick Atom = 0x2ad07
+ Onclose Atom = 0x32e07
+ Oncontextmenu Atom = 0x3460d
+ Oncuechange Atom = 0x3530b
+ Ondblclick Atom = 0x35e0a
+ Ondrag Atom = 0x36806
+ Ondragend Atom = 0x36809
+ Ondragenter Atom = 0x3710b
+ Ondragleave Atom = 0x37c0b
+ Ondragover Atom = 0x3870a
+ Ondragstart Atom = 0x3910b
+ Ondrop Atom = 0x3a006
+ Ondurationchange Atom = 0x3b010
+ Onemptied Atom = 0x3a709
+ Onended Atom = 0x3c007
+ Onerror Atom = 0x3c707
+ Onfocus Atom = 0x3ce07
+ Onhashchange Atom = 0x3e80c
+ Oninput Atom = 0x3f407
+ Oninvalid Atom = 0x3fb09
+ Onkeydown Atom = 0x40409
+ Onkeypress Atom = 0x4110a
+ Onkeyup Atom = 0x42107
+ Onload Atom = 0x43b06
+ Onloadeddata Atom = 0x43b0c
+ Onloadedmetadata Atom = 0x44e10
+ Onloadstart Atom = 0x4640b
+ Onmessage Atom = 0x46f09
+ Onmousedown Atom = 0x4780b
+ Onmousemove Atom = 0x4830b
+ Onmouseout Atom = 0x48e0a
+ Onmouseover Atom = 0x49b0b
+ Onmouseup Atom = 0x4a609
+ Onmousewheel Atom = 0x4af0c
+ Onoffline Atom = 0x4bb09
+ Ononline Atom = 0x4c608
+ Onpagehide Atom = 0x4ce0a
+ Onpageshow Atom = 0x4d90a
+ Onpause Atom = 0x4e807
+ Onplay Atom = 0x4f206
+ Onplaying Atom = 0x4f209
+ Onpopstate Atom = 0x4fb0a
+ Onprogress Atom = 0x5050a
+ Onratechange Atom = 0x5190c
+ Onreset Atom = 0x52507
+ Onresize Atom = 0x52c08
+ Onscroll Atom = 0x53a08
+ Onseeked Atom = 0x54208
+ Onseeking Atom = 0x54a09
+ Onselect Atom = 0x55308
+ Onshow Atom = 0x55d06
+ Onstalled Atom = 0x56609
+ Onstorage Atom = 0x56f09
+ Onsubmit Atom = 0x57808
+ Onsuspend Atom = 0x58809
+ Ontimeupdate Atom = 0x1190c
+ Onunload Atom = 0x59108
+ Onvolumechange Atom = 0x5990e
+ Onwaiting Atom = 0x5a709
+ Open Atom = 0x58404
+ Optgroup Atom = 0xc008
+ Optimum Atom = 0x5b007
+ Option Atom = 0x5c506
+ Output Atom = 0x49506
+ P Atom = 0xc01
+ Param Atom = 0xc05
+ Pattern Atom = 0x6e07
+ Ping Atom = 0xab04
+ Placeholder Atom = 0xc70b
+ Plaintext Atom = 0xf109
+ Poster Atom = 0x17d06
+ Pre Atom = 0x27f03
+ Preload Atom = 0x27f07
+ Progress Atom = 0x50708
+ Prompt Atom = 0x5bf06
+ Public Atom = 0x42706
+ Q Atom = 0x15101
+ Radiogroup Atom = 0x30a
+ Readonly Atom = 0x31908
+ Rel Atom = 0x28003
+ Required Atom = 0x1f508
+ Reversed Atom = 0x5e08
+ Rows Atom = 0x7704
+ Rowspan Atom = 0x7707
+ Rp Atom = 0x1eb02
+ Rt Atom = 0x16502
+ Ruby Atom = 0xd104
+ S Atom = 0x2c01
+ Samp Atom = 0x6b04
+ Sandbox Atom = 0xe907
+ Scope Atom = 0x2e905
+ Scoped Atom = 0x2e906
+ Script Atom = 0x28d06
+ Seamless Atom = 0x33308
+ Section Atom = 0x3dd07
+ Select Atom = 0x55506
+ Selected Atom = 0x55508
+ Shape Atom = 0x1b505
+ Size Atom = 0x53004
+ Sizes Atom = 0x53005
+ Small Atom = 0x1bf05
+ Source Atom = 0x1cf06
+ Spacer Atom = 0x30006
+ Span Atom = 0x7a04
+ Spellcheck Atom = 0x33a0a
+ Src Atom = 0x3d403
+ Srcdoc Atom = 0x3d406
+ Srclang Atom = 0x41a07
+ Start Atom = 0x39705
+ Step Atom = 0x5bc04
+ Strike Atom = 0x50e06
+ Strong Atom = 0x53406
+ Style Atom = 0x5db05
+ Sub Atom = 0x57a03
+ Summary Atom = 0x5e007
+ Sup Atom = 0x5e703
+ Svg Atom = 0x5ea03
+ System Atom = 0x5ed06
+ Tabindex Atom = 0x45c08
+ Table Atom = 0x43605
+ Target Atom = 0x26a06
+ Tbody Atom = 0x2e05
+ Td Atom = 0x4702
+ Textarea Atom = 0x31408
+ Tfoot Atom = 0x5805
+ Th Atom = 0x13002
+ Thead Atom = 0x2f905
+ Time Atom = 0x11b04
+ Title Atom = 0x8e05
+ Tr Atom = 0xf902
+ Track Atom = 0xf905
+ Translate Atom = 0x16609
+ Tt Atom = 0x7002
+ Type Atom = 0x23304
+ Typemustmatch Atom = 0x2330d
+ U Atom = 0xb01
+ Ul Atom = 0x5602
+ Usemap Atom = 0x4ec06
+ Value Atom = 0x4005
+ Var Atom = 0x10903
+ Video Atom = 0x2a905
+ Wbr Atom = 0x14103
+ Width Atom = 0x4e205
+ Wrap Atom = 0x56204
+ Xmp Atom = 0xef03
+)
+
+const hash0 = 0xc17da63e
+
+const maxAtomLen = 16
+
+var table = [1 << 9]Atom{
+ 0x1: 0x4830b, // onmousemove
+ 0x2: 0x5a709, // onwaiting
+ 0x4: 0x5bf06, // prompt
+ 0x7: 0x5b007, // optimum
+ 0x8: 0x1604, // mark
+ 0xa: 0x2d707, // itemref
+ 0xb: 0x4d90a, // onpageshow
+ 0xc: 0x55506, // select
+ 0xd: 0x1a109, // draggable
+ 0xe: 0x3e03, // nav
+ 0xf: 0x19b07, // command
+ 0x11: 0xb01, // u
+ 0x14: 0x2fa07, // headers
+ 0x15: 0x44308, // datalist
+ 0x17: 0x6b04, // samp
+ 0x1a: 0x40409, // onkeydown
+ 0x1b: 0x53a08, // onscroll
+ 0x1c: 0x17603, // col
+ 0x20: 0x57e08, // itemprop
+ 0x21: 0x2a00a, // http-equiv
+ 0x22: 0x5e703, // sup
+ 0x24: 0x1f508, // required
+ 0x2b: 0x27f07, // preload
+ 0x2c: 0x21f0d, // onbeforeprint
+ 0x2d: 0x3710b, // ondragenter
+ 0x2e: 0x4e402, // dt
+ 0x2f: 0x57808, // onsubmit
+ 0x30: 0x13102, // hr
+ 0x31: 0x3460d, // oncontextmenu
+ 0x33: 0x2ba05, // image
+ 0x34: 0x4e807, // onpause
+ 0x35: 0x27a06, // hgroup
+ 0x36: 0xab04, // ping
+ 0x37: 0x55308, // onselect
+ 0x3a: 0x10703, // div
+ 0x40: 0x9b02, // mi
+ 0x41: 0x33308, // seamless
+ 0x42: 0x2807, // charset
+ 0x43: 0x5102, // id
+ 0x44: 0x4fb0a, // onpopstate
+ 0x45: 0x4d603, // del
+ 0x46: 0x5f207, // marquee
+ 0x47: 0x3309, // accesskey
+ 0x49: 0x5906, // footer
+ 0x4a: 0x2d106, // applet
+ 0x4b: 0x2ce05, // ismap
+ 0x51: 0x34f04, // menu
+ 0x52: 0x2f04, // body
+ 0x55: 0x8708, // frameset
+ 0x56: 0x52507, // onreset
+ 0x57: 0x14705, // blink
+ 0x58: 0x8e05, // title
+ 0x59: 0x39907, // article
+ 0x5b: 0x13002, // th
+ 0x5d: 0x15101, // q
+ 0x5e: 0x58404, // open
+ 0x5f: 0x31804, // area
+ 0x61: 0x43b06, // onload
+ 0x62: 0x3f605, // input
+ 0x63: 0x11404, // base
+ 0x64: 0x18807, // colspan
+ 0x65: 0x51207, // keytype
+ 0x66: 0x13e02, // dl
+ 0x68: 0x1d508, // fieldset
+ 0x6a: 0x31003, // min
+ 0x6b: 0x10903, // var
+ 0x6f: 0x2fa06, // header
+ 0x70: 0x16502, // rt
+ 0x71: 0x17608, // colgroup
+ 0x72: 0x25402, // mn
+ 0x74: 0x16007, // onabort
+ 0x75: 0x3906, // keygen
+ 0x76: 0x4bb09, // onoffline
+ 0x77: 0x23e09, // challenge
+ 0x78: 0x2d003, // map
+ 0x7a: 0x30e02, // h4
+ 0x7b: 0x3c707, // onerror
+ 0x7c: 0x30609, // maxlength
+ 0x7d: 0x31305, // mtext
+ 0x7e: 0x5805, // tfoot
+ 0x7f: 0x11804, // font
+ 0x80: 0x100a, // malignmark
+ 0x81: 0x45604, // meta
+ 0x82: 0x9305, // async
+ 0x83: 0x2c502, // h3
+ 0x84: 0x28802, // dd
+ 0x85: 0x29804, // href
+ 0x86: 0xa20a, // mediagroup
+ 0x87: 0x1ba06, // coords
+ 0x88: 0x41a07, // srclang
+ 0x89: 0x35e0a, // ondblclick
+ 0x8a: 0x4005, // value
+ 0x8c: 0xb308, // oncancel
+ 0x8e: 0x33a0a, // spellcheck
+ 0x8f: 0x8705, // frame
+ 0x91: 0x14403, // big
+ 0x94: 0x21b06, // action
+ 0x95: 0x9d03, // dir
+ 0x97: 0x31908, // readonly
+ 0x99: 0x43605, // table
+ 0x9a: 0x5e007, // summary
+ 0x9b: 0x14103, // wbr
+ 0x9c: 0x30a, // radiogroup
+ 0x9d: 0xa004, // name
+ 0x9f: 0x5ed06, // system
+ 0xa1: 0x18305, // color
+ 0xa2: 0x4b06, // canvas
+ 0xa3: 0x27604, // html
+ 0xa5: 0x54a09, // onseeking
+ 0xac: 0x1b505, // shape
+ 0xad: 0x28003, // rel
+ 0xae: 0x12710, // oncanplaythrough
+ 0xaf: 0x3870a, // ondragover
+ 0xb1: 0x1fd0d, // foreignObject
+ 0xb3: 0x7704, // rows
+ 0xb6: 0x44707, // listing
+ 0xb7: 0x49506, // output
+ 0xb9: 0x3480b, // contextmenu
+ 0xbb: 0x13f03, // low
+ 0xbc: 0x1eb02, // rp
+ 0xbd: 0x58809, // onsuspend
+ 0xbe: 0x15c06, // button
+ 0xbf: 0x4804, // desc
+ 0xc1: 0x3dd07, // section
+ 0xc2: 0x5050a, // onprogress
+ 0xc3: 0x56f09, // onstorage
+ 0xc4: 0x2f704, // math
+ 0xc5: 0x4f206, // onplay
+ 0xc7: 0x5602, // ul
+ 0xc8: 0x6e07, // pattern
+ 0xc9: 0x4af0c, // onmousewheel
+ 0xca: 0x36809, // ondragend
+ 0xcb: 0xd104, // ruby
+ 0xcc: 0xc01, // p
+ 0xcd: 0x32e07, // onclose
+ 0xce: 0x26105, // meter
+ 0xcf: 0x13807, // bgsound
+ 0xd2: 0x27206, // height
+ 0xd4: 0x101, // b
+ 0xd5: 0x2ef08, // itemtype
+ 0xd8: 0x1e007, // caption
+ 0xd9: 0x10008, // disabled
+ 0xdc: 0x5ea03, // svg
+ 0xdd: 0x1bf05, // small
+ 0xde: 0x44304, // data
+ 0xe0: 0x4c608, // ononline
+ 0xe1: 0x2c006, // mglyph
+ 0xe3: 0x7f05, // embed
+ 0xe4: 0xf902, // tr
+ 0xe5: 0x4640b, // onloadstart
+ 0xe7: 0x3b010, // ondurationchange
+ 0xed: 0x12503, // bdo
+ 0xee: 0x4702, // td
+ 0xef: 0x4f05, // aside
+ 0xf0: 0x29602, // h2
+ 0xf1: 0x50708, // progress
+ 0xf2: 0x14c0a, // blockquote
+ 0xf4: 0xba05, // label
+ 0xf5: 0x601, // i
+ 0xf7: 0x7707, // rowspan
+ 0xfb: 0x4f209, // onplaying
+ 0xfd: 0x2bf03, // img
+ 0xfe: 0xc008, // optgroup
+ 0xff: 0x42c07, // content
+ 0x101: 0x5190c, // onratechange
+ 0x103: 0x3e80c, // onhashchange
+ 0x104: 0x6507, // details
+ 0x106: 0x40908, // download
+ 0x109: 0xe907, // sandbox
+ 0x10b: 0x42c0f, // contenteditable
+ 0x10d: 0x37c0b, // ondragleave
+ 0x10e: 0x2106, // accept
+ 0x10f: 0x55508, // selected
+ 0x112: 0x2170a, // formaction
+ 0x113: 0x2df06, // center
+ 0x115: 0x44e10, // onloadedmetadata
+ 0x116: 0x14804, // link
+ 0x117: 0x11b04, // time
+ 0x118: 0x1c40b, // crossorigin
+ 0x119: 0x3ce07, // onfocus
+ 0x11a: 0x56204, // wrap
+ 0x11b: 0x42b04, // icon
+ 0x11d: 0x2a905, // video
+ 0x11e: 0x3d905, // class
+ 0x121: 0x5990e, // onvolumechange
+ 0x122: 0x3e206, // onblur
+ 0x123: 0x2e509, // itemscope
+ 0x124: 0x5db05, // style
+ 0x127: 0x42706, // public
+ 0x129: 0x2510e, // formnovalidate
+ 0x12a: 0x55d06, // onshow
+ 0x12c: 0x16609, // translate
+ 0x12d: 0x9704, // cite
+ 0x12e: 0x2e802, // ms
+ 0x12f: 0x1190c, // ontimeupdate
+ 0x130: 0xfd04, // kind
+ 0x131: 0x2660a, // formtarget
+ 0x135: 0x3c007, // onended
+ 0x136: 0x28606, // hidden
+ 0x137: 0x2c01, // s
+ 0x139: 0x2470a, // formmethod
+ 0x13a: 0x44704, // list
+ 0x13c: 0x27002, // h6
+ 0x13d: 0xcd02, // ol
+ 0x13e: 0x3530b, // oncuechange
+ 0x13f: 0x20a0d, // foreignobject
+ 0x143: 0x5c90e, // onbeforeunload
+ 0x145: 0x3a709, // onemptied
+ 0x146: 0x17105, // defer
+ 0x147: 0xef03, // xmp
+ 0x148: 0xaf05, // audio
+ 0x149: 0x1903, // kbd
+ 0x14c: 0x46f09, // onmessage
+ 0x14d: 0x5c506, // option
+ 0x14e: 0x4503, // alt
+ 0x14f: 0x33f07, // checked
+ 0x150: 0x10c08, // autoplay
+ 0x152: 0x202, // br
+ 0x153: 0x2550a, // novalidate
+ 0x156: 0x7d07, // noembed
+ 0x159: 0x2ad07, // onclick
+ 0x15a: 0x4780b, // onmousedown
+ 0x15b: 0x3b808, // onchange
+ 0x15e: 0x3fb09, // oninvalid
+ 0x15f: 0x2e906, // scoped
+ 0x160: 0x1ae08, // controls
+ 0x161: 0x32905, // muted
+ 0x163: 0x4ec06, // usemap
+ 0x164: 0x1dd0a, // figcaption
+ 0x165: 0x36806, // ondrag
+ 0x166: 0x29304, // high
+ 0x168: 0x3d403, // src
+ 0x169: 0x17d06, // poster
+ 0x16b: 0x18d0e, // annotation-xml
+ 0x16c: 0x5bc04, // step
+ 0x16d: 0x4, // abbr
+ 0x16e: 0x1b06, // dialog
+ 0x170: 0x1202, // li
+ 0x172: 0x47a02, // mo
+ 0x175: 0x1fd03, // for
+ 0x176: 0x1cd03, // ins
+ 0x178: 0x53004, // size
+ 0x17a: 0x5207, // default
+ 0x17b: 0x1a03, // bdi
+ 0x17c: 0x4ce0a, // onpagehide
+ 0x17d: 0x9d07, // dirname
+ 0x17e: 0x23304, // type
+ 0x17f: 0x21704, // form
+ 0x180: 0x4c105, // inert
+ 0x181: 0x12709, // oncanplay
+ 0x182: 0x8303, // dfn
+ 0x183: 0x45c08, // tabindex
+ 0x186: 0x7f02, // em
+ 0x187: 0x29c04, // lang
+ 0x189: 0x3a208, // dropzone
+ 0x18a: 0x4110a, // onkeypress
+ 0x18b: 0x25b08, // datetime
+ 0x18c: 0x18804, // cols
+ 0x18d: 0x1, // a
+ 0x18e: 0x43b0c, // onloadeddata
+ 0x191: 0x15606, // border
+ 0x192: 0x2e05, // tbody
+ 0x193: 0x24b06, // method
+ 0x195: 0xbe04, // loop
+ 0x196: 0x2b406, // iframe
+ 0x198: 0x2fa04, // head
+ 0x19e: 0x5b608, // manifest
+ 0x19f: 0xe109, // autofocus
+ 0x1a0: 0x16f04, // code
+ 0x1a1: 0x53406, // strong
+ 0x1a2: 0x32108, // multiple
+ 0x1a3: 0xc05, // param
+ 0x1a6: 0x23007, // enctype
+ 0x1a7: 0x2dd04, // face
+ 0x1a8: 0xf109, // plaintext
+ 0x1a9: 0x13602, // h1
+ 0x1aa: 0x56609, // onstalled
+ 0x1ad: 0x28d06, // script
+ 0x1ae: 0x30006, // spacer
+ 0x1af: 0x52c08, // onresize
+ 0x1b0: 0x49b0b, // onmouseover
+ 0x1b1: 0x59108, // onunload
+ 0x1b2: 0x54208, // onseeked
+ 0x1b4: 0x2330d, // typemustmatch
+ 0x1b5: 0x1f106, // figure
+ 0x1b6: 0x48e0a, // onmouseout
+ 0x1b7: 0x27f03, // pre
+ 0x1b8: 0x4e205, // width
+ 0x1bb: 0x7404, // nobr
+ 0x1be: 0x7002, // tt
+ 0x1bf: 0x1105, // align
+ 0x1c0: 0x3f407, // oninput
+ 0x1c3: 0x42107, // onkeyup
+ 0x1c6: 0x1e50c, // onafterprint
+ 0x1c7: 0x210e, // accept-charset
+ 0x1c8: 0x9806, // itemid
+ 0x1cb: 0x50e06, // strike
+ 0x1cc: 0x57a03, // sub
+ 0x1cd: 0xf905, // track
+ 0x1ce: 0x39705, // start
+ 0x1d0: 0x11408, // basefont
+ 0x1d6: 0x1cf06, // source
+ 0x1d7: 0x1a806, // legend
+ 0x1d8: 0x2f905, // thead
+ 0x1da: 0x2e905, // scope
+ 0x1dd: 0x21106, // object
+ 0x1de: 0xa205, // media
+ 0x1df: 0x18d0a, // annotation
+ 0x1e0: 0x22c0b, // formenctype
+ 0x1e2: 0x28b08, // noscript
+ 0x1e4: 0x53005, // sizes
+ 0x1e5: 0xd50c, // autocomplete
+ 0x1e6: 0x7a04, // span
+ 0x1e7: 0x8508, // noframes
+ 0x1e8: 0x26a06, // target
+ 0x1e9: 0x3a006, // ondrop
+ 0x1ea: 0x3d406, // srcdoc
+ 0x1ec: 0x5e08, // reversed
+ 0x1f0: 0x2c707, // isindex
+ 0x1f3: 0x29808, // hreflang
+ 0x1f5: 0x4e602, // h5
+ 0x1f6: 0x5d507, // address
+ 0x1fa: 0x30603, // max
+ 0x1fb: 0xc70b, // placeholder
+ 0x1fc: 0x31408, // textarea
+ 0x1fe: 0x4a609, // onmouseup
+ 0x1ff: 0x3910b, // ondragstart
+}
+
+const atomText = "abbradiogrouparamalignmarkbdialogaccept-charsetbodyaccesskey" +
+ "genavaluealtdescanvasidefaultfootereversedetailsampatternobr" +
+ "owspanoembedfnoframesetitleasyncitemidirnamediagroupingaudio" +
+ "ncancelabelooptgrouplaceholderubyautocompleteautofocusandbox" +
+ "mplaintextrackindisabledivarautoplaybasefontimeupdatebdoncan" +
+ "playthrough1bgsoundlowbrbigblinkblockquoteborderbuttonabortr" +
+ "anslatecodefercolgroupostercolorcolspannotation-xmlcommandra" +
+ "ggablegendcontrolshapecoordsmallcrossoriginsourcefieldsetfig" +
+ "captionafterprintfigurequiredforeignObjectforeignobjectforma" +
+ "ctionbeforeprintformenctypemustmatchallengeformmethodformnov" +
+ "alidatetimeterformtargeth6heightmlhgroupreloadhiddenoscripth" +
+ "igh2hreflanghttp-equivideonclickiframeimageimglyph3isindexis" +
+ "mappletitemrefacenteritemscopeditemtypematheaderspacermaxlen" +
+ "gth4minmtextareadonlymultiplemutedoncloseamlesspellcheckedon" +
+ "contextmenuoncuechangeondblclickondragendondragenterondragle" +
+ "aveondragoverondragstarticleondropzonemptiedondurationchange" +
+ "onendedonerroronfocusrcdoclassectionbluronhashchangeoninputo" +
+ "ninvalidonkeydownloadonkeypressrclangonkeyupublicontentedita" +
+ "bleonloadeddatalistingonloadedmetadatabindexonloadstartonmes" +
+ "sageonmousedownonmousemoveonmouseoutputonmouseoveronmouseupo" +
+ "nmousewheelonofflinertononlineonpagehidelonpageshowidth5onpa" +
+ "usemaponplayingonpopstateonprogresstrikeytypeonratechangeonr" +
+ "esetonresizestrongonscrollonseekedonseekingonselectedonshowr" +
+ "aponstalledonstorageonsubmitempropenonsuspendonunloadonvolum" +
+ "echangeonwaitingoptimumanifestepromptoptionbeforeunloaddress" +
+ "tylesummarysupsvgsystemarquee"
diff --git a/gcc-4.8.1/libgo/go/exp/html/atom/table_test.go b/gcc-4.8.1/libgo/go/exp/html/atom/table_test.go
new file mode 100644
index 000000000..db016a1c0
--- /dev/null
+++ b/gcc-4.8.1/libgo/go/exp/html/atom/table_test.go
@@ -0,0 +1,341 @@
+// generated by go run gen.go -test; DO NOT EDIT
+
+package atom
+
+var testAtomList = []string{
+ "a",
+ "abbr",
+ "accept",
+ "accept-charset",
+ "accesskey",
+ "action",
+ "address",
+ "align",
+ "alt",
+ "annotation",
+ "annotation-xml",
+ "applet",
+ "area",
+ "article",
+ "aside",
+ "async",
+ "audio",
+ "autocomplete",
+ "autofocus",
+ "autoplay",
+ "b",
+ "base",
+ "basefont",
+ "bdi",
+ "bdo",
+ "bgsound",
+ "big",
+ "blink",
+ "blockquote",
+ "body",
+ "border",
+ "br",
+ "button",
+ "canvas",
+ "caption",
+ "center",
+ "challenge",
+ "charset",
+ "checked",
+ "cite",
+ "cite",
+ "class",
+ "code",
+ "col",
+ "colgroup",
+ "color",
+ "cols",
+ "colspan",
+ "command",
+ "command",
+ "content",
+ "contenteditable",
+ "contextmenu",
+ "controls",
+ "coords",
+ "crossorigin",
+ "data",
+ "data",
+ "datalist",
+ "datetime",
+ "dd",
+ "default",
+ "defer",
+ "del",
+ "desc",
+ "details",
+ "dfn",
+ "dialog",
+ "dir",
+ "dirname",
+ "disabled",
+ "div",
+ "dl",
+ "download",
+ "draggable",
+ "dropzone",
+ "dt",
+ "em",
+ "embed",
+ "enctype",
+ "face",
+ "fieldset",
+ "figcaption",
+ "figure",
+ "font",
+ "footer",
+ "for",
+ "foreignObject",
+ "foreignobject",
+ "form",
+ "form",
+ "formaction",
+ "formenctype",
+ "formmethod",
+ "formnovalidate",
+ "formtarget",
+ "frame",
+ "frameset",
+ "h1",
+ "h2",
+ "h3",
+ "h4",
+ "h5",
+ "h6",
+ "head",
+ "header",
+ "headers",
+ "height",
+ "hgroup",
+ "hidden",
+ "high",
+ "hr",
+ "href",
+ "hreflang",
+ "html",
+ "http-equiv",
+ "i",
+ "icon",
+ "id",
+ "iframe",
+ "image",
+ "img",
+ "inert",
+ "input",
+ "ins",
+ "isindex",
+ "ismap",
+ "itemid",
+ "itemprop",
+ "itemref",
+ "itemscope",
+ "itemtype",
+ "kbd",
+ "keygen",
+ "keytype",
+ "kind",
+ "label",
+ "label",
+ "lang",
+ "legend",
+ "li",
+ "link",
+ "list",
+ "listing",
+ "loop",
+ "low",
+ "malignmark",
+ "manifest",
+ "map",
+ "mark",
+ "marquee",
+ "math",
+ "max",
+ "maxlength",
+ "media",
+ "mediagroup",
+ "menu",
+ "meta",
+ "meter",
+ "method",
+ "mglyph",
+ "mi",
+ "min",
+ "mn",
+ "mo",
+ "ms",
+ "mtext",
+ "multiple",
+ "muted",
+ "name",
+ "nav",
+ "nobr",
+ "noembed",
+ "noframes",
+ "noscript",
+ "novalidate",
+ "object",
+ "ol",
+ "onabort",
+ "onafterprint",
+ "onbeforeprint",
+ "onbeforeunload",
+ "onblur",
+ "oncancel",
+ "oncanplay",
+ "oncanplaythrough",
+ "onchange",
+ "onclick",
+ "onclose",
+ "oncontextmenu",
+ "oncuechange",
+ "ondblclick",
+ "ondrag",
+ "ondragend",
+ "ondragenter",
+ "ondragleave",
+ "ondragover",
+ "ondragstart",
+ "ondrop",
+ "ondurationchange",
+ "onemptied",
+ "onended",
+ "onerror",
+ "onfocus",
+ "onhashchange",
+ "oninput",
+ "oninvalid",
+ "onkeydown",
+ "onkeypress",
+ "onkeyup",
+ "onload",
+ "onloadeddata",
+ "onloadedmetadata",
+ "onloadstart",
+ "onmessage",
+ "onmousedown",
+ "onmousemove",
+ "onmouseout",
+ "onmouseover",
+ "onmouseup",
+ "onmousewheel",
+ "onoffline",
+ "ononline",
+ "onpagehide",
+ "onpageshow",
+ "onpause",
+ "onplay",
+ "onplaying",
+ "onpopstate",
+ "onprogress",
+ "onratechange",
+ "onreset",
+ "onresize",
+ "onscroll",
+ "onseeked",
+ "onseeking",
+ "onselect",
+ "onshow",
+ "onstalled",
+ "onstorage",
+ "onsubmit",
+ "onsuspend",
+ "ontimeupdate",
+ "onunload",
+ "onvolumechange",
+ "onwaiting",
+ "open",
+ "optgroup",
+ "optimum",
+ "option",
+ "output",
+ "p",
+ "param",
+ "pattern",
+ "ping",
+ "placeholder",
+ "plaintext",
+ "poster",
+ "pre",
+ "preload",
+ "progress",
+ "prompt",
+ "public",
+ "q",
+ "radiogroup",
+ "readonly",
+ "rel",
+ "required",
+ "reversed",
+ "rows",
+ "rowspan",
+ "rp",
+ "rt",
+ "ruby",
+ "s",
+ "samp",
+ "sandbox",
+ "scope",
+ "scoped",
+ "script",
+ "seamless",
+ "section",
+ "select",
+ "selected",
+ "shape",
+ "size",
+ "sizes",
+ "small",
+ "source",
+ "spacer",
+ "span",
+ "span",
+ "spellcheck",
+ "src",
+ "srcdoc",
+ "srclang",
+ "start",
+ "step",
+ "strike",
+ "strong",
+ "style",
+ "style",
+ "sub",
+ "summary",
+ "sup",
+ "svg",
+ "system",
+ "tabindex",
+ "table",
+ "target",
+ "tbody",
+ "td",
+ "textarea",
+ "tfoot",
+ "th",
+ "thead",
+ "time",
+ "title",
+ "title",
+ "tr",
+ "track",
+ "translate",
+ "tt",
+ "type",
+ "typemustmatch",
+ "u",
+ "ul",
+ "usemap",
+ "value",
+ "var",
+ "video",
+ "wbr",
+ "width",
+ "wrap",
+ "xmp",
+}