+REG_ANY REG_ANY, no 0 S ; Match any one character (except newline).
+SANY REG_ANY, no 0 S ; Match any one character.
+CANY REG_ANY, no 0 S ; Match any one byte.
+ANYOF ANYOF, sv 0 S ; Match character in (or not in) this class, single char match only
+
+# Order (within each group) of the below is important. See ordering comment
+# above. The PLACEHOLDERn ones are wasting a value. Right now, we have plenty
+# to spare, but these would be obvious candidates if ever we ran out of node
+# types in a U8.
+ALNUM ALNUM, no 0 S ; Match any alphanumeric character using native charset semantics for non-utf8
+ALNUML ALNUM, no 0 S ; Match any alphanumeric char in locale
+ALNUMU ALNUM, no 0 S ; Match any alphanumeric char using Unicode semantics
+ALNUMA ALNUM, no 0 S ; Match [A-Za-z_0-9]
+NALNUM NALNUM, no 0 S ; Match any non-alphanumeric character using native charset semantics for non-utf8
+NALNUML NALNUM, no 0 S ; Match any non-alphanumeric char in locale
+NALNUMU NALNUM, no 0 S ; Match any non-alphanumeric char using Unicode semantics
+NALNUMA NALNUM, no 0 S ; Match [^A-Za-z_0-9]
+SPACE SPACE, no 0 S ; Match any whitespace character using native charset semantics for non-utf8
+SPACEL SPACE, no 0 S ; Match any whitespace char in locale
+SPACEU SPACE, no 0 S ; Match any whitespace char using Unicode semantics
+SPACEA SPACE, no 0 S ; Match [ \t\n\f\r]
+NSPACE NSPACE, no 0 S ; Match any non-whitespace character using native charset semantics for non-utf8
+NSPACEL NSPACE, no 0 S ; Match any non-whitespace char in locale
+NSPACEU NSPACE, no 0 S ; Match any non-whitespace char using Unicode semantics
+NSPACEA NSPACE, no 0 S ; Match [^ \t\n\f\r]
+DIGIT DIGIT, no 0 S ; Match any numeric character using native charset semantics for non-utf8
+DIGITL DIGIT, no 0 S ; Match any numeric character in locale
+PLACEHOLDER1 NOTHING, no ; placeholder for missing DIGITU
+DIGITA DIGIT, no 0 S ; Match [0-9]
+NDIGIT NDIGIT, no 0 S ; Match any non-numeric character using native charset semantics for non-utf8
+NDIGITL NDIGIT, no 0 S ; Match any non-numeric character in locale
+PLACEHOLDER2 NOTHING, no ; placeholder for missing NDIGITU
+NDIGITA NDIGIT, no 0 S ; Match [^0-9]
+
+POSIXD POSIXD, none 0 S ; currently unused except as a placeholder
+POSIXL POSIXD, none 0 S ; currently unused except as a placeholder
+POSIXU POSIXD, none 0 S ; currently unused except as a placeholder
+POSIXA POSIXD, none 0 S ; Some [[:class:]] under /a; the FLAGS field gives which one
+NPOSIXD POSIXD, none 0 S ; currently unused except as a placeholder
+NPOSIXL POSIXD, none 0 S ; currently unused except as a placeholder
+NPOSIXU POSIXD, none 0 S ; currently unused except as a placeholder
+NPOSIXA POSIXD, none 0 S ; complement of POSIXA, [[:^class:]]
+# End of order is important (within groups)
+
+CLUMP CLUMP, no 0 V ; Match any extended grapheme cluster sequence
+
+#* Alternation
+
+# BRANCH The set of branches constituting a single choice are hooked
+# together with their "next" pointers, since precedence prevents
+# anything being concatenated to any individual branch. The
+# "next" pointer of the last BRANCH in a choice points to the
+# thing following the whole choice. This is also where the
+# final "next" pointer of each individual branch points; each
+# branch starts with the operand node of a BRANCH node.
+#
+BRANCH BRANCH, node 0 V ; Match this alternative, or the next...
+
+#*Back pointer
+
+# BACK Normal "next" pointers all implicitly point forward; BACK
+# exists to make loop structures possible.