1 /++
2 This module was automatically generated from the following grammar:
3 
4 WebIDL:
5   Definitions < (ExtendedAttributeList Definition)+ eoi
6 
7   Definition <
8     CallbackOrInterfaceOrMixin /
9     Namespace /
10     Partial /
11     Dictionary /
12     Enum /
13     Typedef /
14     IncludesStatement
15 
16   CallbackOrInterfaceOrMixin <
17     ("callback" CallbackRestOrInterface) /
18     ("interface" InterfaceOrMixin)
19 
20   CallbackRestOrInterface <
21     CallbackRest / ("interface" InterfaceRest)
22 
23   InterfaceOrMixin < MixinRest / InterfaceRest
24 
25   InterfaceRest < Identifier Inheritance '{' InterfaceMembers '}' ';'
26 
27   Partial < "partial" PartialDefinition
28 
29   PartialDefinition <
30     ("interface" PartialInterfaceOrPartialMixin) /
31     PartialDictionary /
32     Namespace
33 
34   PartialInterfaceOrPartialMixin < MixinRest / PartialInterfaceRest
35 
36   PartialInterfaceRest < Identifier '{' InterfaceMembers '}' ';'
37 
38   InterfaceMembers < InterfaceMember+ / eps
39 
40   InterfaceMember < ExtendedAttributeList (Const /
41     Operation /
42     Stringifier /
43     StaticMember /
44     Iterable /
45     ReadOnlyMember /
46     ReadWriteAttribute /
47     ReadWriteMaplike /
48     ReadWriteSetlike)
49 
50   Inheritance < (':' Identifier) / eps
51 
52   MixinRest < "mixin" Identifier '{' MixinMembers '}' ';'
53 
54   MixinMembers < (ExtendedAttributeList MixinMember)+ / eps
55 
56   MixinMember <
57     Const /
58     (ReadOnly AttributeRest) /
59     RegularOperation /
60     Stringifier
61 
62   IncludesStatement < Identifier "includes" Identifier ';'
63 
64   Const < "const" ConstType Identifier '=' ConstValue ';'
65 
66   ConstValue <
67     BooleanLiteral /
68     FloatLiteral /
69     Integer /
70     "null"
71 
72   BooleanLiteral < "true" / "false"
73 
74   FloatLiteral < Float / "-Infinity" / "Infinity" / "NaN"
75 
76   ConstType < (PrimitiveType Null) / (Identifier Null)
77 
78   ReadOnlyMember < "readonly" ReadOnlyMemberRest
79 
80   ReadOnlyMemberRest < AttributeRest / ReadWriteMaplike / ReadWriteSetlike
81 
82   ReadWriteAttribute < ("inherit" ReadOnly AttributeRest) / AttributeRest
83 
84   AttributeRest < "attribute" TypeWithExtendedAttributes AttributeName ';'
85 
86   AttributeName < AttributeNameKeyword / Identifier
87 
88   AttributeNameKeyword <- "required" !Identifier
89 
90   ReadOnly < "readonly" / eps
91 
92   DefaultValue < ConstValue / String / ('[' ']')
93 
94   Operation < SpecialOperation / RegularOperation
95 
96   RegularOperation < ReturnType OperationRest
97 
98   SpecialOperation < Special RegularOperation
99 
100   Special < "getter" / "setter" / "deleter"
101 
102   OperationRest < OptionalIdentifier '(' ArgumentList ')' ';'
103 
104   OptionalIdentifier < Identifier / eps
105 
106   ArgumentList < (Argument (',' Argument)*) / eps
107 
108   Argument < ExtendedAttributeList ArgumentRest
109 
110   ArgumentRest < ("optional" TypeWithExtendedAttributes ArgumentName Default) / (Type Ellipsis ArgumentName)
111 
112   ArgumentName < ArgumentNameKeyword | Identifier
113 
114   Ellipsis < "..." / eps
115 
116   ReturnType < Type / "void"
117 
118   Stringifier < "stringifier" StringifierRest
119 
120   StringifierRest < (ReadOnly AttributeRest) / (RegularOperation) / ';'
121 
122   StaticMember < "static" StaticMemberRest
123 
124   StaticMemberRest < (ReadOnly AttributeRest) / RegularOperation
125 
126   Iterable < "iterable" '<' TypeWithExtendedAttributes OptionalType '>' ';'
127 
128   OptionalType < (',' TypeWithExtendedAttributes) / eps
129 
130   ReadWriteMaplike < MaplikeRest
131 
132   MaplikeRest < "maplike" '<' TypeWithExtendedAttributes ',' TypeWithExtendedAttributes '>' ';'
133 
134   ReadWriteSetlike < SetlikeRest
135 
136   SetlikeRest < "setlike" '<' TypeWithExtendedAttributes '>' ';'
137 
138   Namespace < "namespace" Identifier '{' NamespaceMembers '}' ';'
139 
140   NamespaceMembers < (ExtendedAttributeList NamespaceMember)+ / eps
141 
142   NamespaceMember < RegularOperation / ("readonly" AttributeRest)
143 
144   Dictionary < "dictionary" Identifier Inheritance '{' DictionaryMembers '}' ';'
145 
146   DictionaryMembers < DictionaryMember+ / eps
147 
148   DictionaryMember < ExtendedAttributeList DictionaryMemberRest
149 
150   DictionaryMemberRest < ("required" TypeWithExtendedAttributes Identifier Default ';') / (Type Identifier Default ';')
151 
152   PartialDictionary < "dictionary" Identifier '{' DictionaryMembers '}' ';'
153 
154   Default < ('=' DefaultValue) / eps
155 
156   Enum < "enum" Identifier '{' EnumValueList '}' ';'
157 
158   EnumValueList < String (',' String)*
159 
160   CallbackRest < Identifier '=' ReturnType '(' ArgumentList ')' ';'
161 
162   Typedef < "typedef" TypeWithExtendedAttributes Identifier ';'
163 
164   Type < SingleType / (UnionType Null)
165 
166   TypeWithExtendedAttributes < ExtendedAttributeList Type
167 
168   SingleType <- ("any" !Identifier) / NonAnyType
169 
170   UnionType < '(' UnionMemberType ("or" UnionMemberType)+ ')'
171 
172   UnionMemberType < (ExtendedAttributeList NonAnyType) / (UnionType Null)
173 
174   SequenceType < "sequence" '<' TypeWithExtendedAttributes '>' Null
175 
176   NonAnyType <-
177     (SequenceType) /
178     ("object" (!Identifier Spacing Null)) /
179     ("symbol" (!Identifier Spacing Null)) /
180     ("Error" (!Identifier Spacing Null)) /
181     ("FrozenArray" '<' TypeWithExtendedAttributes '>' Null) /
182     (RecordType Null) /
183     PromiseType /
184     (PrimitiveType Null) /
185     (StringType Null) /
186     (Identifier Null) /
187     (BufferRelatedType Null)
188 
189   PrimitiveType <
190     UnsignedIntegerType /
191     UnrestrictedFloatType /
192     "boolean" /
193     "byte" /
194     "octet"
195 
196   UnrestrictedFloatType < "unrestricted"? FloatType
197 
198   FloatType < "float" / "double"
199 
200   UnsignedIntegerType < "unsigned"? IntegerType
201 
202   IntegerType < "short" / ("long" "long") / "long"
203 
204   StringType <- ("ByteString" / "DOMString" / "USVString" / "CSSOMString") !(Identifier)
205 
206   PromiseType < "Promise" '<' ReturnType '>'
207 
208   RecordType < "record" '<' StringType ',' TypeWithExtendedAttributes '>'
209 
210   Null < "?" / eps
211 
212   BufferRelatedType <
213     "ArrayBuffer" /
214     "DataView" /
215     "Int8Array" /
216     "Int16Array" /
217     "Int32Array" /
218     "Uint8Array" /
219     "Uint16Array" /
220     "Uint32Array" /
221     "Uint8ClampedArray" /
222     "Float32Array" /
223     "Float64Array"
224 
225   ExtendedAttributeList < ('[' ExtendedAttribute (',' ExtendedAttribute)* ']') / eps
226 
227   ExtendedAttributeOuter <
228     ('(' ExtendedAttributeInner ')') /
229     ('[' ExtendedAttributeInner ']') /
230     ('{' ExtendedAttributeInner '}') /
231     ExtendedAttribute
232 
233   ExtendedAttributeInner <
234     (('(' ExtendedAttributeInner ')') /
235     ('[' ExtendedAttributeInner ']') /
236     ('{' ExtendedAttributeInner '}') /
237     OtherOrComma)+
238 
239   ExtendedAttribute < ExtendedAttributeArgList / ExtendedAttributeNamedArgList / ExtendedAttributeIdent / ExtendedAttributeIdentList / ExtendedAttributeNoArgs
240 
241   Other <
242     "ByteString" /
243     "DOMString" /
244     "FrozenArray" /
245     "Infinity" /
246     "NaN" /
247     "USVString" /
248     "any" /
249     "boolean" /
250     "byte" /
251     "double" /
252     "false" /
253     "float" /
254     "long" /
255     "null" /
256     "object" /
257     "octet" /
258     "or" /
259     "optional" /
260     "sequence" /
261     "short" /
262     "true" /
263     "unsigned" /
264     "void" /
265     Integer /
266     Float /
267     Identifier /
268     String /
269     Other2 /
270     '-' /
271     "-Infinity" /
272     '.' /
273     "..." /
274     ':' /
275     ';' /
276     '<' /
277     '=' /
278     '>' /
279     '?' /
280     ArgumentNameKeyword /
281     BufferRelatedType
282 
283   OtherOrComma < Other / ','
284 
285   IdentifierList < Identifier (',' Identifier)*
286 
287   Integer <~ '-'? ([1-9] [0-9]*) / ('0' [Xx] [0-9A-Fa-f]+) / ('0' [0-7]*)
288 
289   Float <~ '-'? ((([0-9]+ '.' [0-9]*) / ([0-9]* '.' [0-9]+))(('E' / 'e') ('+' / '-')? [0-9]+)?) / ([0-9]+ ('E' / 'e') ('+' / '-')? [0-9]+)
290 
291   Identifier <~ '_'? [A-Za-z] [0-9A-Z_a-z-]*
292 
293   String <~ doublequote (!doublequote .)* doublequote
294 
295   Whitespace <- :(' ' / '\t' / EndOfLine)+
296 
297   EndOfLine <: ('\r' '\n') / '\n'
298 
299   Comment <~ (Whitespace? (("//" (!EndOfLine .)*) / ("/*" ((!"*/" .) / EndOfLine)* "*/")) Whitespace?)+
300 
301   Spacing <- :(Whitespace / Comment)*
302 
303   Other2 <~ [^\t\n\r 0-9A-Za-z]
304 
305   ArgumentNameKeyword <-
306     ("attribute" /
307     "callback" /
308     "const" /
309     "deleter" /
310     "dictionary" /
311     "enum" /
312     "getter" /
313     "includes" /
314     "inherit" /
315     "interface" /
316     "iterable" /
317     "maplike" /
318     "namespace" /
319     "partial" /
320     "required" /
321     "setlike" /
322     "setter" /
323     "static" /
324     "stringifier" /
325     "typedef" /
326     "unrestricted") !Identifier
327 
328   ExtendedAttributeNoArgs < Identifier
329 
330   ExtendedAttributeArgList < Identifier '(' ArgumentList ')'
331 
332   ExtendedAttributeIdent < Identifier '=' Identifier
333 
334   ExtendedAttributeIdentList < Identifier '=' '(' IdentifierList ')'
335 
336   ExtendedAttributeNamedArgList < Identifier '=' Identifier '(' ArgumentList ')'
337 
338 
339 +/
340 module webidl.grammar;
341 
342 public import pegged.peg;
343 import std.algorithm: startsWith;
344 import std.functional: toDelegate;
345 
346 struct GenericWebIDL(TParseTree)
347 {
348     import std.functional : toDelegate;
349     import pegged.dynamic.grammar;
350     static import pegged.peg;
351     struct WebIDL
352     {
353     enum name = "WebIDL";
354     static ParseTree delegate(ParseTree)[string] before;
355     static ParseTree delegate(ParseTree)[string] after;
356     static ParseTree delegate(ParseTree)[string] rules;
357     import std.typecons:Tuple, tuple;
358     static TParseTree[Tuple!(string, size_t)] memo;
359     static this()
360     {
361         rules["Definitions"] = toDelegate(&Definitions);
362         rules["Definition"] = toDelegate(&Definition);
363         rules["CallbackOrInterfaceOrMixin"] = toDelegate(&CallbackOrInterfaceOrMixin);
364         rules["CallbackRestOrInterface"] = toDelegate(&CallbackRestOrInterface);
365         rules["InterfaceOrMixin"] = toDelegate(&InterfaceOrMixin);
366         rules["InterfaceRest"] = toDelegate(&InterfaceRest);
367         rules["Partial"] = toDelegate(&Partial);
368         rules["PartialDefinition"] = toDelegate(&PartialDefinition);
369         rules["PartialInterfaceOrPartialMixin"] = toDelegate(&PartialInterfaceOrPartialMixin);
370         rules["PartialInterfaceRest"] = toDelegate(&PartialInterfaceRest);
371         rules["InterfaceMembers"] = toDelegate(&InterfaceMembers);
372         rules["InterfaceMember"] = toDelegate(&InterfaceMember);
373         rules["Inheritance"] = toDelegate(&Inheritance);
374         rules["MixinRest"] = toDelegate(&MixinRest);
375         rules["MixinMembers"] = toDelegate(&MixinMembers);
376         rules["MixinMember"] = toDelegate(&MixinMember);
377         rules["IncludesStatement"] = toDelegate(&IncludesStatement);
378         rules["Const"] = toDelegate(&Const);
379         rules["ConstValue"] = toDelegate(&ConstValue);
380         rules["BooleanLiteral"] = toDelegate(&BooleanLiteral);
381         rules["FloatLiteral"] = toDelegate(&FloatLiteral);
382         rules["ConstType"] = toDelegate(&ConstType);
383         rules["ReadOnlyMember"] = toDelegate(&ReadOnlyMember);
384         rules["ReadOnlyMemberRest"] = toDelegate(&ReadOnlyMemberRest);
385         rules["ReadWriteAttribute"] = toDelegate(&ReadWriteAttribute);
386         rules["AttributeRest"] = toDelegate(&AttributeRest);
387         rules["AttributeName"] = toDelegate(&AttributeName);
388         rules["AttributeNameKeyword"] = toDelegate(&AttributeNameKeyword);
389         rules["ReadOnly"] = toDelegate(&ReadOnly);
390         rules["DefaultValue"] = toDelegate(&DefaultValue);
391         rules["Operation"] = toDelegate(&Operation);
392         rules["RegularOperation"] = toDelegate(&RegularOperation);
393         rules["SpecialOperation"] = toDelegate(&SpecialOperation);
394         rules["Special"] = toDelegate(&Special);
395         rules["OperationRest"] = toDelegate(&OperationRest);
396         rules["OptionalIdentifier"] = toDelegate(&OptionalIdentifier);
397         rules["ArgumentList"] = toDelegate(&ArgumentList);
398         rules["Argument"] = toDelegate(&Argument);
399         rules["ArgumentRest"] = toDelegate(&ArgumentRest);
400         rules["ArgumentName"] = toDelegate(&ArgumentName);
401         rules["Ellipsis"] = toDelegate(&Ellipsis);
402         rules["ReturnType"] = toDelegate(&ReturnType);
403         rules["Stringifier"] = toDelegate(&Stringifier);
404         rules["StringifierRest"] = toDelegate(&StringifierRest);
405         rules["StaticMember"] = toDelegate(&StaticMember);
406         rules["StaticMemberRest"] = toDelegate(&StaticMemberRest);
407         rules["Iterable"] = toDelegate(&Iterable);
408         rules["OptionalType"] = toDelegate(&OptionalType);
409         rules["ReadWriteMaplike"] = toDelegate(&ReadWriteMaplike);
410         rules["MaplikeRest"] = toDelegate(&MaplikeRest);
411         rules["ReadWriteSetlike"] = toDelegate(&ReadWriteSetlike);
412         rules["SetlikeRest"] = toDelegate(&SetlikeRest);
413         rules["Namespace"] = toDelegate(&Namespace);
414         rules["NamespaceMembers"] = toDelegate(&NamespaceMembers);
415         rules["NamespaceMember"] = toDelegate(&NamespaceMember);
416         rules["Dictionary"] = toDelegate(&Dictionary);
417         rules["DictionaryMembers"] = toDelegate(&DictionaryMembers);
418         rules["DictionaryMember"] = toDelegate(&DictionaryMember);
419         rules["DictionaryMemberRest"] = toDelegate(&DictionaryMemberRest);
420         rules["PartialDictionary"] = toDelegate(&PartialDictionary);
421         rules["Default"] = toDelegate(&Default);
422         rules["Enum"] = toDelegate(&Enum);
423         rules["EnumValueList"] = toDelegate(&EnumValueList);
424         rules["CallbackRest"] = toDelegate(&CallbackRest);
425         rules["Typedef"] = toDelegate(&Typedef);
426         rules["Type"] = toDelegate(&Type);
427         rules["TypeWithExtendedAttributes"] = toDelegate(&TypeWithExtendedAttributes);
428         rules["SingleType"] = toDelegate(&SingleType);
429         rules["UnionType"] = toDelegate(&UnionType);
430         rules["UnionMemberType"] = toDelegate(&UnionMemberType);
431         rules["SequenceType"] = toDelegate(&SequenceType);
432         rules["NonAnyType"] = toDelegate(&NonAnyType);
433         rules["PrimitiveType"] = toDelegate(&PrimitiveType);
434         rules["UnrestrictedFloatType"] = toDelegate(&UnrestrictedFloatType);
435         rules["FloatType"] = toDelegate(&FloatType);
436         rules["UnsignedIntegerType"] = toDelegate(&UnsignedIntegerType);
437         rules["IntegerType"] = toDelegate(&IntegerType);
438         rules["StringType"] = toDelegate(&StringType);
439         rules["PromiseType"] = toDelegate(&PromiseType);
440         rules["RecordType"] = toDelegate(&RecordType);
441         rules["Null"] = toDelegate(&Null);
442         rules["BufferRelatedType"] = toDelegate(&BufferRelatedType);
443         rules["ExtendedAttributeList"] = toDelegate(&ExtendedAttributeList);
444         rules["ExtendedAttributeOuter"] = toDelegate(&ExtendedAttributeOuter);
445         rules["ExtendedAttributeInner"] = toDelegate(&ExtendedAttributeInner);
446         rules["ExtendedAttribute"] = toDelegate(&ExtendedAttribute);
447         rules["Other"] = toDelegate(&Other);
448         rules["OtherOrComma"] = toDelegate(&OtherOrComma);
449         rules["IdentifierList"] = toDelegate(&IdentifierList);
450         rules["Integer"] = toDelegate(&Integer);
451         rules["Float"] = toDelegate(&Float);
452         rules["Identifier"] = toDelegate(&Identifier);
453         rules["String"] = toDelegate(&String);
454         rules["Whitespace"] = toDelegate(&Whitespace);
455         rules["EndOfLine"] = toDelegate(&EndOfLine);
456         rules["Comment"] = toDelegate(&Comment);
457         rules["Spacing"] = toDelegate(&Spacing);
458     }
459 
460     template hooked(alias r, string name)
461     {
462         static ParseTree hooked(ParseTree p)
463         {
464             ParseTree result;
465 
466             if (name in before)
467             {
468                 result = before[name](p);
469                 if (result.successful)
470                     return result;
471             }
472 
473             result = r(p);
474             if (result.successful || name !in after)
475                 return result;
476 
477             result = after[name](p);
478             return result;
479         }
480 
481         static ParseTree hooked(string input)
482         {
483             return hooked!(r, name)(ParseTree("",false,[],input));
484         }
485     }
486 
487     static void addRuleBefore(string parentRule, string ruleSyntax)
488     {
489         // enum name is the current grammar name
490         DynamicGrammar dg = pegged.dynamic.grammar.grammar(name ~ ": " ~ ruleSyntax, rules);
491         foreach(ruleName,rule; dg.rules)
492             if (ruleName != "Spacing") // Keep the local Spacing rule, do not overwrite it
493                 rules[ruleName] = rule;
494         before[parentRule] = rules[dg.startingRule];
495     }
496 
497     static void addRuleAfter(string parentRule, string ruleSyntax)
498     {
499         // enum name is the current grammar named
500         DynamicGrammar dg = pegged.dynamic.grammar.grammar(name ~ ": " ~ ruleSyntax, rules);
501         foreach(name,rule; dg.rules)
502         {
503             if (name != "Spacing")
504                 rules[name] = rule;
505         }
506         after[parentRule] = rules[dg.startingRule];
507     }
508 
509     static bool isRule(string s)
510     {
511 		import std.algorithm : startsWith;
512         return s.startsWith("WebIDL.");
513     }
514     mixin decimateTree;
515 
516     static TParseTree Definitions(TParseTree p)
517     {
518         if(__ctfe)
519         {
520             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, Definition, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eoi, Spacing)), "WebIDL.Definitions")(p);
521         }
522         else
523         {
524             if (auto m = tuple(`Definitions`, p.end) in memo)
525                 return *m;
526             else
527             {
528                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, Definition, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eoi, Spacing)), "WebIDL.Definitions"), "Definitions")(p);
529                 memo[tuple(`Definitions`, p.end)] = result;
530                 return result;
531             }
532         }
533     }
534 
535     static TParseTree Definitions(string s)
536     {
537         if(__ctfe)
538         {
539             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, Definition, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eoi, Spacing)), "WebIDL.Definitions")(TParseTree("", false,[], s));
540         }
541         else
542         {
543             forgetMemo();
544             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, Definition, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eoi, Spacing)), "WebIDL.Definitions"), "Definitions")(TParseTree("", false,[], s));
545         }
546     }
547     static string Definitions(GetName g)
548     {
549         return "WebIDL.Definitions";
550     }
551 
552     static TParseTree Definition(TParseTree p)
553     {
554         if(__ctfe)
555         {
556             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, CallbackOrInterfaceOrMixin, Spacing), pegged.peg.wrapAround!(Spacing, Namespace, Spacing), pegged.peg.wrapAround!(Spacing, Partial, Spacing), pegged.peg.wrapAround!(Spacing, Dictionary, Spacing), pegged.peg.wrapAround!(Spacing, Enum, Spacing), pegged.peg.wrapAround!(Spacing, Typedef, Spacing), pegged.peg.wrapAround!(Spacing, IncludesStatement, Spacing)), "WebIDL.Definition")(p);
557         }
558         else
559         {
560             if (auto m = tuple(`Definition`, p.end) in memo)
561                 return *m;
562             else
563             {
564                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, CallbackOrInterfaceOrMixin, Spacing), pegged.peg.wrapAround!(Spacing, Namespace, Spacing), pegged.peg.wrapAround!(Spacing, Partial, Spacing), pegged.peg.wrapAround!(Spacing, Dictionary, Spacing), pegged.peg.wrapAround!(Spacing, Enum, Spacing), pegged.peg.wrapAround!(Spacing, Typedef, Spacing), pegged.peg.wrapAround!(Spacing, IncludesStatement, Spacing)), "WebIDL.Definition"), "Definition")(p);
565                 memo[tuple(`Definition`, p.end)] = result;
566                 return result;
567             }
568         }
569     }
570 
571     static TParseTree Definition(string s)
572     {
573         if(__ctfe)
574         {
575             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, CallbackOrInterfaceOrMixin, Spacing), pegged.peg.wrapAround!(Spacing, Namespace, Spacing), pegged.peg.wrapAround!(Spacing, Partial, Spacing), pegged.peg.wrapAround!(Spacing, Dictionary, Spacing), pegged.peg.wrapAround!(Spacing, Enum, Spacing), pegged.peg.wrapAround!(Spacing, Typedef, Spacing), pegged.peg.wrapAround!(Spacing, IncludesStatement, Spacing)), "WebIDL.Definition")(TParseTree("", false,[], s));
576         }
577         else
578         {
579             forgetMemo();
580             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, CallbackOrInterfaceOrMixin, Spacing), pegged.peg.wrapAround!(Spacing, Namespace, Spacing), pegged.peg.wrapAround!(Spacing, Partial, Spacing), pegged.peg.wrapAround!(Spacing, Dictionary, Spacing), pegged.peg.wrapAround!(Spacing, Enum, Spacing), pegged.peg.wrapAround!(Spacing, Typedef, Spacing), pegged.peg.wrapAround!(Spacing, IncludesStatement, Spacing)), "WebIDL.Definition"), "Definition")(TParseTree("", false,[], s));
581         }
582     }
583     static string Definition(GetName g)
584     {
585         return "WebIDL.Definition";
586     }
587 
588     static TParseTree CallbackOrInterfaceOrMixin(TParseTree p)
589     {
590         if(__ctfe)
591         {
592             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("callback"), Spacing), pegged.peg.wrapAround!(Spacing, CallbackRestOrInterface, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceOrMixin, Spacing)), Spacing)), "WebIDL.CallbackOrInterfaceOrMixin")(p);
593         }
594         else
595         {
596             if (auto m = tuple(`CallbackOrInterfaceOrMixin`, p.end) in memo)
597                 return *m;
598             else
599             {
600                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("callback"), Spacing), pegged.peg.wrapAround!(Spacing, CallbackRestOrInterface, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceOrMixin, Spacing)), Spacing)), "WebIDL.CallbackOrInterfaceOrMixin"), "CallbackOrInterfaceOrMixin")(p);
601                 memo[tuple(`CallbackOrInterfaceOrMixin`, p.end)] = result;
602                 return result;
603             }
604         }
605     }
606 
607     static TParseTree CallbackOrInterfaceOrMixin(string s)
608     {
609         if(__ctfe)
610         {
611             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("callback"), Spacing), pegged.peg.wrapAround!(Spacing, CallbackRestOrInterface, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceOrMixin, Spacing)), Spacing)), "WebIDL.CallbackOrInterfaceOrMixin")(TParseTree("", false,[], s));
612         }
613         else
614         {
615             forgetMemo();
616             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("callback"), Spacing), pegged.peg.wrapAround!(Spacing, CallbackRestOrInterface, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceOrMixin, Spacing)), Spacing)), "WebIDL.CallbackOrInterfaceOrMixin"), "CallbackOrInterfaceOrMixin")(TParseTree("", false,[], s));
617         }
618     }
619     static string CallbackOrInterfaceOrMixin(GetName g)
620     {
621         return "WebIDL.CallbackOrInterfaceOrMixin";
622     }
623 
624     static TParseTree CallbackRestOrInterface(TParseTree p)
625     {
626         if(__ctfe)
627         {
628             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, CallbackRest, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceRest, Spacing)), Spacing)), "WebIDL.CallbackRestOrInterface")(p);
629         }
630         else
631         {
632             if (auto m = tuple(`CallbackRestOrInterface`, p.end) in memo)
633                 return *m;
634             else
635             {
636                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, CallbackRest, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceRest, Spacing)), Spacing)), "WebIDL.CallbackRestOrInterface"), "CallbackRestOrInterface")(p);
637                 memo[tuple(`CallbackRestOrInterface`, p.end)] = result;
638                 return result;
639             }
640         }
641     }
642 
643     static TParseTree CallbackRestOrInterface(string s)
644     {
645         if(__ctfe)
646         {
647             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, CallbackRest, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceRest, Spacing)), Spacing)), "WebIDL.CallbackRestOrInterface")(TParseTree("", false,[], s));
648         }
649         else
650         {
651             forgetMemo();
652             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, CallbackRest, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceRest, Spacing)), Spacing)), "WebIDL.CallbackRestOrInterface"), "CallbackRestOrInterface")(TParseTree("", false,[], s));
653         }
654     }
655     static string CallbackRestOrInterface(GetName g)
656     {
657         return "WebIDL.CallbackRestOrInterface";
658     }
659 
660     static TParseTree InterfaceOrMixin(TParseTree p)
661     {
662         if(__ctfe)
663         {
664             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, MixinRest, Spacing), pegged.peg.wrapAround!(Spacing, InterfaceRest, Spacing)), "WebIDL.InterfaceOrMixin")(p);
665         }
666         else
667         {
668             if (auto m = tuple(`InterfaceOrMixin`, p.end) in memo)
669                 return *m;
670             else
671             {
672                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, MixinRest, Spacing), pegged.peg.wrapAround!(Spacing, InterfaceRest, Spacing)), "WebIDL.InterfaceOrMixin"), "InterfaceOrMixin")(p);
673                 memo[tuple(`InterfaceOrMixin`, p.end)] = result;
674                 return result;
675             }
676         }
677     }
678 
679     static TParseTree InterfaceOrMixin(string s)
680     {
681         if(__ctfe)
682         {
683             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, MixinRest, Spacing), pegged.peg.wrapAround!(Spacing, InterfaceRest, Spacing)), "WebIDL.InterfaceOrMixin")(TParseTree("", false,[], s));
684         }
685         else
686         {
687             forgetMemo();
688             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, MixinRest, Spacing), pegged.peg.wrapAround!(Spacing, InterfaceRest, Spacing)), "WebIDL.InterfaceOrMixin"), "InterfaceOrMixin")(TParseTree("", false,[], s));
689         }
690     }
691     static string InterfaceOrMixin(GetName g)
692     {
693         return "WebIDL.InterfaceOrMixin";
694     }
695 
696     static TParseTree InterfaceRest(TParseTree p)
697     {
698         if(__ctfe)
699         {
700             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Inheritance, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.InterfaceRest")(p);
701         }
702         else
703         {
704             if (auto m = tuple(`InterfaceRest`, p.end) in memo)
705                 return *m;
706             else
707             {
708                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Inheritance, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.InterfaceRest"), "InterfaceRest")(p);
709                 memo[tuple(`InterfaceRest`, p.end)] = result;
710                 return result;
711             }
712         }
713     }
714 
715     static TParseTree InterfaceRest(string s)
716     {
717         if(__ctfe)
718         {
719             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Inheritance, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.InterfaceRest")(TParseTree("", false,[], s));
720         }
721         else
722         {
723             forgetMemo();
724             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Inheritance, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.InterfaceRest"), "InterfaceRest")(TParseTree("", false,[], s));
725         }
726     }
727     static string InterfaceRest(GetName g)
728     {
729         return "WebIDL.InterfaceRest";
730     }
731 
732     static TParseTree Partial(TParseTree p)
733     {
734         if(__ctfe)
735         {
736             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("partial"), Spacing), pegged.peg.wrapAround!(Spacing, PartialDefinition, Spacing)), "WebIDL.Partial")(p);
737         }
738         else
739         {
740             if (auto m = tuple(`Partial`, p.end) in memo)
741                 return *m;
742             else
743             {
744                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("partial"), Spacing), pegged.peg.wrapAround!(Spacing, PartialDefinition, Spacing)), "WebIDL.Partial"), "Partial")(p);
745                 memo[tuple(`Partial`, p.end)] = result;
746                 return result;
747             }
748         }
749     }
750 
751     static TParseTree Partial(string s)
752     {
753         if(__ctfe)
754         {
755             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("partial"), Spacing), pegged.peg.wrapAround!(Spacing, PartialDefinition, Spacing)), "WebIDL.Partial")(TParseTree("", false,[], s));
756         }
757         else
758         {
759             forgetMemo();
760             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("partial"), Spacing), pegged.peg.wrapAround!(Spacing, PartialDefinition, Spacing)), "WebIDL.Partial"), "Partial")(TParseTree("", false,[], s));
761         }
762     }
763     static string Partial(GetName g)
764     {
765         return "WebIDL.Partial";
766     }
767 
768     static TParseTree PartialDefinition(TParseTree p)
769     {
770         if(__ctfe)
771         {
772             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, PartialInterfaceOrPartialMixin, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, PartialDictionary, Spacing), pegged.peg.wrapAround!(Spacing, Namespace, Spacing)), "WebIDL.PartialDefinition")(p);
773         }
774         else
775         {
776             if (auto m = tuple(`PartialDefinition`, p.end) in memo)
777                 return *m;
778             else
779             {
780                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, PartialInterfaceOrPartialMixin, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, PartialDictionary, Spacing), pegged.peg.wrapAround!(Spacing, Namespace, Spacing)), "WebIDL.PartialDefinition"), "PartialDefinition")(p);
781                 memo[tuple(`PartialDefinition`, p.end)] = result;
782                 return result;
783             }
784         }
785     }
786 
787     static TParseTree PartialDefinition(string s)
788     {
789         if(__ctfe)
790         {
791             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, PartialInterfaceOrPartialMixin, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, PartialDictionary, Spacing), pegged.peg.wrapAround!(Spacing, Namespace, Spacing)), "WebIDL.PartialDefinition")(TParseTree("", false,[], s));
792         }
793         else
794         {
795             forgetMemo();
796             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("interface"), Spacing), pegged.peg.wrapAround!(Spacing, PartialInterfaceOrPartialMixin, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, PartialDictionary, Spacing), pegged.peg.wrapAround!(Spacing, Namespace, Spacing)), "WebIDL.PartialDefinition"), "PartialDefinition")(TParseTree("", false,[], s));
797         }
798     }
799     static string PartialDefinition(GetName g)
800     {
801         return "WebIDL.PartialDefinition";
802     }
803 
804     static TParseTree PartialInterfaceOrPartialMixin(TParseTree p)
805     {
806         if(__ctfe)
807         {
808             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, MixinRest, Spacing), pegged.peg.wrapAround!(Spacing, PartialInterfaceRest, Spacing)), "WebIDL.PartialInterfaceOrPartialMixin")(p);
809         }
810         else
811         {
812             if (auto m = tuple(`PartialInterfaceOrPartialMixin`, p.end) in memo)
813                 return *m;
814             else
815             {
816                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, MixinRest, Spacing), pegged.peg.wrapAround!(Spacing, PartialInterfaceRest, Spacing)), "WebIDL.PartialInterfaceOrPartialMixin"), "PartialInterfaceOrPartialMixin")(p);
817                 memo[tuple(`PartialInterfaceOrPartialMixin`, p.end)] = result;
818                 return result;
819             }
820         }
821     }
822 
823     static TParseTree PartialInterfaceOrPartialMixin(string s)
824     {
825         if(__ctfe)
826         {
827             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, MixinRest, Spacing), pegged.peg.wrapAround!(Spacing, PartialInterfaceRest, Spacing)), "WebIDL.PartialInterfaceOrPartialMixin")(TParseTree("", false,[], s));
828         }
829         else
830         {
831             forgetMemo();
832             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, MixinRest, Spacing), pegged.peg.wrapAround!(Spacing, PartialInterfaceRest, Spacing)), "WebIDL.PartialInterfaceOrPartialMixin"), "PartialInterfaceOrPartialMixin")(TParseTree("", false,[], s));
833         }
834     }
835     static string PartialInterfaceOrPartialMixin(GetName g)
836     {
837         return "WebIDL.PartialInterfaceOrPartialMixin";
838     }
839 
840     static TParseTree PartialInterfaceRest(TParseTree p)
841     {
842         if(__ctfe)
843         {
844             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.PartialInterfaceRest")(p);
845         }
846         else
847         {
848             if (auto m = tuple(`PartialInterfaceRest`, p.end) in memo)
849                 return *m;
850             else
851             {
852                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.PartialInterfaceRest"), "PartialInterfaceRest")(p);
853                 memo[tuple(`PartialInterfaceRest`, p.end)] = result;
854                 return result;
855             }
856         }
857     }
858 
859     static TParseTree PartialInterfaceRest(string s)
860     {
861         if(__ctfe)
862         {
863             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.PartialInterfaceRest")(TParseTree("", false,[], s));
864         }
865         else
866         {
867             forgetMemo();
868             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, InterfaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.PartialInterfaceRest"), "PartialInterfaceRest")(TParseTree("", false,[], s));
869         }
870     }
871     static string PartialInterfaceRest(GetName g)
872     {
873         return "WebIDL.PartialInterfaceRest";
874     }
875 
876     static TParseTree InterfaceMembers(TParseTree p)
877     {
878         if(__ctfe)
879         {
880             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, InterfaceMember, Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.InterfaceMembers")(p);
881         }
882         else
883         {
884             if (auto m = tuple(`InterfaceMembers`, p.end) in memo)
885                 return *m;
886             else
887             {
888                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, InterfaceMember, Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.InterfaceMembers"), "InterfaceMembers")(p);
889                 memo[tuple(`InterfaceMembers`, p.end)] = result;
890                 return result;
891             }
892         }
893     }
894 
895     static TParseTree InterfaceMembers(string s)
896     {
897         if(__ctfe)
898         {
899             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, InterfaceMember, Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.InterfaceMembers")(TParseTree("", false,[], s));
900         }
901         else
902         {
903             forgetMemo();
904             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, InterfaceMember, Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.InterfaceMembers"), "InterfaceMembers")(TParseTree("", false,[], s));
905         }
906     }
907     static string InterfaceMembers(GetName g)
908     {
909         return "WebIDL.InterfaceMembers";
910     }
911 
912     static TParseTree InterfaceMember(TParseTree p)
913     {
914         if(__ctfe)
915         {
916             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Const, Spacing), pegged.peg.wrapAround!(Spacing, Operation, Spacing), pegged.peg.wrapAround!(Spacing, Stringifier, Spacing), pegged.peg.wrapAround!(Spacing, StaticMember, Spacing), pegged.peg.wrapAround!(Spacing, Iterable, Spacing), pegged.peg.wrapAround!(Spacing, ReadOnlyMember, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteAttribute, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteMaplike, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteSetlike, Spacing)), Spacing)), "WebIDL.InterfaceMember")(p);
917         }
918         else
919         {
920             if (auto m = tuple(`InterfaceMember`, p.end) in memo)
921                 return *m;
922             else
923             {
924                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Const, Spacing), pegged.peg.wrapAround!(Spacing, Operation, Spacing), pegged.peg.wrapAround!(Spacing, Stringifier, Spacing), pegged.peg.wrapAround!(Spacing, StaticMember, Spacing), pegged.peg.wrapAround!(Spacing, Iterable, Spacing), pegged.peg.wrapAround!(Spacing, ReadOnlyMember, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteAttribute, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteMaplike, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteSetlike, Spacing)), Spacing)), "WebIDL.InterfaceMember"), "InterfaceMember")(p);
925                 memo[tuple(`InterfaceMember`, p.end)] = result;
926                 return result;
927             }
928         }
929     }
930 
931     static TParseTree InterfaceMember(string s)
932     {
933         if(__ctfe)
934         {
935             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Const, Spacing), pegged.peg.wrapAround!(Spacing, Operation, Spacing), pegged.peg.wrapAround!(Spacing, Stringifier, Spacing), pegged.peg.wrapAround!(Spacing, StaticMember, Spacing), pegged.peg.wrapAround!(Spacing, Iterable, Spacing), pegged.peg.wrapAround!(Spacing, ReadOnlyMember, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteAttribute, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteMaplike, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteSetlike, Spacing)), Spacing)), "WebIDL.InterfaceMember")(TParseTree("", false,[], s));
936         }
937         else
938         {
939             forgetMemo();
940             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Const, Spacing), pegged.peg.wrapAround!(Spacing, Operation, Spacing), pegged.peg.wrapAround!(Spacing, Stringifier, Spacing), pegged.peg.wrapAround!(Spacing, StaticMember, Spacing), pegged.peg.wrapAround!(Spacing, Iterable, Spacing), pegged.peg.wrapAround!(Spacing, ReadOnlyMember, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteAttribute, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteMaplike, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteSetlike, Spacing)), Spacing)), "WebIDL.InterfaceMember"), "InterfaceMember")(TParseTree("", false,[], s));
941         }
942     }
943     static string InterfaceMember(GetName g)
944     {
945         return "WebIDL.InterfaceMember";
946     }
947 
948     static TParseTree Inheritance(TParseTree p)
949     {
950         if(__ctfe)
951         {
952             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(":"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Inheritance")(p);
953         }
954         else
955         {
956             if (auto m = tuple(`Inheritance`, p.end) in memo)
957                 return *m;
958             else
959             {
960                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(":"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Inheritance"), "Inheritance")(p);
961                 memo[tuple(`Inheritance`, p.end)] = result;
962                 return result;
963             }
964         }
965     }
966 
967     static TParseTree Inheritance(string s)
968     {
969         if(__ctfe)
970         {
971             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(":"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Inheritance")(TParseTree("", false,[], s));
972         }
973         else
974         {
975             forgetMemo();
976             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(":"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Inheritance"), "Inheritance")(TParseTree("", false,[], s));
977         }
978     }
979     static string Inheritance(GetName g)
980     {
981         return "WebIDL.Inheritance";
982     }
983 
984     static TParseTree MixinRest(TParseTree p)
985     {
986         if(__ctfe)
987         {
988             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("mixin"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, MixinMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.MixinRest")(p);
989         }
990         else
991         {
992             if (auto m = tuple(`MixinRest`, p.end) in memo)
993                 return *m;
994             else
995             {
996                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("mixin"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, MixinMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.MixinRest"), "MixinRest")(p);
997                 memo[tuple(`MixinRest`, p.end)] = result;
998                 return result;
999             }
1000         }
1001     }
1002 
1003     static TParseTree MixinRest(string s)
1004     {
1005         if(__ctfe)
1006         {
1007             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("mixin"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, MixinMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.MixinRest")(TParseTree("", false,[], s));
1008         }
1009         else
1010         {
1011             forgetMemo();
1012             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("mixin"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, MixinMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.MixinRest"), "MixinRest")(TParseTree("", false,[], s));
1013         }
1014     }
1015     static string MixinRest(GetName g)
1016     {
1017         return "WebIDL.MixinRest";
1018     }
1019 
1020     static TParseTree MixinMembers(TParseTree p)
1021     {
1022         if(__ctfe)
1023         {
1024             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, MixinMember, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.MixinMembers")(p);
1025         }
1026         else
1027         {
1028             if (auto m = tuple(`MixinMembers`, p.end) in memo)
1029                 return *m;
1030             else
1031             {
1032                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, MixinMember, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.MixinMembers"), "MixinMembers")(p);
1033                 memo[tuple(`MixinMembers`, p.end)] = result;
1034                 return result;
1035             }
1036         }
1037     }
1038 
1039     static TParseTree MixinMembers(string s)
1040     {
1041         if(__ctfe)
1042         {
1043             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, MixinMember, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.MixinMembers")(TParseTree("", false,[], s));
1044         }
1045         else
1046         {
1047             forgetMemo();
1048             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, MixinMember, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.MixinMembers"), "MixinMembers")(TParseTree("", false,[], s));
1049         }
1050     }
1051     static string MixinMembers(GetName g)
1052     {
1053         return "WebIDL.MixinMembers";
1054     }
1055 
1056     static TParseTree MixinMember(TParseTree p)
1057     {
1058         if(__ctfe)
1059         {
1060             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Const, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), pegged.peg.wrapAround!(Spacing, Stringifier, Spacing)), "WebIDL.MixinMember")(p);
1061         }
1062         else
1063         {
1064             if (auto m = tuple(`MixinMember`, p.end) in memo)
1065                 return *m;
1066             else
1067             {
1068                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Const, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), pegged.peg.wrapAround!(Spacing, Stringifier, Spacing)), "WebIDL.MixinMember"), "MixinMember")(p);
1069                 memo[tuple(`MixinMember`, p.end)] = result;
1070                 return result;
1071             }
1072         }
1073     }
1074 
1075     static TParseTree MixinMember(string s)
1076     {
1077         if(__ctfe)
1078         {
1079             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Const, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), pegged.peg.wrapAround!(Spacing, Stringifier, Spacing)), "WebIDL.MixinMember")(TParseTree("", false,[], s));
1080         }
1081         else
1082         {
1083             forgetMemo();
1084             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Const, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), pegged.peg.wrapAround!(Spacing, Stringifier, Spacing)), "WebIDL.MixinMember"), "MixinMember")(TParseTree("", false,[], s));
1085         }
1086     }
1087     static string MixinMember(GetName g)
1088     {
1089         return "WebIDL.MixinMember";
1090     }
1091 
1092     static TParseTree IncludesStatement(TParseTree p)
1093     {
1094         if(__ctfe)
1095         {
1096             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("includes"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.IncludesStatement")(p);
1097         }
1098         else
1099         {
1100             if (auto m = tuple(`IncludesStatement`, p.end) in memo)
1101                 return *m;
1102             else
1103             {
1104                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("includes"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.IncludesStatement"), "IncludesStatement")(p);
1105                 memo[tuple(`IncludesStatement`, p.end)] = result;
1106                 return result;
1107             }
1108         }
1109     }
1110 
1111     static TParseTree IncludesStatement(string s)
1112     {
1113         if(__ctfe)
1114         {
1115             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("includes"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.IncludesStatement")(TParseTree("", false,[], s));
1116         }
1117         else
1118         {
1119             forgetMemo();
1120             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("includes"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.IncludesStatement"), "IncludesStatement")(TParseTree("", false,[], s));
1121         }
1122     }
1123     static string IncludesStatement(GetName g)
1124     {
1125         return "WebIDL.IncludesStatement";
1126     }
1127 
1128     static TParseTree Const(TParseTree p)
1129     {
1130         if(__ctfe)
1131         {
1132             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("const"), Spacing), pegged.peg.wrapAround!(Spacing, ConstType, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, ConstValue, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Const")(p);
1133         }
1134         else
1135         {
1136             if (auto m = tuple(`Const`, p.end) in memo)
1137                 return *m;
1138             else
1139             {
1140                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("const"), Spacing), pegged.peg.wrapAround!(Spacing, ConstType, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, ConstValue, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Const"), "Const")(p);
1141                 memo[tuple(`Const`, p.end)] = result;
1142                 return result;
1143             }
1144         }
1145     }
1146 
1147     static TParseTree Const(string s)
1148     {
1149         if(__ctfe)
1150         {
1151             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("const"), Spacing), pegged.peg.wrapAround!(Spacing, ConstType, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, ConstValue, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Const")(TParseTree("", false,[], s));
1152         }
1153         else
1154         {
1155             forgetMemo();
1156             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("const"), Spacing), pegged.peg.wrapAround!(Spacing, ConstType, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, ConstValue, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Const"), "Const")(TParseTree("", false,[], s));
1157         }
1158     }
1159     static string Const(GetName g)
1160     {
1161         return "WebIDL.Const";
1162     }
1163 
1164     static TParseTree ConstValue(TParseTree p)
1165     {
1166         if(__ctfe)
1167         {
1168             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, BooleanLiteral, Spacing), pegged.peg.wrapAround!(Spacing, FloatLiteral, Spacing), pegged.peg.wrapAround!(Spacing, Integer, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("null"), Spacing)), "WebIDL.ConstValue")(p);
1169         }
1170         else
1171         {
1172             if (auto m = tuple(`ConstValue`, p.end) in memo)
1173                 return *m;
1174             else
1175             {
1176                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, BooleanLiteral, Spacing), pegged.peg.wrapAround!(Spacing, FloatLiteral, Spacing), pegged.peg.wrapAround!(Spacing, Integer, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("null"), Spacing)), "WebIDL.ConstValue"), "ConstValue")(p);
1177                 memo[tuple(`ConstValue`, p.end)] = result;
1178                 return result;
1179             }
1180         }
1181     }
1182 
1183     static TParseTree ConstValue(string s)
1184     {
1185         if(__ctfe)
1186         {
1187             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, BooleanLiteral, Spacing), pegged.peg.wrapAround!(Spacing, FloatLiteral, Spacing), pegged.peg.wrapAround!(Spacing, Integer, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("null"), Spacing)), "WebIDL.ConstValue")(TParseTree("", false,[], s));
1188         }
1189         else
1190         {
1191             forgetMemo();
1192             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, BooleanLiteral, Spacing), pegged.peg.wrapAround!(Spacing, FloatLiteral, Spacing), pegged.peg.wrapAround!(Spacing, Integer, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("null"), Spacing)), "WebIDL.ConstValue"), "ConstValue")(TParseTree("", false,[], s));
1193         }
1194     }
1195     static string ConstValue(GetName g)
1196     {
1197         return "WebIDL.ConstValue";
1198     }
1199 
1200     static TParseTree BooleanLiteral(TParseTree p)
1201     {
1202         if(__ctfe)
1203         {
1204             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("true"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("false"), Spacing)), "WebIDL.BooleanLiteral")(p);
1205         }
1206         else
1207         {
1208             if (auto m = tuple(`BooleanLiteral`, p.end) in memo)
1209                 return *m;
1210             else
1211             {
1212                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("true"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("false"), Spacing)), "WebIDL.BooleanLiteral"), "BooleanLiteral")(p);
1213                 memo[tuple(`BooleanLiteral`, p.end)] = result;
1214                 return result;
1215             }
1216         }
1217     }
1218 
1219     static TParseTree BooleanLiteral(string s)
1220     {
1221         if(__ctfe)
1222         {
1223             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("true"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("false"), Spacing)), "WebIDL.BooleanLiteral")(TParseTree("", false,[], s));
1224         }
1225         else
1226         {
1227             forgetMemo();
1228             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("true"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("false"), Spacing)), "WebIDL.BooleanLiteral"), "BooleanLiteral")(TParseTree("", false,[], s));
1229         }
1230     }
1231     static string BooleanLiteral(GetName g)
1232     {
1233         return "WebIDL.BooleanLiteral";
1234     }
1235 
1236     static TParseTree FloatLiteral(TParseTree p)
1237     {
1238         if(__ctfe)
1239         {
1240             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Float, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("NaN"), Spacing)), "WebIDL.FloatLiteral")(p);
1241         }
1242         else
1243         {
1244             if (auto m = tuple(`FloatLiteral`, p.end) in memo)
1245                 return *m;
1246             else
1247             {
1248                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Float, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("NaN"), Spacing)), "WebIDL.FloatLiteral"), "FloatLiteral")(p);
1249                 memo[tuple(`FloatLiteral`, p.end)] = result;
1250                 return result;
1251             }
1252         }
1253     }
1254 
1255     static TParseTree FloatLiteral(string s)
1256     {
1257         if(__ctfe)
1258         {
1259             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Float, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("NaN"), Spacing)), "WebIDL.FloatLiteral")(TParseTree("", false,[], s));
1260         }
1261         else
1262         {
1263             forgetMemo();
1264             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Float, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("NaN"), Spacing)), "WebIDL.FloatLiteral"), "FloatLiteral")(TParseTree("", false,[], s));
1265         }
1266     }
1267     static string FloatLiteral(GetName g)
1268     {
1269         return "WebIDL.FloatLiteral";
1270     }
1271 
1272     static TParseTree ConstType(TParseTree p)
1273     {
1274         if(__ctfe)
1275         {
1276             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, PrimitiveType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.ConstType")(p);
1277         }
1278         else
1279         {
1280             if (auto m = tuple(`ConstType`, p.end) in memo)
1281                 return *m;
1282             else
1283             {
1284                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, PrimitiveType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.ConstType"), "ConstType")(p);
1285                 memo[tuple(`ConstType`, p.end)] = result;
1286                 return result;
1287             }
1288         }
1289     }
1290 
1291     static TParseTree ConstType(string s)
1292     {
1293         if(__ctfe)
1294         {
1295             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, PrimitiveType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.ConstType")(TParseTree("", false,[], s));
1296         }
1297         else
1298         {
1299             forgetMemo();
1300             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, PrimitiveType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.ConstType"), "ConstType")(TParseTree("", false,[], s));
1301         }
1302     }
1303     static string ConstType(GetName g)
1304     {
1305         return "WebIDL.ConstType";
1306     }
1307 
1308     static TParseTree ReadOnlyMember(TParseTree p)
1309     {
1310         if(__ctfe)
1311         {
1312             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, ReadOnlyMemberRest, Spacing)), "WebIDL.ReadOnlyMember")(p);
1313         }
1314         else
1315         {
1316             if (auto m = tuple(`ReadOnlyMember`, p.end) in memo)
1317                 return *m;
1318             else
1319             {
1320                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, ReadOnlyMemberRest, Spacing)), "WebIDL.ReadOnlyMember"), "ReadOnlyMember")(p);
1321                 memo[tuple(`ReadOnlyMember`, p.end)] = result;
1322                 return result;
1323             }
1324         }
1325     }
1326 
1327     static TParseTree ReadOnlyMember(string s)
1328     {
1329         if(__ctfe)
1330         {
1331             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, ReadOnlyMemberRest, Spacing)), "WebIDL.ReadOnlyMember")(TParseTree("", false,[], s));
1332         }
1333         else
1334         {
1335             forgetMemo();
1336             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, ReadOnlyMemberRest, Spacing)), "WebIDL.ReadOnlyMember"), "ReadOnlyMember")(TParseTree("", false,[], s));
1337         }
1338     }
1339     static string ReadOnlyMember(GetName g)
1340     {
1341         return "WebIDL.ReadOnlyMember";
1342     }
1343 
1344     static TParseTree ReadOnlyMemberRest(TParseTree p)
1345     {
1346         if(__ctfe)
1347         {
1348             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteMaplike, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteSetlike, Spacing)), "WebIDL.ReadOnlyMemberRest")(p);
1349         }
1350         else
1351         {
1352             if (auto m = tuple(`ReadOnlyMemberRest`, p.end) in memo)
1353                 return *m;
1354             else
1355             {
1356                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteMaplike, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteSetlike, Spacing)), "WebIDL.ReadOnlyMemberRest"), "ReadOnlyMemberRest")(p);
1357                 memo[tuple(`ReadOnlyMemberRest`, p.end)] = result;
1358                 return result;
1359             }
1360         }
1361     }
1362 
1363     static TParseTree ReadOnlyMemberRest(string s)
1364     {
1365         if(__ctfe)
1366         {
1367             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteMaplike, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteSetlike, Spacing)), "WebIDL.ReadOnlyMemberRest")(TParseTree("", false,[], s));
1368         }
1369         else
1370         {
1371             forgetMemo();
1372             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteMaplike, Spacing), pegged.peg.wrapAround!(Spacing, ReadWriteSetlike, Spacing)), "WebIDL.ReadOnlyMemberRest"), "ReadOnlyMemberRest")(TParseTree("", false,[], s));
1373         }
1374     }
1375     static string ReadOnlyMemberRest(GetName g)
1376     {
1377         return "WebIDL.ReadOnlyMemberRest";
1378     }
1379 
1380     static TParseTree ReadWriteAttribute(TParseTree p)
1381     {
1382         if(__ctfe)
1383         {
1384             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("inherit"), Spacing), pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), "WebIDL.ReadWriteAttribute")(p);
1385         }
1386         else
1387         {
1388             if (auto m = tuple(`ReadWriteAttribute`, p.end) in memo)
1389                 return *m;
1390             else
1391             {
1392                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("inherit"), Spacing), pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), "WebIDL.ReadWriteAttribute"), "ReadWriteAttribute")(p);
1393                 memo[tuple(`ReadWriteAttribute`, p.end)] = result;
1394                 return result;
1395             }
1396         }
1397     }
1398 
1399     static TParseTree ReadWriteAttribute(string s)
1400     {
1401         if(__ctfe)
1402         {
1403             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("inherit"), Spacing), pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), "WebIDL.ReadWriteAttribute")(TParseTree("", false,[], s));
1404         }
1405         else
1406         {
1407             forgetMemo();
1408             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("inherit"), Spacing), pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), "WebIDL.ReadWriteAttribute"), "ReadWriteAttribute")(TParseTree("", false,[], s));
1409         }
1410     }
1411     static string ReadWriteAttribute(GetName g)
1412     {
1413         return "WebIDL.ReadWriteAttribute";
1414     }
1415 
1416     static TParseTree AttributeRest(TParseTree p)
1417     {
1418         if(__ctfe)
1419         {
1420             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("attribute"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, AttributeName, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.AttributeRest")(p);
1421         }
1422         else
1423         {
1424             if (auto m = tuple(`AttributeRest`, p.end) in memo)
1425                 return *m;
1426             else
1427             {
1428                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("attribute"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, AttributeName, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.AttributeRest"), "AttributeRest")(p);
1429                 memo[tuple(`AttributeRest`, p.end)] = result;
1430                 return result;
1431             }
1432         }
1433     }
1434 
1435     static TParseTree AttributeRest(string s)
1436     {
1437         if(__ctfe)
1438         {
1439             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("attribute"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, AttributeName, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.AttributeRest")(TParseTree("", false,[], s));
1440         }
1441         else
1442         {
1443             forgetMemo();
1444             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("attribute"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, AttributeName, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.AttributeRest"), "AttributeRest")(TParseTree("", false,[], s));
1445         }
1446     }
1447     static string AttributeRest(GetName g)
1448     {
1449         return "WebIDL.AttributeRest";
1450     }
1451 
1452     static TParseTree AttributeName(TParseTree p)
1453     {
1454         if(__ctfe)
1455         {
1456             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, AttributeNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.AttributeName")(p);
1457         }
1458         else
1459         {
1460             if (auto m = tuple(`AttributeName`, p.end) in memo)
1461                 return *m;
1462             else
1463             {
1464                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, AttributeNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.AttributeName"), "AttributeName")(p);
1465                 memo[tuple(`AttributeName`, p.end)] = result;
1466                 return result;
1467             }
1468         }
1469     }
1470 
1471     static TParseTree AttributeName(string s)
1472     {
1473         if(__ctfe)
1474         {
1475             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, AttributeNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.AttributeName")(TParseTree("", false,[], s));
1476         }
1477         else
1478         {
1479             forgetMemo();
1480             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, AttributeNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.AttributeName"), "AttributeName")(TParseTree("", false,[], s));
1481         }
1482     }
1483     static string AttributeName(GetName g)
1484     {
1485         return "WebIDL.AttributeName";
1486     }
1487 
1488     static TParseTree AttributeNameKeyword(TParseTree p)
1489     {
1490         if(__ctfe)
1491         {
1492             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("required"), pegged.peg.negLookahead!(Identifier)), "WebIDL.AttributeNameKeyword")(p);
1493         }
1494         else
1495         {
1496             if (auto m = tuple(`AttributeNameKeyword`, p.end) in memo)
1497                 return *m;
1498             else
1499             {
1500                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("required"), pegged.peg.negLookahead!(Identifier)), "WebIDL.AttributeNameKeyword"), "AttributeNameKeyword")(p);
1501                 memo[tuple(`AttributeNameKeyword`, p.end)] = result;
1502                 return result;
1503             }
1504         }
1505     }
1506 
1507     static TParseTree AttributeNameKeyword(string s)
1508     {
1509         if(__ctfe)
1510         {
1511             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("required"), pegged.peg.negLookahead!(Identifier)), "WebIDL.AttributeNameKeyword")(TParseTree("", false,[], s));
1512         }
1513         else
1514         {
1515             forgetMemo();
1516             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("required"), pegged.peg.negLookahead!(Identifier)), "WebIDL.AttributeNameKeyword"), "AttributeNameKeyword")(TParseTree("", false,[], s));
1517         }
1518     }
1519     static string AttributeNameKeyword(GetName g)
1520     {
1521         return "WebIDL.AttributeNameKeyword";
1522     }
1523 
1524     static TParseTree ReadOnly(TParseTree p)
1525     {
1526         if(__ctfe)
1527         {
1528             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ReadOnly")(p);
1529         }
1530         else
1531         {
1532             if (auto m = tuple(`ReadOnly`, p.end) in memo)
1533                 return *m;
1534             else
1535             {
1536                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ReadOnly"), "ReadOnly")(p);
1537                 memo[tuple(`ReadOnly`, p.end)] = result;
1538                 return result;
1539             }
1540         }
1541     }
1542 
1543     static TParseTree ReadOnly(string s)
1544     {
1545         if(__ctfe)
1546         {
1547             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ReadOnly")(TParseTree("", false,[], s));
1548         }
1549         else
1550         {
1551             forgetMemo();
1552             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ReadOnly"), "ReadOnly")(TParseTree("", false,[], s));
1553         }
1554     }
1555     static string ReadOnly(GetName g)
1556     {
1557         return "WebIDL.ReadOnly";
1558     }
1559 
1560     static TParseTree DefaultValue(TParseTree p)
1561     {
1562         if(__ctfe)
1563         {
1564             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, ConstValue, Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing)), "WebIDL.DefaultValue")(p);
1565         }
1566         else
1567         {
1568             if (auto m = tuple(`DefaultValue`, p.end) in memo)
1569                 return *m;
1570             else
1571             {
1572                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, ConstValue, Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing)), "WebIDL.DefaultValue"), "DefaultValue")(p);
1573                 memo[tuple(`DefaultValue`, p.end)] = result;
1574                 return result;
1575             }
1576         }
1577     }
1578 
1579     static TParseTree DefaultValue(string s)
1580     {
1581         if(__ctfe)
1582         {
1583             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, ConstValue, Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing)), "WebIDL.DefaultValue")(TParseTree("", false,[], s));
1584         }
1585         else
1586         {
1587             forgetMemo();
1588             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, ConstValue, Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing)), "WebIDL.DefaultValue"), "DefaultValue")(TParseTree("", false,[], s));
1589         }
1590     }
1591     static string DefaultValue(GetName g)
1592     {
1593         return "WebIDL.DefaultValue";
1594     }
1595 
1596     static TParseTree Operation(TParseTree p)
1597     {
1598         if(__ctfe)
1599         {
1600             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, SpecialOperation, Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.Operation")(p);
1601         }
1602         else
1603         {
1604             if (auto m = tuple(`Operation`, p.end) in memo)
1605                 return *m;
1606             else
1607             {
1608                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, SpecialOperation, Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.Operation"), "Operation")(p);
1609                 memo[tuple(`Operation`, p.end)] = result;
1610                 return result;
1611             }
1612         }
1613     }
1614 
1615     static TParseTree Operation(string s)
1616     {
1617         if(__ctfe)
1618         {
1619             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, SpecialOperation, Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.Operation")(TParseTree("", false,[], s));
1620         }
1621         else
1622         {
1623             forgetMemo();
1624             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, SpecialOperation, Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.Operation"), "Operation")(TParseTree("", false,[], s));
1625         }
1626     }
1627     static string Operation(GetName g)
1628     {
1629         return "WebIDL.Operation";
1630     }
1631 
1632     static TParseTree RegularOperation(TParseTree p)
1633     {
1634         if(__ctfe)
1635         {
1636             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, OperationRest, Spacing)), "WebIDL.RegularOperation")(p);
1637         }
1638         else
1639         {
1640             if (auto m = tuple(`RegularOperation`, p.end) in memo)
1641                 return *m;
1642             else
1643             {
1644                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, OperationRest, Spacing)), "WebIDL.RegularOperation"), "RegularOperation")(p);
1645                 memo[tuple(`RegularOperation`, p.end)] = result;
1646                 return result;
1647             }
1648         }
1649     }
1650 
1651     static TParseTree RegularOperation(string s)
1652     {
1653         if(__ctfe)
1654         {
1655             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, OperationRest, Spacing)), "WebIDL.RegularOperation")(TParseTree("", false,[], s));
1656         }
1657         else
1658         {
1659             forgetMemo();
1660             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, OperationRest, Spacing)), "WebIDL.RegularOperation"), "RegularOperation")(TParseTree("", false,[], s));
1661         }
1662     }
1663     static string RegularOperation(GetName g)
1664     {
1665         return "WebIDL.RegularOperation";
1666     }
1667 
1668     static TParseTree SpecialOperation(TParseTree p)
1669     {
1670         if(__ctfe)
1671         {
1672             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Special, Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.SpecialOperation")(p);
1673         }
1674         else
1675         {
1676             if (auto m = tuple(`SpecialOperation`, p.end) in memo)
1677                 return *m;
1678             else
1679             {
1680                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Special, Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.SpecialOperation"), "SpecialOperation")(p);
1681                 memo[tuple(`SpecialOperation`, p.end)] = result;
1682                 return result;
1683             }
1684         }
1685     }
1686 
1687     static TParseTree SpecialOperation(string s)
1688     {
1689         if(__ctfe)
1690         {
1691             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Special, Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.SpecialOperation")(TParseTree("", false,[], s));
1692         }
1693         else
1694         {
1695             forgetMemo();
1696             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Special, Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.SpecialOperation"), "SpecialOperation")(TParseTree("", false,[], s));
1697         }
1698     }
1699     static string SpecialOperation(GetName g)
1700     {
1701         return "WebIDL.SpecialOperation";
1702     }
1703 
1704     static TParseTree Special(TParseTree p)
1705     {
1706         if(__ctfe)
1707         {
1708             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("getter"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("setter"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("deleter"), Spacing)), "WebIDL.Special")(p);
1709         }
1710         else
1711         {
1712             if (auto m = tuple(`Special`, p.end) in memo)
1713                 return *m;
1714             else
1715             {
1716                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("getter"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("setter"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("deleter"), Spacing)), "WebIDL.Special"), "Special")(p);
1717                 memo[tuple(`Special`, p.end)] = result;
1718                 return result;
1719             }
1720         }
1721     }
1722 
1723     static TParseTree Special(string s)
1724     {
1725         if(__ctfe)
1726         {
1727             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("getter"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("setter"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("deleter"), Spacing)), "WebIDL.Special")(TParseTree("", false,[], s));
1728         }
1729         else
1730         {
1731             forgetMemo();
1732             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("getter"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("setter"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("deleter"), Spacing)), "WebIDL.Special"), "Special")(TParseTree("", false,[], s));
1733         }
1734     }
1735     static string Special(GetName g)
1736     {
1737         return "WebIDL.Special";
1738     }
1739 
1740     static TParseTree OperationRest(TParseTree p)
1741     {
1742         if(__ctfe)
1743         {
1744             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, OptionalIdentifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.OperationRest")(p);
1745         }
1746         else
1747         {
1748             if (auto m = tuple(`OperationRest`, p.end) in memo)
1749                 return *m;
1750             else
1751             {
1752                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, OptionalIdentifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.OperationRest"), "OperationRest")(p);
1753                 memo[tuple(`OperationRest`, p.end)] = result;
1754                 return result;
1755             }
1756         }
1757     }
1758 
1759     static TParseTree OperationRest(string s)
1760     {
1761         if(__ctfe)
1762         {
1763             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, OptionalIdentifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.OperationRest")(TParseTree("", false,[], s));
1764         }
1765         else
1766         {
1767             forgetMemo();
1768             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, OptionalIdentifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.OperationRest"), "OperationRest")(TParseTree("", false,[], s));
1769         }
1770     }
1771     static string OperationRest(GetName g)
1772     {
1773         return "WebIDL.OperationRest";
1774     }
1775 
1776     static TParseTree OptionalIdentifier(TParseTree p)
1777     {
1778         if(__ctfe)
1779         {
1780             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.OptionalIdentifier")(p);
1781         }
1782         else
1783         {
1784             if (auto m = tuple(`OptionalIdentifier`, p.end) in memo)
1785                 return *m;
1786             else
1787             {
1788                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.OptionalIdentifier"), "OptionalIdentifier")(p);
1789                 memo[tuple(`OptionalIdentifier`, p.end)] = result;
1790                 return result;
1791             }
1792         }
1793     }
1794 
1795     static TParseTree OptionalIdentifier(string s)
1796     {
1797         if(__ctfe)
1798         {
1799             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.OptionalIdentifier")(TParseTree("", false,[], s));
1800         }
1801         else
1802         {
1803             forgetMemo();
1804             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.OptionalIdentifier"), "OptionalIdentifier")(TParseTree("", false,[], s));
1805         }
1806     }
1807     static string OptionalIdentifier(GetName g)
1808     {
1809         return "WebIDL.OptionalIdentifier";
1810     }
1811 
1812     static TParseTree ArgumentList(TParseTree p)
1813     {
1814         if(__ctfe)
1815         {
1816             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Argument, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, Argument, Spacing)), Spacing))), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ArgumentList")(p);
1817         }
1818         else
1819         {
1820             if (auto m = tuple(`ArgumentList`, p.end) in memo)
1821                 return *m;
1822             else
1823             {
1824                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Argument, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, Argument, Spacing)), Spacing))), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ArgumentList"), "ArgumentList")(p);
1825                 memo[tuple(`ArgumentList`, p.end)] = result;
1826                 return result;
1827             }
1828         }
1829     }
1830 
1831     static TParseTree ArgumentList(string s)
1832     {
1833         if(__ctfe)
1834         {
1835             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Argument, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, Argument, Spacing)), Spacing))), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ArgumentList")(TParseTree("", false,[], s));
1836         }
1837         else
1838         {
1839             forgetMemo();
1840             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Argument, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, Argument, Spacing)), Spacing))), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ArgumentList"), "ArgumentList")(TParseTree("", false,[], s));
1841         }
1842     }
1843     static string ArgumentList(GetName g)
1844     {
1845         return "WebIDL.ArgumentList";
1846     }
1847 
1848     static TParseTree Argument(TParseTree p)
1849     {
1850         if(__ctfe)
1851         {
1852             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentRest, Spacing)), "WebIDL.Argument")(p);
1853         }
1854         else
1855         {
1856             if (auto m = tuple(`Argument`, p.end) in memo)
1857                 return *m;
1858             else
1859             {
1860                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentRest, Spacing)), "WebIDL.Argument"), "Argument")(p);
1861                 memo[tuple(`Argument`, p.end)] = result;
1862                 return result;
1863             }
1864         }
1865     }
1866 
1867     static TParseTree Argument(string s)
1868     {
1869         if(__ctfe)
1870         {
1871             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentRest, Spacing)), "WebIDL.Argument")(TParseTree("", false,[], s));
1872         }
1873         else
1874         {
1875             forgetMemo();
1876             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentRest, Spacing)), "WebIDL.Argument"), "Argument")(TParseTree("", false,[], s));
1877         }
1878     }
1879     static string Argument(GetName g)
1880     {
1881         return "WebIDL.Argument";
1882     }
1883 
1884     static TParseTree ArgumentRest(TParseTree p)
1885     {
1886         if(__ctfe)
1887         {
1888             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("optional"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentName, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, Ellipsis, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentName, Spacing)), Spacing)), "WebIDL.ArgumentRest")(p);
1889         }
1890         else
1891         {
1892             if (auto m = tuple(`ArgumentRest`, p.end) in memo)
1893                 return *m;
1894             else
1895             {
1896                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("optional"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentName, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, Ellipsis, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentName, Spacing)), Spacing)), "WebIDL.ArgumentRest"), "ArgumentRest")(p);
1897                 memo[tuple(`ArgumentRest`, p.end)] = result;
1898                 return result;
1899             }
1900         }
1901     }
1902 
1903     static TParseTree ArgumentRest(string s)
1904     {
1905         if(__ctfe)
1906         {
1907             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("optional"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentName, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, Ellipsis, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentName, Spacing)), Spacing)), "WebIDL.ArgumentRest")(TParseTree("", false,[], s));
1908         }
1909         else
1910         {
1911             forgetMemo();
1912             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("optional"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentName, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, Ellipsis, Spacing), pegged.peg.wrapAround!(Spacing, ArgumentName, Spacing)), Spacing)), "WebIDL.ArgumentRest"), "ArgumentRest")(TParseTree("", false,[], s));
1913         }
1914     }
1915     static string ArgumentRest(GetName g)
1916     {
1917         return "WebIDL.ArgumentRest";
1918     }
1919 
1920     static TParseTree ArgumentName(TParseTree p)
1921     {
1922         if(__ctfe)
1923         {
1924             return         pegged.peg.defined!(pegged.peg.longest_match!(pegged.peg.wrapAround!(Spacing, ArgumentNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.ArgumentName")(p);
1925         }
1926         else
1927         {
1928             if (auto m = tuple(`ArgumentName`, p.end) in memo)
1929                 return *m;
1930             else
1931             {
1932                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.longest_match!(pegged.peg.wrapAround!(Spacing, ArgumentNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.ArgumentName"), "ArgumentName")(p);
1933                 memo[tuple(`ArgumentName`, p.end)] = result;
1934                 return result;
1935             }
1936         }
1937     }
1938 
1939     static TParseTree ArgumentName(string s)
1940     {
1941         if(__ctfe)
1942         {
1943             return         pegged.peg.defined!(pegged.peg.longest_match!(pegged.peg.wrapAround!(Spacing, ArgumentNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.ArgumentName")(TParseTree("", false,[], s));
1944         }
1945         else
1946         {
1947             forgetMemo();
1948             return hooked!(pegged.peg.defined!(pegged.peg.longest_match!(pegged.peg.wrapAround!(Spacing, ArgumentNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.ArgumentName"), "ArgumentName")(TParseTree("", false,[], s));
1949         }
1950     }
1951     static string ArgumentName(GetName g)
1952     {
1953         return "WebIDL.ArgumentName";
1954     }
1955 
1956     static TParseTree Ellipsis(TParseTree p)
1957     {
1958         if(__ctfe)
1959         {
1960             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("..."), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Ellipsis")(p);
1961         }
1962         else
1963         {
1964             if (auto m = tuple(`Ellipsis`, p.end) in memo)
1965                 return *m;
1966             else
1967             {
1968                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("..."), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Ellipsis"), "Ellipsis")(p);
1969                 memo[tuple(`Ellipsis`, p.end)] = result;
1970                 return result;
1971             }
1972         }
1973     }
1974 
1975     static TParseTree Ellipsis(string s)
1976     {
1977         if(__ctfe)
1978         {
1979             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("..."), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Ellipsis")(TParseTree("", false,[], s));
1980         }
1981         else
1982         {
1983             forgetMemo();
1984             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("..."), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Ellipsis"), "Ellipsis")(TParseTree("", false,[], s));
1985         }
1986     }
1987     static string Ellipsis(GetName g)
1988     {
1989         return "WebIDL.Ellipsis";
1990     }
1991 
1992     static TParseTree ReturnType(TParseTree p)
1993     {
1994         if(__ctfe)
1995         {
1996             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("void"), Spacing)), "WebIDL.ReturnType")(p);
1997         }
1998         else
1999         {
2000             if (auto m = tuple(`ReturnType`, p.end) in memo)
2001                 return *m;
2002             else
2003             {
2004                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("void"), Spacing)), "WebIDL.ReturnType"), "ReturnType")(p);
2005                 memo[tuple(`ReturnType`, p.end)] = result;
2006                 return result;
2007             }
2008         }
2009     }
2010 
2011     static TParseTree ReturnType(string s)
2012     {
2013         if(__ctfe)
2014         {
2015             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("void"), Spacing)), "WebIDL.ReturnType")(TParseTree("", false,[], s));
2016         }
2017         else
2018         {
2019             forgetMemo();
2020             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("void"), Spacing)), "WebIDL.ReturnType"), "ReturnType")(TParseTree("", false,[], s));
2021         }
2022     }
2023     static string ReturnType(GetName g)
2024     {
2025         return "WebIDL.ReturnType";
2026     }
2027 
2028     static TParseTree Stringifier(TParseTree p)
2029     {
2030         if(__ctfe)
2031         {
2032             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("stringifier"), Spacing), pegged.peg.wrapAround!(Spacing, StringifierRest, Spacing)), "WebIDL.Stringifier")(p);
2033         }
2034         else
2035         {
2036             if (auto m = tuple(`Stringifier`, p.end) in memo)
2037                 return *m;
2038             else
2039             {
2040                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("stringifier"), Spacing), pegged.peg.wrapAround!(Spacing, StringifierRest, Spacing)), "WebIDL.Stringifier"), "Stringifier")(p);
2041                 memo[tuple(`Stringifier`, p.end)] = result;
2042                 return result;
2043             }
2044         }
2045     }
2046 
2047     static TParseTree Stringifier(string s)
2048     {
2049         if(__ctfe)
2050         {
2051             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("stringifier"), Spacing), pegged.peg.wrapAround!(Spacing, StringifierRest, Spacing)), "WebIDL.Stringifier")(TParseTree("", false,[], s));
2052         }
2053         else
2054         {
2055             forgetMemo();
2056             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("stringifier"), Spacing), pegged.peg.wrapAround!(Spacing, StringifierRest, Spacing)), "WebIDL.Stringifier"), "Stringifier")(TParseTree("", false,[], s));
2057         }
2058     }
2059     static string Stringifier(GetName g)
2060     {
2061         return "WebIDL.Stringifier";
2062     }
2063 
2064     static TParseTree StringifierRest(TParseTree p)
2065     {
2066         if(__ctfe)
2067         {
2068             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.StringifierRest")(p);
2069         }
2070         else
2071         {
2072             if (auto m = tuple(`StringifierRest`, p.end) in memo)
2073                 return *m;
2074             else
2075             {
2076                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.StringifierRest"), "StringifierRest")(p);
2077                 memo[tuple(`StringifierRest`, p.end)] = result;
2078                 return result;
2079             }
2080         }
2081     }
2082 
2083     static TParseTree StringifierRest(string s)
2084     {
2085         if(__ctfe)
2086         {
2087             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.StringifierRest")(TParseTree("", false,[], s));
2088         }
2089         else
2090         {
2091             forgetMemo();
2092             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.StringifierRest"), "StringifierRest")(TParseTree("", false,[], s));
2093         }
2094     }
2095     static string StringifierRest(GetName g)
2096     {
2097         return "WebIDL.StringifierRest";
2098     }
2099 
2100     static TParseTree StaticMember(TParseTree p)
2101     {
2102         if(__ctfe)
2103         {
2104             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("static"), Spacing), pegged.peg.wrapAround!(Spacing, StaticMemberRest, Spacing)), "WebIDL.StaticMember")(p);
2105         }
2106         else
2107         {
2108             if (auto m = tuple(`StaticMember`, p.end) in memo)
2109                 return *m;
2110             else
2111             {
2112                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("static"), Spacing), pegged.peg.wrapAround!(Spacing, StaticMemberRest, Spacing)), "WebIDL.StaticMember"), "StaticMember")(p);
2113                 memo[tuple(`StaticMember`, p.end)] = result;
2114                 return result;
2115             }
2116         }
2117     }
2118 
2119     static TParseTree StaticMember(string s)
2120     {
2121         if(__ctfe)
2122         {
2123             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("static"), Spacing), pegged.peg.wrapAround!(Spacing, StaticMemberRest, Spacing)), "WebIDL.StaticMember")(TParseTree("", false,[], s));
2124         }
2125         else
2126         {
2127             forgetMemo();
2128             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("static"), Spacing), pegged.peg.wrapAround!(Spacing, StaticMemberRest, Spacing)), "WebIDL.StaticMember"), "StaticMember")(TParseTree("", false,[], s));
2129         }
2130     }
2131     static string StaticMember(GetName g)
2132     {
2133         return "WebIDL.StaticMember";
2134     }
2135 
2136     static TParseTree StaticMemberRest(TParseTree p)
2137     {
2138         if(__ctfe)
2139         {
2140             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.StaticMemberRest")(p);
2141         }
2142         else
2143         {
2144             if (auto m = tuple(`StaticMemberRest`, p.end) in memo)
2145                 return *m;
2146             else
2147             {
2148                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.StaticMemberRest"), "StaticMemberRest")(p);
2149                 memo[tuple(`StaticMemberRest`, p.end)] = result;
2150                 return result;
2151             }
2152         }
2153     }
2154 
2155     static TParseTree StaticMemberRest(string s)
2156     {
2157         if(__ctfe)
2158         {
2159             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.StaticMemberRest")(TParseTree("", false,[], s));
2160         }
2161         else
2162         {
2163             forgetMemo();
2164             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ReadOnly, Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing)), "WebIDL.StaticMemberRest"), "StaticMemberRest")(TParseTree("", false,[], s));
2165         }
2166     }
2167     static string StaticMemberRest(GetName g)
2168     {
2169         return "WebIDL.StaticMemberRest";
2170     }
2171 
2172     static TParseTree Iterable(TParseTree p)
2173     {
2174         if(__ctfe)
2175         {
2176             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("iterable"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, OptionalType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Iterable")(p);
2177         }
2178         else
2179         {
2180             if (auto m = tuple(`Iterable`, p.end) in memo)
2181                 return *m;
2182             else
2183             {
2184                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("iterable"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, OptionalType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Iterable"), "Iterable")(p);
2185                 memo[tuple(`Iterable`, p.end)] = result;
2186                 return result;
2187             }
2188         }
2189     }
2190 
2191     static TParseTree Iterable(string s)
2192     {
2193         if(__ctfe)
2194         {
2195             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("iterable"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, OptionalType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Iterable")(TParseTree("", false,[], s));
2196         }
2197         else
2198         {
2199             forgetMemo();
2200             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("iterable"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, OptionalType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Iterable"), "Iterable")(TParseTree("", false,[], s));
2201         }
2202     }
2203     static string Iterable(GetName g)
2204     {
2205         return "WebIDL.Iterable";
2206     }
2207 
2208     static TParseTree OptionalType(TParseTree p)
2209     {
2210         if(__ctfe)
2211         {
2212             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.OptionalType")(p);
2213         }
2214         else
2215         {
2216             if (auto m = tuple(`OptionalType`, p.end) in memo)
2217                 return *m;
2218             else
2219             {
2220                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.OptionalType"), "OptionalType")(p);
2221                 memo[tuple(`OptionalType`, p.end)] = result;
2222                 return result;
2223             }
2224         }
2225     }
2226 
2227     static TParseTree OptionalType(string s)
2228     {
2229         if(__ctfe)
2230         {
2231             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.OptionalType")(TParseTree("", false,[], s));
2232         }
2233         else
2234         {
2235             forgetMemo();
2236             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.OptionalType"), "OptionalType")(TParseTree("", false,[], s));
2237         }
2238     }
2239     static string OptionalType(GetName g)
2240     {
2241         return "WebIDL.OptionalType";
2242     }
2243 
2244     static TParseTree ReadWriteMaplike(TParseTree p)
2245     {
2246         if(__ctfe)
2247         {
2248             return         pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, MaplikeRest, Spacing), "WebIDL.ReadWriteMaplike")(p);
2249         }
2250         else
2251         {
2252             if (auto m = tuple(`ReadWriteMaplike`, p.end) in memo)
2253                 return *m;
2254             else
2255             {
2256                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, MaplikeRest, Spacing), "WebIDL.ReadWriteMaplike"), "ReadWriteMaplike")(p);
2257                 memo[tuple(`ReadWriteMaplike`, p.end)] = result;
2258                 return result;
2259             }
2260         }
2261     }
2262 
2263     static TParseTree ReadWriteMaplike(string s)
2264     {
2265         if(__ctfe)
2266         {
2267             return         pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, MaplikeRest, Spacing), "WebIDL.ReadWriteMaplike")(TParseTree("", false,[], s));
2268         }
2269         else
2270         {
2271             forgetMemo();
2272             return hooked!(pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, MaplikeRest, Spacing), "WebIDL.ReadWriteMaplike"), "ReadWriteMaplike")(TParseTree("", false,[], s));
2273         }
2274     }
2275     static string ReadWriteMaplike(GetName g)
2276     {
2277         return "WebIDL.ReadWriteMaplike";
2278     }
2279 
2280     static TParseTree MaplikeRest(TParseTree p)
2281     {
2282         if(__ctfe)
2283         {
2284             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("maplike"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.MaplikeRest")(p);
2285         }
2286         else
2287         {
2288             if (auto m = tuple(`MaplikeRest`, p.end) in memo)
2289                 return *m;
2290             else
2291             {
2292                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("maplike"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.MaplikeRest"), "MaplikeRest")(p);
2293                 memo[tuple(`MaplikeRest`, p.end)] = result;
2294                 return result;
2295             }
2296         }
2297     }
2298 
2299     static TParseTree MaplikeRest(string s)
2300     {
2301         if(__ctfe)
2302         {
2303             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("maplike"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.MaplikeRest")(TParseTree("", false,[], s));
2304         }
2305         else
2306         {
2307             forgetMemo();
2308             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("maplike"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.MaplikeRest"), "MaplikeRest")(TParseTree("", false,[], s));
2309         }
2310     }
2311     static string MaplikeRest(GetName g)
2312     {
2313         return "WebIDL.MaplikeRest";
2314     }
2315 
2316     static TParseTree ReadWriteSetlike(TParseTree p)
2317     {
2318         if(__ctfe)
2319         {
2320             return         pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, SetlikeRest, Spacing), "WebIDL.ReadWriteSetlike")(p);
2321         }
2322         else
2323         {
2324             if (auto m = tuple(`ReadWriteSetlike`, p.end) in memo)
2325                 return *m;
2326             else
2327             {
2328                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, SetlikeRest, Spacing), "WebIDL.ReadWriteSetlike"), "ReadWriteSetlike")(p);
2329                 memo[tuple(`ReadWriteSetlike`, p.end)] = result;
2330                 return result;
2331             }
2332         }
2333     }
2334 
2335     static TParseTree ReadWriteSetlike(string s)
2336     {
2337         if(__ctfe)
2338         {
2339             return         pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, SetlikeRest, Spacing), "WebIDL.ReadWriteSetlike")(TParseTree("", false,[], s));
2340         }
2341         else
2342         {
2343             forgetMemo();
2344             return hooked!(pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, SetlikeRest, Spacing), "WebIDL.ReadWriteSetlike"), "ReadWriteSetlike")(TParseTree("", false,[], s));
2345         }
2346     }
2347     static string ReadWriteSetlike(GetName g)
2348     {
2349         return "WebIDL.ReadWriteSetlike";
2350     }
2351 
2352     static TParseTree SetlikeRest(TParseTree p)
2353     {
2354         if(__ctfe)
2355         {
2356             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("setlike"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.SetlikeRest")(p);
2357         }
2358         else
2359         {
2360             if (auto m = tuple(`SetlikeRest`, p.end) in memo)
2361                 return *m;
2362             else
2363             {
2364                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("setlike"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.SetlikeRest"), "SetlikeRest")(p);
2365                 memo[tuple(`SetlikeRest`, p.end)] = result;
2366                 return result;
2367             }
2368         }
2369     }
2370 
2371     static TParseTree SetlikeRest(string s)
2372     {
2373         if(__ctfe)
2374         {
2375             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("setlike"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.SetlikeRest")(TParseTree("", false,[], s));
2376         }
2377         else
2378         {
2379             forgetMemo();
2380             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("setlike"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.SetlikeRest"), "SetlikeRest")(TParseTree("", false,[], s));
2381         }
2382     }
2383     static string SetlikeRest(GetName g)
2384     {
2385         return "WebIDL.SetlikeRest";
2386     }
2387 
2388     static TParseTree Namespace(TParseTree p)
2389     {
2390         if(__ctfe)
2391         {
2392             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("namespace"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, NamespaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Namespace")(p);
2393         }
2394         else
2395         {
2396             if (auto m = tuple(`Namespace`, p.end) in memo)
2397                 return *m;
2398             else
2399             {
2400                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("namespace"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, NamespaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Namespace"), "Namespace")(p);
2401                 memo[tuple(`Namespace`, p.end)] = result;
2402                 return result;
2403             }
2404         }
2405     }
2406 
2407     static TParseTree Namespace(string s)
2408     {
2409         if(__ctfe)
2410         {
2411             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("namespace"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, NamespaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Namespace")(TParseTree("", false,[], s));
2412         }
2413         else
2414         {
2415             forgetMemo();
2416             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("namespace"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, NamespaceMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Namespace"), "Namespace")(TParseTree("", false,[], s));
2417         }
2418     }
2419     static string Namespace(GetName g)
2420     {
2421         return "WebIDL.Namespace";
2422     }
2423 
2424     static TParseTree NamespaceMembers(TParseTree p)
2425     {
2426         if(__ctfe)
2427         {
2428             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, NamespaceMember, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.NamespaceMembers")(p);
2429         }
2430         else
2431         {
2432             if (auto m = tuple(`NamespaceMembers`, p.end) in memo)
2433                 return *m;
2434             else
2435             {
2436                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, NamespaceMember, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.NamespaceMembers"), "NamespaceMembers")(p);
2437                 memo[tuple(`NamespaceMembers`, p.end)] = result;
2438                 return result;
2439             }
2440         }
2441     }
2442 
2443     static TParseTree NamespaceMembers(string s)
2444     {
2445         if(__ctfe)
2446         {
2447             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, NamespaceMember, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.NamespaceMembers")(TParseTree("", false,[], s));
2448         }
2449         else
2450         {
2451             forgetMemo();
2452             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, NamespaceMember, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.NamespaceMembers"), "NamespaceMembers")(TParseTree("", false,[], s));
2453         }
2454     }
2455     static string NamespaceMembers(GetName g)
2456     {
2457         return "WebIDL.NamespaceMembers";
2458     }
2459 
2460     static TParseTree NamespaceMember(TParseTree p)
2461     {
2462         if(__ctfe)
2463         {
2464             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing)), "WebIDL.NamespaceMember")(p);
2465         }
2466         else
2467         {
2468             if (auto m = tuple(`NamespaceMember`, p.end) in memo)
2469                 return *m;
2470             else
2471             {
2472                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing)), "WebIDL.NamespaceMember"), "NamespaceMember")(p);
2473                 memo[tuple(`NamespaceMember`, p.end)] = result;
2474                 return result;
2475             }
2476         }
2477     }
2478 
2479     static TParseTree NamespaceMember(string s)
2480     {
2481         if(__ctfe)
2482         {
2483             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing)), "WebIDL.NamespaceMember")(TParseTree("", false,[], s));
2484         }
2485         else
2486         {
2487             forgetMemo();
2488             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, RegularOperation, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("readonly"), Spacing), pegged.peg.wrapAround!(Spacing, AttributeRest, Spacing)), Spacing)), "WebIDL.NamespaceMember"), "NamespaceMember")(TParseTree("", false,[], s));
2489         }
2490     }
2491     static string NamespaceMember(GetName g)
2492     {
2493         return "WebIDL.NamespaceMember";
2494     }
2495 
2496     static TParseTree Dictionary(TParseTree p)
2497     {
2498         if(__ctfe)
2499         {
2500             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("dictionary"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Inheritance, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Dictionary")(p);
2501         }
2502         else
2503         {
2504             if (auto m = tuple(`Dictionary`, p.end) in memo)
2505                 return *m;
2506             else
2507             {
2508                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("dictionary"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Inheritance, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Dictionary"), "Dictionary")(p);
2509                 memo[tuple(`Dictionary`, p.end)] = result;
2510                 return result;
2511             }
2512         }
2513     }
2514 
2515     static TParseTree Dictionary(string s)
2516     {
2517         if(__ctfe)
2518         {
2519             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("dictionary"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Inheritance, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Dictionary")(TParseTree("", false,[], s));
2520         }
2521         else
2522         {
2523             forgetMemo();
2524             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("dictionary"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Inheritance, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Dictionary"), "Dictionary")(TParseTree("", false,[], s));
2525         }
2526     }
2527     static string Dictionary(GetName g)
2528     {
2529         return "WebIDL.Dictionary";
2530     }
2531 
2532     static TParseTree DictionaryMembers(TParseTree p)
2533     {
2534         if(__ctfe)
2535         {
2536             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, DictionaryMember, Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.DictionaryMembers")(p);
2537         }
2538         else
2539         {
2540             if (auto m = tuple(`DictionaryMembers`, p.end) in memo)
2541                 return *m;
2542             else
2543             {
2544                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, DictionaryMember, Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.DictionaryMembers"), "DictionaryMembers")(p);
2545                 memo[tuple(`DictionaryMembers`, p.end)] = result;
2546                 return result;
2547             }
2548         }
2549     }
2550 
2551     static TParseTree DictionaryMembers(string s)
2552     {
2553         if(__ctfe)
2554         {
2555             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, DictionaryMember, Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.DictionaryMembers")(TParseTree("", false,[], s));
2556         }
2557         else
2558         {
2559             forgetMemo();
2560             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, DictionaryMember, Spacing)), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.DictionaryMembers"), "DictionaryMembers")(TParseTree("", false,[], s));
2561         }
2562     }
2563     static string DictionaryMembers(GetName g)
2564     {
2565         return "WebIDL.DictionaryMembers";
2566     }
2567 
2568     static TParseTree DictionaryMember(TParseTree p)
2569     {
2570         if(__ctfe)
2571         {
2572             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMemberRest, Spacing)), "WebIDL.DictionaryMember")(p);
2573         }
2574         else
2575         {
2576             if (auto m = tuple(`DictionaryMember`, p.end) in memo)
2577                 return *m;
2578             else
2579             {
2580                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMemberRest, Spacing)), "WebIDL.DictionaryMember"), "DictionaryMember")(p);
2581                 memo[tuple(`DictionaryMember`, p.end)] = result;
2582                 return result;
2583             }
2584         }
2585     }
2586 
2587     static TParseTree DictionaryMember(string s)
2588     {
2589         if(__ctfe)
2590         {
2591             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMemberRest, Spacing)), "WebIDL.DictionaryMember")(TParseTree("", false,[], s));
2592         }
2593         else
2594         {
2595             forgetMemo();
2596             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMemberRest, Spacing)), "WebIDL.DictionaryMember"), "DictionaryMember")(TParseTree("", false,[], s));
2597         }
2598     }
2599     static string DictionaryMember(GetName g)
2600     {
2601         return "WebIDL.DictionaryMember";
2602     }
2603 
2604     static TParseTree DictionaryMemberRest(TParseTree p)
2605     {
2606         if(__ctfe)
2607         {
2608             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("required"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), Spacing)), "WebIDL.DictionaryMemberRest")(p);
2609         }
2610         else
2611         {
2612             if (auto m = tuple(`DictionaryMemberRest`, p.end) in memo)
2613                 return *m;
2614             else
2615             {
2616                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("required"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), Spacing)), "WebIDL.DictionaryMemberRest"), "DictionaryMemberRest")(p);
2617                 memo[tuple(`DictionaryMemberRest`, p.end)] = result;
2618                 return result;
2619             }
2620         }
2621     }
2622 
2623     static TParseTree DictionaryMemberRest(string s)
2624     {
2625         if(__ctfe)
2626         {
2627             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("required"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), Spacing)), "WebIDL.DictionaryMemberRest")(TParseTree("", false,[], s));
2628         }
2629         else
2630         {
2631             forgetMemo();
2632             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("required"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Type, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, Default, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), Spacing)), "WebIDL.DictionaryMemberRest"), "DictionaryMemberRest")(TParseTree("", false,[], s));
2633         }
2634     }
2635     static string DictionaryMemberRest(GetName g)
2636     {
2637         return "WebIDL.DictionaryMemberRest";
2638     }
2639 
2640     static TParseTree PartialDictionary(TParseTree p)
2641     {
2642         if(__ctfe)
2643         {
2644             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("dictionary"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.PartialDictionary")(p);
2645         }
2646         else
2647         {
2648             if (auto m = tuple(`PartialDictionary`, p.end) in memo)
2649                 return *m;
2650             else
2651             {
2652                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("dictionary"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.PartialDictionary"), "PartialDictionary")(p);
2653                 memo[tuple(`PartialDictionary`, p.end)] = result;
2654                 return result;
2655             }
2656         }
2657     }
2658 
2659     static TParseTree PartialDictionary(string s)
2660     {
2661         if(__ctfe)
2662         {
2663             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("dictionary"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.PartialDictionary")(TParseTree("", false,[], s));
2664         }
2665         else
2666         {
2667             forgetMemo();
2668             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("dictionary"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, DictionaryMembers, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.PartialDictionary"), "PartialDictionary")(TParseTree("", false,[], s));
2669         }
2670     }
2671     static string PartialDictionary(GetName g)
2672     {
2673         return "WebIDL.PartialDictionary";
2674     }
2675 
2676     static TParseTree Default(TParseTree p)
2677     {
2678         if(__ctfe)
2679         {
2680             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, DefaultValue, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Default")(p);
2681         }
2682         else
2683         {
2684             if (auto m = tuple(`Default`, p.end) in memo)
2685                 return *m;
2686             else
2687             {
2688                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, DefaultValue, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Default"), "Default")(p);
2689                 memo[tuple(`Default`, p.end)] = result;
2690                 return result;
2691             }
2692         }
2693     }
2694 
2695     static TParseTree Default(string s)
2696     {
2697         if(__ctfe)
2698         {
2699             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, DefaultValue, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Default")(TParseTree("", false,[], s));
2700         }
2701         else
2702         {
2703             forgetMemo();
2704             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, DefaultValue, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Default"), "Default")(TParseTree("", false,[], s));
2705         }
2706     }
2707     static string Default(GetName g)
2708     {
2709         return "WebIDL.Default";
2710     }
2711 
2712     static TParseTree Enum(TParseTree p)
2713     {
2714         if(__ctfe)
2715         {
2716             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("enum"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, EnumValueList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Enum")(p);
2717         }
2718         else
2719         {
2720             if (auto m = tuple(`Enum`, p.end) in memo)
2721                 return *m;
2722             else
2723             {
2724                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("enum"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, EnumValueList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Enum"), "Enum")(p);
2725                 memo[tuple(`Enum`, p.end)] = result;
2726                 return result;
2727             }
2728         }
2729     }
2730 
2731     static TParseTree Enum(string s)
2732     {
2733         if(__ctfe)
2734         {
2735             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("enum"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, EnumValueList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Enum")(TParseTree("", false,[], s));
2736         }
2737         else
2738         {
2739             forgetMemo();
2740             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("enum"), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, EnumValueList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Enum"), "Enum")(TParseTree("", false,[], s));
2741         }
2742     }
2743     static string Enum(GetName g)
2744     {
2745         return "WebIDL.Enum";
2746     }
2747 
2748     static TParseTree EnumValueList(TParseTree p)
2749     {
2750         if(__ctfe)
2751         {
2752             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing)), Spacing))), "WebIDL.EnumValueList")(p);
2753         }
2754         else
2755         {
2756             if (auto m = tuple(`EnumValueList`, p.end) in memo)
2757                 return *m;
2758             else
2759             {
2760                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing)), Spacing))), "WebIDL.EnumValueList"), "EnumValueList")(p);
2761                 memo[tuple(`EnumValueList`, p.end)] = result;
2762                 return result;
2763             }
2764         }
2765     }
2766 
2767     static TParseTree EnumValueList(string s)
2768     {
2769         if(__ctfe)
2770         {
2771             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing)), Spacing))), "WebIDL.EnumValueList")(TParseTree("", false,[], s));
2772         }
2773         else
2774         {
2775             forgetMemo();
2776             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing)), Spacing))), "WebIDL.EnumValueList"), "EnumValueList")(TParseTree("", false,[], s));
2777         }
2778     }
2779     static string EnumValueList(GetName g)
2780     {
2781         return "WebIDL.EnumValueList";
2782     }
2783 
2784     static TParseTree CallbackRest(TParseTree p)
2785     {
2786         if(__ctfe)
2787         {
2788             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.CallbackRest")(p);
2789         }
2790         else
2791         {
2792             if (auto m = tuple(`CallbackRest`, p.end) in memo)
2793                 return *m;
2794             else
2795             {
2796                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.CallbackRest"), "CallbackRest")(p);
2797                 memo[tuple(`CallbackRest`, p.end)] = result;
2798                 return result;
2799             }
2800         }
2801     }
2802 
2803     static TParseTree CallbackRest(string s)
2804     {
2805         if(__ctfe)
2806         {
2807             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.CallbackRest")(TParseTree("", false,[], s));
2808         }
2809         else
2810         {
2811             forgetMemo();
2812             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.CallbackRest"), "CallbackRest")(TParseTree("", false,[], s));
2813         }
2814     }
2815     static string CallbackRest(GetName g)
2816     {
2817         return "WebIDL.CallbackRest";
2818     }
2819 
2820     static TParseTree Typedef(TParseTree p)
2821     {
2822         if(__ctfe)
2823         {
2824             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("typedef"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Typedef")(p);
2825         }
2826         else
2827         {
2828             if (auto m = tuple(`Typedef`, p.end) in memo)
2829                 return *m;
2830             else
2831             {
2832                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("typedef"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Typedef"), "Typedef")(p);
2833                 memo[tuple(`Typedef`, p.end)] = result;
2834                 return result;
2835             }
2836         }
2837     }
2838 
2839     static TParseTree Typedef(string s)
2840     {
2841         if(__ctfe)
2842         {
2843             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("typedef"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Typedef")(TParseTree("", false,[], s));
2844         }
2845         else
2846         {
2847             forgetMemo();
2848             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("typedef"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing)), "WebIDL.Typedef"), "Typedef")(TParseTree("", false,[], s));
2849         }
2850     }
2851     static string Typedef(GetName g)
2852     {
2853         return "WebIDL.Typedef";
2854     }
2855 
2856     static TParseTree Type(TParseTree p)
2857     {
2858         if(__ctfe)
2859         {
2860             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, SingleType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, UnionType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.Type")(p);
2861         }
2862         else
2863         {
2864             if (auto m = tuple(`Type`, p.end) in memo)
2865                 return *m;
2866             else
2867             {
2868                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, SingleType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, UnionType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.Type"), "Type")(p);
2869                 memo[tuple(`Type`, p.end)] = result;
2870                 return result;
2871             }
2872         }
2873     }
2874 
2875     static TParseTree Type(string s)
2876     {
2877         if(__ctfe)
2878         {
2879             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, SingleType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, UnionType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.Type")(TParseTree("", false,[], s));
2880         }
2881         else
2882         {
2883             forgetMemo();
2884             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, SingleType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, UnionType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.Type"), "Type")(TParseTree("", false,[], s));
2885         }
2886     }
2887     static string Type(GetName g)
2888     {
2889         return "WebIDL.Type";
2890     }
2891 
2892     static TParseTree TypeWithExtendedAttributes(TParseTree p)
2893     {
2894         if(__ctfe)
2895         {
2896             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, Type, Spacing)), "WebIDL.TypeWithExtendedAttributes")(p);
2897         }
2898         else
2899         {
2900             if (auto m = tuple(`TypeWithExtendedAttributes`, p.end) in memo)
2901                 return *m;
2902             else
2903             {
2904                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, Type, Spacing)), "WebIDL.TypeWithExtendedAttributes"), "TypeWithExtendedAttributes")(p);
2905                 memo[tuple(`TypeWithExtendedAttributes`, p.end)] = result;
2906                 return result;
2907             }
2908         }
2909     }
2910 
2911     static TParseTree TypeWithExtendedAttributes(string s)
2912     {
2913         if(__ctfe)
2914         {
2915             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, Type, Spacing)), "WebIDL.TypeWithExtendedAttributes")(TParseTree("", false,[], s));
2916         }
2917         else
2918         {
2919             forgetMemo();
2920             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, Type, Spacing)), "WebIDL.TypeWithExtendedAttributes"), "TypeWithExtendedAttributes")(TParseTree("", false,[], s));
2921         }
2922     }
2923     static string TypeWithExtendedAttributes(GetName g)
2924     {
2925         return "WebIDL.TypeWithExtendedAttributes";
2926     }
2927 
2928     static TParseTree SingleType(TParseTree p)
2929     {
2930         if(__ctfe)
2931         {
2932             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("any"), pegged.peg.negLookahead!(Identifier)), NonAnyType), "WebIDL.SingleType")(p);
2933         }
2934         else
2935         {
2936             if (auto m = tuple(`SingleType`, p.end) in memo)
2937                 return *m;
2938             else
2939             {
2940                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("any"), pegged.peg.negLookahead!(Identifier)), NonAnyType), "WebIDL.SingleType"), "SingleType")(p);
2941                 memo[tuple(`SingleType`, p.end)] = result;
2942                 return result;
2943             }
2944         }
2945     }
2946 
2947     static TParseTree SingleType(string s)
2948     {
2949         if(__ctfe)
2950         {
2951             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("any"), pegged.peg.negLookahead!(Identifier)), NonAnyType), "WebIDL.SingleType")(TParseTree("", false,[], s));
2952         }
2953         else
2954         {
2955             forgetMemo();
2956             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("any"), pegged.peg.negLookahead!(Identifier)), NonAnyType), "WebIDL.SingleType"), "SingleType")(TParseTree("", false,[], s));
2957         }
2958     }
2959     static string SingleType(GetName g)
2960     {
2961         return "WebIDL.SingleType";
2962     }
2963 
2964     static TParseTree UnionType(TParseTree p)
2965     {
2966         if(__ctfe)
2967         {
2968             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, UnionMemberType, Spacing), pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("or"), Spacing), pegged.peg.wrapAround!(Spacing, UnionMemberType, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.UnionType")(p);
2969         }
2970         else
2971         {
2972             if (auto m = tuple(`UnionType`, p.end) in memo)
2973                 return *m;
2974             else
2975             {
2976                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, UnionMemberType, Spacing), pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("or"), Spacing), pegged.peg.wrapAround!(Spacing, UnionMemberType, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.UnionType"), "UnionType")(p);
2977                 memo[tuple(`UnionType`, p.end)] = result;
2978                 return result;
2979             }
2980         }
2981     }
2982 
2983     static TParseTree UnionType(string s)
2984     {
2985         if(__ctfe)
2986         {
2987             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, UnionMemberType, Spacing), pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("or"), Spacing), pegged.peg.wrapAround!(Spacing, UnionMemberType, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.UnionType")(TParseTree("", false,[], s));
2988         }
2989         else
2990         {
2991             forgetMemo();
2992             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, UnionMemberType, Spacing), pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("or"), Spacing), pegged.peg.wrapAround!(Spacing, UnionMemberType, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.UnionType"), "UnionType")(TParseTree("", false,[], s));
2993         }
2994     }
2995     static string UnionType(GetName g)
2996     {
2997         return "WebIDL.UnionType";
2998     }
2999 
3000     static TParseTree UnionMemberType(TParseTree p)
3001     {
3002         if(__ctfe)
3003         {
3004             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, NonAnyType, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, UnionType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.UnionMemberType")(p);
3005         }
3006         else
3007         {
3008             if (auto m = tuple(`UnionMemberType`, p.end) in memo)
3009                 return *m;
3010             else
3011             {
3012                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, NonAnyType, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, UnionType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.UnionMemberType"), "UnionMemberType")(p);
3013                 memo[tuple(`UnionMemberType`, p.end)] = result;
3014                 return result;
3015             }
3016         }
3017     }
3018 
3019     static TParseTree UnionMemberType(string s)
3020     {
3021         if(__ctfe)
3022         {
3023             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, NonAnyType, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, UnionType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.UnionMemberType")(TParseTree("", false,[], s));
3024         }
3025         else
3026         {
3027             forgetMemo();
3028             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeList, Spacing), pegged.peg.wrapAround!(Spacing, NonAnyType, Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, UnionType, Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), Spacing)), "WebIDL.UnionMemberType"), "UnionMemberType")(TParseTree("", false,[], s));
3029         }
3030     }
3031     static string UnionMemberType(GetName g)
3032     {
3033         return "WebIDL.UnionMemberType";
3034     }
3035 
3036     static TParseTree SequenceType(TParseTree p)
3037     {
3038         if(__ctfe)
3039         {
3040             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("sequence"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), "WebIDL.SequenceType")(p);
3041         }
3042         else
3043         {
3044             if (auto m = tuple(`SequenceType`, p.end) in memo)
3045                 return *m;
3046             else
3047             {
3048                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("sequence"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), "WebIDL.SequenceType"), "SequenceType")(p);
3049                 memo[tuple(`SequenceType`, p.end)] = result;
3050                 return result;
3051             }
3052         }
3053     }
3054 
3055     static TParseTree SequenceType(string s)
3056     {
3057         if(__ctfe)
3058         {
3059             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("sequence"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), "WebIDL.SequenceType")(TParseTree("", false,[], s));
3060         }
3061         else
3062         {
3063             forgetMemo();
3064             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("sequence"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, Null, Spacing)), "WebIDL.SequenceType"), "SequenceType")(TParseTree("", false,[], s));
3065         }
3066     }
3067     static string SequenceType(GetName g)
3068     {
3069         return "WebIDL.SequenceType";
3070     }
3071 
3072     static TParseTree NonAnyType(TParseTree p)
3073     {
3074         if(__ctfe)
3075         {
3076             return         pegged.peg.defined!(pegged.peg.or!(SequenceType, pegged.peg.and!(pegged.peg.literal!("object"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("symbol"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("Error"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("FrozenArray"), pegged.peg.literal!("<"), TypeWithExtendedAttributes, pegged.peg.literal!(">"), Null), pegged.peg.and!(RecordType, Null), PromiseType, pegged.peg.and!(PrimitiveType, Null), pegged.peg.and!(StringType, Null), pegged.peg.and!(Identifier, Null), pegged.peg.and!(BufferRelatedType, Null)), "WebIDL.NonAnyType")(p);
3077         }
3078         else
3079         {
3080             if (auto m = tuple(`NonAnyType`, p.end) in memo)
3081                 return *m;
3082             else
3083             {
3084                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(SequenceType, pegged.peg.and!(pegged.peg.literal!("object"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("symbol"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("Error"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("FrozenArray"), pegged.peg.literal!("<"), TypeWithExtendedAttributes, pegged.peg.literal!(">"), Null), pegged.peg.and!(RecordType, Null), PromiseType, pegged.peg.and!(PrimitiveType, Null), pegged.peg.and!(StringType, Null), pegged.peg.and!(Identifier, Null), pegged.peg.and!(BufferRelatedType, Null)), "WebIDL.NonAnyType"), "NonAnyType")(p);
3085                 memo[tuple(`NonAnyType`, p.end)] = result;
3086                 return result;
3087             }
3088         }
3089     }
3090 
3091     static TParseTree NonAnyType(string s)
3092     {
3093         if(__ctfe)
3094         {
3095             return         pegged.peg.defined!(pegged.peg.or!(SequenceType, pegged.peg.and!(pegged.peg.literal!("object"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("symbol"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("Error"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("FrozenArray"), pegged.peg.literal!("<"), TypeWithExtendedAttributes, pegged.peg.literal!(">"), Null), pegged.peg.and!(RecordType, Null), PromiseType, pegged.peg.and!(PrimitiveType, Null), pegged.peg.and!(StringType, Null), pegged.peg.and!(Identifier, Null), pegged.peg.and!(BufferRelatedType, Null)), "WebIDL.NonAnyType")(TParseTree("", false,[], s));
3096         }
3097         else
3098         {
3099             forgetMemo();
3100             return hooked!(pegged.peg.defined!(pegged.peg.or!(SequenceType, pegged.peg.and!(pegged.peg.literal!("object"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("symbol"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("Error"), pegged.peg.and!(pegged.peg.negLookahead!(Identifier), Spacing, Null)), pegged.peg.and!(pegged.peg.literal!("FrozenArray"), pegged.peg.literal!("<"), TypeWithExtendedAttributes, pegged.peg.literal!(">"), Null), pegged.peg.and!(RecordType, Null), PromiseType, pegged.peg.and!(PrimitiveType, Null), pegged.peg.and!(StringType, Null), pegged.peg.and!(Identifier, Null), pegged.peg.and!(BufferRelatedType, Null)), "WebIDL.NonAnyType"), "NonAnyType")(TParseTree("", false,[], s));
3101         }
3102     }
3103     static string NonAnyType(GetName g)
3104     {
3105         return "WebIDL.NonAnyType";
3106     }
3107 
3108     static TParseTree PrimitiveType(TParseTree p)
3109     {
3110         if(__ctfe)
3111         {
3112             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, UnsignedIntegerType, Spacing), pegged.peg.wrapAround!(Spacing, UnrestrictedFloatType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("boolean"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("byte"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("octet"), Spacing)), "WebIDL.PrimitiveType")(p);
3113         }
3114         else
3115         {
3116             if (auto m = tuple(`PrimitiveType`, p.end) in memo)
3117                 return *m;
3118             else
3119             {
3120                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, UnsignedIntegerType, Spacing), pegged.peg.wrapAround!(Spacing, UnrestrictedFloatType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("boolean"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("byte"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("octet"), Spacing)), "WebIDL.PrimitiveType"), "PrimitiveType")(p);
3121                 memo[tuple(`PrimitiveType`, p.end)] = result;
3122                 return result;
3123             }
3124         }
3125     }
3126 
3127     static TParseTree PrimitiveType(string s)
3128     {
3129         if(__ctfe)
3130         {
3131             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, UnsignedIntegerType, Spacing), pegged.peg.wrapAround!(Spacing, UnrestrictedFloatType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("boolean"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("byte"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("octet"), Spacing)), "WebIDL.PrimitiveType")(TParseTree("", false,[], s));
3132         }
3133         else
3134         {
3135             forgetMemo();
3136             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, UnsignedIntegerType, Spacing), pegged.peg.wrapAround!(Spacing, UnrestrictedFloatType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("boolean"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("byte"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("octet"), Spacing)), "WebIDL.PrimitiveType"), "PrimitiveType")(TParseTree("", false,[], s));
3137         }
3138     }
3139     static string PrimitiveType(GetName g)
3140     {
3141         return "WebIDL.PrimitiveType";
3142     }
3143 
3144     static TParseTree UnrestrictedFloatType(TParseTree p)
3145     {
3146         if(__ctfe)
3147         {
3148             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unrestricted"), Spacing)), pegged.peg.wrapAround!(Spacing, FloatType, Spacing)), "WebIDL.UnrestrictedFloatType")(p);
3149         }
3150         else
3151         {
3152             if (auto m = tuple(`UnrestrictedFloatType`, p.end) in memo)
3153                 return *m;
3154             else
3155             {
3156                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unrestricted"), Spacing)), pegged.peg.wrapAround!(Spacing, FloatType, Spacing)), "WebIDL.UnrestrictedFloatType"), "UnrestrictedFloatType")(p);
3157                 memo[tuple(`UnrestrictedFloatType`, p.end)] = result;
3158                 return result;
3159             }
3160         }
3161     }
3162 
3163     static TParseTree UnrestrictedFloatType(string s)
3164     {
3165         if(__ctfe)
3166         {
3167             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unrestricted"), Spacing)), pegged.peg.wrapAround!(Spacing, FloatType, Spacing)), "WebIDL.UnrestrictedFloatType")(TParseTree("", false,[], s));
3168         }
3169         else
3170         {
3171             forgetMemo();
3172             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unrestricted"), Spacing)), pegged.peg.wrapAround!(Spacing, FloatType, Spacing)), "WebIDL.UnrestrictedFloatType"), "UnrestrictedFloatType")(TParseTree("", false,[], s));
3173         }
3174     }
3175     static string UnrestrictedFloatType(GetName g)
3176     {
3177         return "WebIDL.UnrestrictedFloatType";
3178     }
3179 
3180     static TParseTree FloatType(TParseTree p)
3181     {
3182         if(__ctfe)
3183         {
3184             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("float"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("double"), Spacing)), "WebIDL.FloatType")(p);
3185         }
3186         else
3187         {
3188             if (auto m = tuple(`FloatType`, p.end) in memo)
3189                 return *m;
3190             else
3191             {
3192                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("float"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("double"), Spacing)), "WebIDL.FloatType"), "FloatType")(p);
3193                 memo[tuple(`FloatType`, p.end)] = result;
3194                 return result;
3195             }
3196         }
3197     }
3198 
3199     static TParseTree FloatType(string s)
3200     {
3201         if(__ctfe)
3202         {
3203             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("float"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("double"), Spacing)), "WebIDL.FloatType")(TParseTree("", false,[], s));
3204         }
3205         else
3206         {
3207             forgetMemo();
3208             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("float"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("double"), Spacing)), "WebIDL.FloatType"), "FloatType")(TParseTree("", false,[], s));
3209         }
3210     }
3211     static string FloatType(GetName g)
3212     {
3213         return "WebIDL.FloatType";
3214     }
3215 
3216     static TParseTree UnsignedIntegerType(TParseTree p)
3217     {
3218         if(__ctfe)
3219         {
3220             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unsigned"), Spacing)), pegged.peg.wrapAround!(Spacing, IntegerType, Spacing)), "WebIDL.UnsignedIntegerType")(p);
3221         }
3222         else
3223         {
3224             if (auto m = tuple(`UnsignedIntegerType`, p.end) in memo)
3225                 return *m;
3226             else
3227             {
3228                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unsigned"), Spacing)), pegged.peg.wrapAround!(Spacing, IntegerType, Spacing)), "WebIDL.UnsignedIntegerType"), "UnsignedIntegerType")(p);
3229                 memo[tuple(`UnsignedIntegerType`, p.end)] = result;
3230                 return result;
3231             }
3232         }
3233     }
3234 
3235     static TParseTree UnsignedIntegerType(string s)
3236     {
3237         if(__ctfe)
3238         {
3239             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unsigned"), Spacing)), pegged.peg.wrapAround!(Spacing, IntegerType, Spacing)), "WebIDL.UnsignedIntegerType")(TParseTree("", false,[], s));
3240         }
3241         else
3242         {
3243             forgetMemo();
3244             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unsigned"), Spacing)), pegged.peg.wrapAround!(Spacing, IntegerType, Spacing)), "WebIDL.UnsignedIntegerType"), "UnsignedIntegerType")(TParseTree("", false,[], s));
3245         }
3246     }
3247     static string UnsignedIntegerType(GetName g)
3248     {
3249         return "WebIDL.UnsignedIntegerType";
3250     }
3251 
3252     static TParseTree IntegerType(TParseTree p)
3253     {
3254         if(__ctfe)
3255         {
3256             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("short"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing)), "WebIDL.IntegerType")(p);
3257         }
3258         else
3259         {
3260             if (auto m = tuple(`IntegerType`, p.end) in memo)
3261                 return *m;
3262             else
3263             {
3264                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("short"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing)), "WebIDL.IntegerType"), "IntegerType")(p);
3265                 memo[tuple(`IntegerType`, p.end)] = result;
3266                 return result;
3267             }
3268         }
3269     }
3270 
3271     static TParseTree IntegerType(string s)
3272     {
3273         if(__ctfe)
3274         {
3275             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("short"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing)), "WebIDL.IntegerType")(TParseTree("", false,[], s));
3276         }
3277         else
3278         {
3279             forgetMemo();
3280             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("short"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing)), "WebIDL.IntegerType"), "IntegerType")(TParseTree("", false,[], s));
3281         }
3282     }
3283     static string IntegerType(GetName g)
3284     {
3285         return "WebIDL.IntegerType";
3286     }
3287 
3288     static TParseTree StringType(TParseTree p)
3289     {
3290         if(__ctfe)
3291         {
3292             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("ByteString", "DOMString", "USVString", "CSSOMString"), pegged.peg.negLookahead!(Identifier)), "WebIDL.StringType")(p);
3293         }
3294         else
3295         {
3296             if (auto m = tuple(`StringType`, p.end) in memo)
3297                 return *m;
3298             else
3299             {
3300                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("ByteString", "DOMString", "USVString", "CSSOMString"), pegged.peg.negLookahead!(Identifier)), "WebIDL.StringType"), "StringType")(p);
3301                 memo[tuple(`StringType`, p.end)] = result;
3302                 return result;
3303             }
3304         }
3305     }
3306 
3307     static TParseTree StringType(string s)
3308     {
3309         if(__ctfe)
3310         {
3311             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("ByteString", "DOMString", "USVString", "CSSOMString"), pegged.peg.negLookahead!(Identifier)), "WebIDL.StringType")(TParseTree("", false,[], s));
3312         }
3313         else
3314         {
3315             forgetMemo();
3316             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("ByteString", "DOMString", "USVString", "CSSOMString"), pegged.peg.negLookahead!(Identifier)), "WebIDL.StringType"), "StringType")(TParseTree("", false,[], s));
3317         }
3318     }
3319     static string StringType(GetName g)
3320     {
3321         return "WebIDL.StringType";
3322     }
3323 
3324     static TParseTree PromiseType(TParseTree p)
3325     {
3326         if(__ctfe)
3327         {
3328             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Promise"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing)), "WebIDL.PromiseType")(p);
3329         }
3330         else
3331         {
3332             if (auto m = tuple(`PromiseType`, p.end) in memo)
3333                 return *m;
3334             else
3335             {
3336                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Promise"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing)), "WebIDL.PromiseType"), "PromiseType")(p);
3337                 memo[tuple(`PromiseType`, p.end)] = result;
3338                 return result;
3339             }
3340         }
3341     }
3342 
3343     static TParseTree PromiseType(string s)
3344     {
3345         if(__ctfe)
3346         {
3347             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Promise"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing)), "WebIDL.PromiseType")(TParseTree("", false,[], s));
3348         }
3349         else
3350         {
3351             forgetMemo();
3352             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Promise"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, ReturnType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing)), "WebIDL.PromiseType"), "PromiseType")(TParseTree("", false,[], s));
3353         }
3354     }
3355     static string PromiseType(GetName g)
3356     {
3357         return "WebIDL.PromiseType";
3358     }
3359 
3360     static TParseTree RecordType(TParseTree p)
3361     {
3362         if(__ctfe)
3363         {
3364             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("record"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, StringType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing)), "WebIDL.RecordType")(p);
3365         }
3366         else
3367         {
3368             if (auto m = tuple(`RecordType`, p.end) in memo)
3369                 return *m;
3370             else
3371             {
3372                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("record"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, StringType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing)), "WebIDL.RecordType"), "RecordType")(p);
3373                 memo[tuple(`RecordType`, p.end)] = result;
3374                 return result;
3375             }
3376         }
3377     }
3378 
3379     static TParseTree RecordType(string s)
3380     {
3381         if(__ctfe)
3382         {
3383             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("record"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, StringType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing)), "WebIDL.RecordType")(TParseTree("", false,[], s));
3384         }
3385         else
3386         {
3387             forgetMemo();
3388             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("record"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, StringType, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, TypeWithExtendedAttributes, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing)), "WebIDL.RecordType"), "RecordType")(TParseTree("", false,[], s));
3389         }
3390     }
3391     static string RecordType(GetName g)
3392     {
3393         return "WebIDL.RecordType";
3394     }
3395 
3396     static TParseTree Null(TParseTree p)
3397     {
3398         if(__ctfe)
3399         {
3400             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("?"), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Null")(p);
3401         }
3402         else
3403         {
3404             if (auto m = tuple(`Null`, p.end) in memo)
3405                 return *m;
3406             else
3407             {
3408                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("?"), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Null"), "Null")(p);
3409                 memo[tuple(`Null`, p.end)] = result;
3410                 return result;
3411             }
3412         }
3413     }
3414 
3415     static TParseTree Null(string s)
3416     {
3417         if(__ctfe)
3418         {
3419             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("?"), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Null")(TParseTree("", false,[], s));
3420         }
3421         else
3422         {
3423             forgetMemo();
3424             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("?"), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.Null"), "Null")(TParseTree("", false,[], s));
3425         }
3426     }
3427     static string Null(GetName g)
3428     {
3429         return "WebIDL.Null";
3430     }
3431 
3432     static TParseTree BufferRelatedType(TParseTree p)
3433     {
3434         if(__ctfe)
3435         {
3436             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("ArrayBuffer"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("DataView"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int8Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int16Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint8Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint16Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint8ClampedArray"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Float32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Float64Array"), Spacing)), "WebIDL.BufferRelatedType")(p);
3437         }
3438         else
3439         {
3440             if (auto m = tuple(`BufferRelatedType`, p.end) in memo)
3441                 return *m;
3442             else
3443             {
3444                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("ArrayBuffer"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("DataView"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int8Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int16Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint8Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint16Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint8ClampedArray"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Float32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Float64Array"), Spacing)), "WebIDL.BufferRelatedType"), "BufferRelatedType")(p);
3445                 memo[tuple(`BufferRelatedType`, p.end)] = result;
3446                 return result;
3447             }
3448         }
3449     }
3450 
3451     static TParseTree BufferRelatedType(string s)
3452     {
3453         if(__ctfe)
3454         {
3455             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("ArrayBuffer"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("DataView"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int8Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int16Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint8Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint16Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint8ClampedArray"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Float32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Float64Array"), Spacing)), "WebIDL.BufferRelatedType")(TParseTree("", false,[], s));
3456         }
3457         else
3458         {
3459             forgetMemo();
3460             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("ArrayBuffer"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("DataView"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int8Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int16Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Int32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint8Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint16Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Uint8ClampedArray"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Float32Array"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Float64Array"), Spacing)), "WebIDL.BufferRelatedType"), "BufferRelatedType")(TParseTree("", false,[], s));
3461         }
3462     }
3463     static string BufferRelatedType(GetName g)
3464     {
3465         return "WebIDL.BufferRelatedType";
3466     }
3467 
3468     static TParseTree ExtendedAttributeList(TParseTree p)
3469     {
3470         if(__ctfe)
3471         {
3472             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ExtendedAttributeList")(p);
3473         }
3474         else
3475         {
3476             if (auto m = tuple(`ExtendedAttributeList`, p.end) in memo)
3477                 return *m;
3478             else
3479             {
3480                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ExtendedAttributeList"), "ExtendedAttributeList")(p);
3481                 memo[tuple(`ExtendedAttributeList`, p.end)] = result;
3482                 return result;
3483             }
3484         }
3485     }
3486 
3487     static TParseTree ExtendedAttributeList(string s)
3488     {
3489         if(__ctfe)
3490         {
3491             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ExtendedAttributeList")(TParseTree("", false,[], s));
3492         }
3493         else
3494         {
3495             forgetMemo();
3496             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, eps, Spacing)), "WebIDL.ExtendedAttributeList"), "ExtendedAttributeList")(TParseTree("", false,[], s));
3497         }
3498     }
3499     static string ExtendedAttributeList(GetName g)
3500     {
3501         return "WebIDL.ExtendedAttributeList";
3502     }
3503 
3504     static TParseTree ExtendedAttributeOuter(TParseTree p)
3505     {
3506         if(__ctfe)
3507         {
3508             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing)), "WebIDL.ExtendedAttributeOuter")(p);
3509         }
3510         else
3511         {
3512             if (auto m = tuple(`ExtendedAttributeOuter`, p.end) in memo)
3513                 return *m;
3514             else
3515             {
3516                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing)), "WebIDL.ExtendedAttributeOuter"), "ExtendedAttributeOuter")(p);
3517                 memo[tuple(`ExtendedAttributeOuter`, p.end)] = result;
3518                 return result;
3519             }
3520         }
3521     }
3522 
3523     static TParseTree ExtendedAttributeOuter(string s)
3524     {
3525         if(__ctfe)
3526         {
3527             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing)), "WebIDL.ExtendedAttributeOuter")(TParseTree("", false,[], s));
3528         }
3529         else
3530         {
3531             forgetMemo();
3532             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttribute, Spacing)), "WebIDL.ExtendedAttributeOuter"), "ExtendedAttributeOuter")(TParseTree("", false,[], s));
3533         }
3534     }
3535     static string ExtendedAttributeOuter(GetName g)
3536     {
3537         return "WebIDL.ExtendedAttributeOuter";
3538     }
3539 
3540     static TParseTree ExtendedAttributeInner(TParseTree p)
3541     {
3542         if(__ctfe)
3543         {
3544             return         pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, OtherOrComma, Spacing)), Spacing)), "WebIDL.ExtendedAttributeInner")(p);
3545         }
3546         else
3547         {
3548             if (auto m = tuple(`ExtendedAttributeInner`, p.end) in memo)
3549                 return *m;
3550             else
3551             {
3552                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, OtherOrComma, Spacing)), Spacing)), "WebIDL.ExtendedAttributeInner"), "ExtendedAttributeInner")(p);
3553                 memo[tuple(`ExtendedAttributeInner`, p.end)] = result;
3554                 return result;
3555             }
3556         }
3557     }
3558 
3559     static TParseTree ExtendedAttributeInner(string s)
3560     {
3561         if(__ctfe)
3562         {
3563             return         pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, OtherOrComma, Spacing)), Spacing)), "WebIDL.ExtendedAttributeInner")(TParseTree("", false,[], s));
3564         }
3565         else
3566         {
3567             forgetMemo();
3568             return hooked!(pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("["), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("]"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeInner, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), Spacing), pegged.peg.wrapAround!(Spacing, OtherOrComma, Spacing)), Spacing)), "WebIDL.ExtendedAttributeInner"), "ExtendedAttributeInner")(TParseTree("", false,[], s));
3569         }
3570     }
3571     static string ExtendedAttributeInner(GetName g)
3572     {
3573         return "WebIDL.ExtendedAttributeInner";
3574     }
3575 
3576     static TParseTree ExtendedAttribute(TParseTree p)
3577     {
3578         if(__ctfe)
3579         {
3580             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeArgList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeNamedArgList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeIdent, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeIdentList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeNoArgs, Spacing)), "WebIDL.ExtendedAttribute")(p);
3581         }
3582         else
3583         {
3584             if (auto m = tuple(`ExtendedAttribute`, p.end) in memo)
3585                 return *m;
3586             else
3587             {
3588                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeArgList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeNamedArgList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeIdent, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeIdentList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeNoArgs, Spacing)), "WebIDL.ExtendedAttribute"), "ExtendedAttribute")(p);
3589                 memo[tuple(`ExtendedAttribute`, p.end)] = result;
3590                 return result;
3591             }
3592         }
3593     }
3594 
3595     static TParseTree ExtendedAttribute(string s)
3596     {
3597         if(__ctfe)
3598         {
3599             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeArgList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeNamedArgList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeIdent, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeIdentList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeNoArgs, Spacing)), "WebIDL.ExtendedAttribute")(TParseTree("", false,[], s));
3600         }
3601         else
3602         {
3603             forgetMemo();
3604             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, ExtendedAttributeArgList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeNamedArgList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeIdent, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeIdentList, Spacing), pegged.peg.wrapAround!(Spacing, ExtendedAttributeNoArgs, Spacing)), "WebIDL.ExtendedAttribute"), "ExtendedAttribute")(TParseTree("", false,[], s));
3605         }
3606     }
3607     static string ExtendedAttribute(GetName g)
3608     {
3609         return "WebIDL.ExtendedAttribute";
3610     }
3611 
3612     static TParseTree Other(TParseTree p)
3613     {
3614         if(__ctfe)
3615         {
3616             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("ByteString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("DOMString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("FrozenArray"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("NaN"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("USVString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("any"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("boolean"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("byte"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("double"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("false"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("float"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("null"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("object"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("octet"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("or"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("optional"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("sequence"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("short"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("true"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unsigned"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("void"), Spacing), pegged.peg.wrapAround!(Spacing, Integer, Spacing), pegged.peg.wrapAround!(Spacing, Float, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.wrapAround!(Spacing, Other2, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("."), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("..."), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(":"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("?"), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, BufferRelatedType, Spacing)), "WebIDL.Other")(p);
3617         }
3618         else
3619         {
3620             if (auto m = tuple(`Other`, p.end) in memo)
3621                 return *m;
3622             else
3623             {
3624                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("ByteString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("DOMString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("FrozenArray"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("NaN"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("USVString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("any"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("boolean"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("byte"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("double"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("false"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("float"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("null"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("object"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("octet"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("or"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("optional"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("sequence"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("short"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("true"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unsigned"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("void"), Spacing), pegged.peg.wrapAround!(Spacing, Integer, Spacing), pegged.peg.wrapAround!(Spacing, Float, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.wrapAround!(Spacing, Other2, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("."), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("..."), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(":"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("?"), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, BufferRelatedType, Spacing)), "WebIDL.Other"), "Other")(p);
3625                 memo[tuple(`Other`, p.end)] = result;
3626                 return result;
3627             }
3628         }
3629     }
3630 
3631     static TParseTree Other(string s)
3632     {
3633         if(__ctfe)
3634         {
3635             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("ByteString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("DOMString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("FrozenArray"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("NaN"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("USVString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("any"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("boolean"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("byte"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("double"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("false"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("float"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("null"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("object"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("octet"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("or"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("optional"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("sequence"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("short"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("true"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unsigned"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("void"), Spacing), pegged.peg.wrapAround!(Spacing, Integer, Spacing), pegged.peg.wrapAround!(Spacing, Float, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.wrapAround!(Spacing, Other2, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("."), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("..."), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(":"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("?"), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, BufferRelatedType, Spacing)), "WebIDL.Other")(TParseTree("", false,[], s));
3636         }
3637         else
3638         {
3639             forgetMemo();
3640             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("ByteString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("DOMString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("FrozenArray"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("NaN"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("USVString"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("any"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("boolean"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("byte"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("double"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("false"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("float"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("long"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("null"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("object"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("octet"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("or"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("optional"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("sequence"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("short"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("true"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("unsigned"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("void"), Spacing), pegged.peg.wrapAround!(Spacing, Integer, Spacing), pegged.peg.wrapAround!(Spacing, Float, Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, String, Spacing), pegged.peg.wrapAround!(Spacing, Other2, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-Infinity"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("."), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("..."), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(":"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(";"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(">"), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("?"), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentNameKeyword, Spacing), pegged.peg.wrapAround!(Spacing, BufferRelatedType, Spacing)), "WebIDL.Other"), "Other")(TParseTree("", false,[], s));
3641         }
3642     }
3643     static string Other(GetName g)
3644     {
3645         return "WebIDL.Other";
3646     }
3647 
3648     static TParseTree OtherOrComma(TParseTree p)
3649     {
3650         if(__ctfe)
3651         {
3652             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Other, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing)), "WebIDL.OtherOrComma")(p);
3653         }
3654         else
3655         {
3656             if (auto m = tuple(`OtherOrComma`, p.end) in memo)
3657                 return *m;
3658             else
3659             {
3660                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Other, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing)), "WebIDL.OtherOrComma"), "OtherOrComma")(p);
3661                 memo[tuple(`OtherOrComma`, p.end)] = result;
3662                 return result;
3663             }
3664         }
3665     }
3666 
3667     static TParseTree OtherOrComma(string s)
3668     {
3669         if(__ctfe)
3670         {
3671             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Other, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing)), "WebIDL.OtherOrComma")(TParseTree("", false,[], s));
3672         }
3673         else
3674         {
3675             forgetMemo();
3676             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Other, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing)), "WebIDL.OtherOrComma"), "OtherOrComma")(TParseTree("", false,[], s));
3677         }
3678     }
3679     static string OtherOrComma(GetName g)
3680     {
3681         return "WebIDL.OtherOrComma";
3682     }
3683 
3684     static TParseTree IdentifierList(TParseTree p)
3685     {
3686         if(__ctfe)
3687         {
3688             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), Spacing))), "WebIDL.IdentifierList")(p);
3689         }
3690         else
3691         {
3692             if (auto m = tuple(`IdentifierList`, p.end) in memo)
3693                 return *m;
3694             else
3695             {
3696                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), Spacing))), "WebIDL.IdentifierList"), "IdentifierList")(p);
3697                 memo[tuple(`IdentifierList`, p.end)] = result;
3698                 return result;
3699             }
3700         }
3701     }
3702 
3703     static TParseTree IdentifierList(string s)
3704     {
3705         if(__ctfe)
3706         {
3707             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), Spacing))), "WebIDL.IdentifierList")(TParseTree("", false,[], s));
3708         }
3709         else
3710         {
3711             forgetMemo();
3712             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(","), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), Spacing))), "WebIDL.IdentifierList"), "IdentifierList")(TParseTree("", false,[], s));
3713         }
3714     }
3715     static string IdentifierList(GetName g)
3716     {
3717         return "WebIDL.IdentifierList";
3718     }
3719 
3720     static TParseTree Integer(TParseTree p)
3721     {
3722         if(__ctfe)
3723         {
3724             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("-")), pegged.peg.and!(pegged.peg.charRange!('1', '9'), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9')))), pegged.peg.and!(pegged.peg.literal!("0"), pegged.peg.or!(pegged.peg.literal!("X"), pegged.peg.literal!("x")), pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'F'), pegged.peg.charRange!('a', 'f')))), pegged.peg.and!(pegged.peg.literal!("0"), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '7'))))), "WebIDL.Integer")(p);
3725         }
3726         else
3727         {
3728             if (auto m = tuple(`Integer`, p.end) in memo)
3729                 return *m;
3730             else
3731             {
3732                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("-")), pegged.peg.and!(pegged.peg.charRange!('1', '9'), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9')))), pegged.peg.and!(pegged.peg.literal!("0"), pegged.peg.or!(pegged.peg.literal!("X"), pegged.peg.literal!("x")), pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'F'), pegged.peg.charRange!('a', 'f')))), pegged.peg.and!(pegged.peg.literal!("0"), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '7'))))), "WebIDL.Integer"), "Integer")(p);
3733                 memo[tuple(`Integer`, p.end)] = result;
3734                 return result;
3735             }
3736         }
3737     }
3738 
3739     static TParseTree Integer(string s)
3740     {
3741         if(__ctfe)
3742         {
3743             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("-")), pegged.peg.and!(pegged.peg.charRange!('1', '9'), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9')))), pegged.peg.and!(pegged.peg.literal!("0"), pegged.peg.or!(pegged.peg.literal!("X"), pegged.peg.literal!("x")), pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'F'), pegged.peg.charRange!('a', 'f')))), pegged.peg.and!(pegged.peg.literal!("0"), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '7'))))), "WebIDL.Integer")(TParseTree("", false,[], s));
3744         }
3745         else
3746         {
3747             forgetMemo();
3748             return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("-")), pegged.peg.and!(pegged.peg.charRange!('1', '9'), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9')))), pegged.peg.and!(pegged.peg.literal!("0"), pegged.peg.or!(pegged.peg.literal!("X"), pegged.peg.literal!("x")), pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'F'), pegged.peg.charRange!('a', 'f')))), pegged.peg.and!(pegged.peg.literal!("0"), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '7'))))), "WebIDL.Integer"), "Integer")(TParseTree("", false,[], s));
3749         }
3750     }
3751     static string Integer(GetName g)
3752     {
3753         return "WebIDL.Integer";
3754     }
3755 
3756     static TParseTree Float(TParseTree p)
3757     {
3758         if(__ctfe)
3759         {
3760             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("-")), pegged.peg.and!(pegged.peg.or!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.literal!("."), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9'))), pegged.peg.and!(pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.literal!("."), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')))), pegged.peg.option!(pegged.peg.and!(pegged.peg.keywords!("E", "e"), pegged.peg.option!(pegged.peg.keywords!("+", "-")), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')))))), pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.keywords!("E", "e"), pegged.peg.option!(pegged.peg.keywords!("+", "-")), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))))), "WebIDL.Float")(p);
3761         }
3762         else
3763         {
3764             if (auto m = tuple(`Float`, p.end) in memo)
3765                 return *m;
3766             else
3767             {
3768                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("-")), pegged.peg.and!(pegged.peg.or!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.literal!("."), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9'))), pegged.peg.and!(pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.literal!("."), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')))), pegged.peg.option!(pegged.peg.and!(pegged.peg.keywords!("E", "e"), pegged.peg.option!(pegged.peg.keywords!("+", "-")), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')))))), pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.keywords!("E", "e"), pegged.peg.option!(pegged.peg.keywords!("+", "-")), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))))), "WebIDL.Float"), "Float")(p);
3769                 memo[tuple(`Float`, p.end)] = result;
3770                 return result;
3771             }
3772         }
3773     }
3774 
3775     static TParseTree Float(string s)
3776     {
3777         if(__ctfe)
3778         {
3779             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("-")), pegged.peg.and!(pegged.peg.or!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.literal!("."), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9'))), pegged.peg.and!(pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.literal!("."), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')))), pegged.peg.option!(pegged.peg.and!(pegged.peg.keywords!("E", "e"), pegged.peg.option!(pegged.peg.keywords!("+", "-")), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')))))), pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.keywords!("E", "e"), pegged.peg.option!(pegged.peg.keywords!("+", "-")), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))))), "WebIDL.Float")(TParseTree("", false,[], s));
3780         }
3781         else
3782         {
3783             forgetMemo();
3784             return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("-")), pegged.peg.and!(pegged.peg.or!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.literal!("."), pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9'))), pegged.peg.and!(pegged.peg.zeroOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.literal!("."), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')))), pegged.peg.option!(pegged.peg.and!(pegged.peg.keywords!("E", "e"), pegged.peg.option!(pegged.peg.keywords!("+", "-")), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')))))), pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9')), pegged.peg.keywords!("E", "e"), pegged.peg.option!(pegged.peg.keywords!("+", "-")), pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))))), "WebIDL.Float"), "Float")(TParseTree("", false,[], s));
3785         }
3786     }
3787     static string Float(GetName g)
3788     {
3789         return "WebIDL.Float";
3790     }
3791 
3792     static TParseTree Identifier(TParseTree p)
3793     {
3794         if(__ctfe)
3795         {
3796             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("_")), pegged.peg.or!(pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z')), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_"), pegged.peg.charRange!('a', 'z'), pegged.peg.literal!("-"))))), "WebIDL.Identifier")(p);
3797         }
3798         else
3799         {
3800             if (auto m = tuple(`Identifier`, p.end) in memo)
3801                 return *m;
3802             else
3803             {
3804                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("_")), pegged.peg.or!(pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z')), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_"), pegged.peg.charRange!('a', 'z'), pegged.peg.literal!("-"))))), "WebIDL.Identifier"), "Identifier")(p);
3805                 memo[tuple(`Identifier`, p.end)] = result;
3806                 return result;
3807             }
3808         }
3809     }
3810 
3811     static TParseTree Identifier(string s)
3812     {
3813         if(__ctfe)
3814         {
3815             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("_")), pegged.peg.or!(pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z')), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_"), pegged.peg.charRange!('a', 'z'), pegged.peg.literal!("-"))))), "WebIDL.Identifier")(TParseTree("", false,[], s));
3816         }
3817         else
3818         {
3819             forgetMemo();
3820             return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("_")), pegged.peg.or!(pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z')), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_"), pegged.peg.charRange!('a', 'z'), pegged.peg.literal!("-"))))), "WebIDL.Identifier"), "Identifier")(TParseTree("", false,[], s));
3821         }
3822     }
3823     static string Identifier(GetName g)
3824     {
3825         return "WebIDL.Identifier";
3826     }
3827 
3828     static TParseTree String(TParseTree p)
3829     {
3830         if(__ctfe)
3831         {
3832             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.and!(doublequote, pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(doublequote), pegged.peg.any)), doublequote)), "WebIDL.String")(p);
3833         }
3834         else
3835         {
3836             if (auto m = tuple(`String`, p.end) in memo)
3837                 return *m;
3838             else
3839             {
3840                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.and!(doublequote, pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(doublequote), pegged.peg.any)), doublequote)), "WebIDL.String"), "String")(p);
3841                 memo[tuple(`String`, p.end)] = result;
3842                 return result;
3843             }
3844         }
3845     }
3846 
3847     static TParseTree String(string s)
3848     {
3849         if(__ctfe)
3850         {
3851             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.and!(doublequote, pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(doublequote), pegged.peg.any)), doublequote)), "WebIDL.String")(TParseTree("", false,[], s));
3852         }
3853         else
3854         {
3855             forgetMemo();
3856             return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.and!(doublequote, pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(doublequote), pegged.peg.any)), doublequote)), "WebIDL.String"), "String")(TParseTree("", false,[], s));
3857         }
3858     }
3859     static string String(GetName g)
3860     {
3861         return "WebIDL.String";
3862     }
3863 
3864     static TParseTree Whitespace(TParseTree p)
3865     {
3866         if(__ctfe)
3867         {
3868             return         pegged.peg.defined!(pegged.peg.discard!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"), EndOfLine))), "WebIDL.Whitespace")(p);
3869         }
3870         else
3871         {
3872             if (auto m = tuple(`Whitespace`, p.end) in memo)
3873                 return *m;
3874             else
3875             {
3876                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.discard!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"), EndOfLine))), "WebIDL.Whitespace"), "Whitespace")(p);
3877                 memo[tuple(`Whitespace`, p.end)] = result;
3878                 return result;
3879             }
3880         }
3881     }
3882 
3883     static TParseTree Whitespace(string s)
3884     {
3885         if(__ctfe)
3886         {
3887             return         pegged.peg.defined!(pegged.peg.discard!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"), EndOfLine))), "WebIDL.Whitespace")(TParseTree("", false,[], s));
3888         }
3889         else
3890         {
3891             forgetMemo();
3892             return hooked!(pegged.peg.defined!(pegged.peg.discard!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"), EndOfLine))), "WebIDL.Whitespace"), "Whitespace")(TParseTree("", false,[], s));
3893         }
3894     }
3895     static string Whitespace(GetName g)
3896     {
3897         return "WebIDL.Whitespace";
3898     }
3899 
3900     static TParseTree EndOfLine(TParseTree p)
3901     {
3902         if(__ctfe)
3903         {
3904             return         pegged.peg.defined!(pegged.peg.discard!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("\r"), pegged.peg.literal!("\n")), pegged.peg.literal!("\n"))), "WebIDL.EndOfLine")(p);
3905         }
3906         else
3907         {
3908             if (auto m = tuple(`EndOfLine`, p.end) in memo)
3909                 return *m;
3910             else
3911             {
3912                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.discard!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("\r"), pegged.peg.literal!("\n")), pegged.peg.literal!("\n"))), "WebIDL.EndOfLine"), "EndOfLine")(p);
3913                 memo[tuple(`EndOfLine`, p.end)] = result;
3914                 return result;
3915             }
3916         }
3917     }
3918 
3919     static TParseTree EndOfLine(string s)
3920     {
3921         if(__ctfe)
3922         {
3923             return         pegged.peg.defined!(pegged.peg.discard!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("\r"), pegged.peg.literal!("\n")), pegged.peg.literal!("\n"))), "WebIDL.EndOfLine")(TParseTree("", false,[], s));
3924         }
3925         else
3926         {
3927             forgetMemo();
3928             return hooked!(pegged.peg.defined!(pegged.peg.discard!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("\r"), pegged.peg.literal!("\n")), pegged.peg.literal!("\n"))), "WebIDL.EndOfLine"), "EndOfLine")(TParseTree("", false,[], s));
3929         }
3930     }
3931     static string EndOfLine(GetName g)
3932     {
3933         return "WebIDL.EndOfLine";
3934     }
3935 
3936     static TParseTree Comment(TParseTree p)
3937     {
3938         if(__ctfe)
3939         {
3940             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.and!(pegged.peg.option!(Whitespace), pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("//"), pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(EndOfLine), pegged.peg.any))), pegged.peg.and!(pegged.peg.literal!("/*"), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("*/")), pegged.peg.any), EndOfLine)), pegged.peg.literal!("*/"))), pegged.peg.option!(Whitespace)))), "WebIDL.Comment")(p);
3941         }
3942         else
3943         {
3944             if (auto m = tuple(`Comment`, p.end) in memo)
3945                 return *m;
3946             else
3947             {
3948                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.and!(pegged.peg.option!(Whitespace), pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("//"), pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(EndOfLine), pegged.peg.any))), pegged.peg.and!(pegged.peg.literal!("/*"), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("*/")), pegged.peg.any), EndOfLine)), pegged.peg.literal!("*/"))), pegged.peg.option!(Whitespace)))), "WebIDL.Comment"), "Comment")(p);
3949                 memo[tuple(`Comment`, p.end)] = result;
3950                 return result;
3951             }
3952         }
3953     }
3954 
3955     static TParseTree Comment(string s)
3956     {
3957         if(__ctfe)
3958         {
3959             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.and!(pegged.peg.option!(Whitespace), pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("//"), pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(EndOfLine), pegged.peg.any))), pegged.peg.and!(pegged.peg.literal!("/*"), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("*/")), pegged.peg.any), EndOfLine)), pegged.peg.literal!("*/"))), pegged.peg.option!(Whitespace)))), "WebIDL.Comment")(TParseTree("", false,[], s));
3960         }
3961         else
3962         {
3963             forgetMemo();
3964             return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.and!(pegged.peg.option!(Whitespace), pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("//"), pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(EndOfLine), pegged.peg.any))), pegged.peg.and!(pegged.peg.literal!("/*"), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("*/")), pegged.peg.any), EndOfLine)), pegged.peg.literal!("*/"))), pegged.peg.option!(Whitespace)))), "WebIDL.Comment"), "Comment")(TParseTree("", false,[], s));
3965         }
3966     }
3967     static string Comment(GetName g)
3968     {
3969         return "WebIDL.Comment";
3970     }
3971 
3972     static TParseTree Spacing(TParseTree p)
3973     {
3974         if(__ctfe)
3975         {
3976             return         pegged.peg.defined!(pegged.peg.discard!(pegged.peg.zeroOrMore!(pegged.peg.or!(Whitespace, Comment))), "WebIDL.Spacing")(p);
3977         }
3978         else
3979         {
3980             if (auto m = tuple(`Spacing`, p.end) in memo)
3981                 return *m;
3982             else
3983             {
3984                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.discard!(pegged.peg.zeroOrMore!(pegged.peg.or!(Whitespace, Comment))), "WebIDL.Spacing"), "Spacing")(p);
3985                 memo[tuple(`Spacing`, p.end)] = result;
3986                 return result;
3987             }
3988         }
3989     }
3990 
3991     static TParseTree Spacing(string s)
3992     {
3993         if(__ctfe)
3994         {
3995             return         pegged.peg.defined!(pegged.peg.discard!(pegged.peg.zeroOrMore!(pegged.peg.or!(Whitespace, Comment))), "WebIDL.Spacing")(TParseTree("", false,[], s));
3996         }
3997         else
3998         {
3999             forgetMemo();
4000             return hooked!(pegged.peg.defined!(pegged.peg.discard!(pegged.peg.zeroOrMore!(pegged.peg.or!(Whitespace, Comment))), "WebIDL.Spacing"), "Spacing")(TParseTree("", false,[], s));
4001         }
4002     }
4003     static string Spacing(GetName g)
4004     {
4005         return "WebIDL.Spacing";
4006     }
4007 
4008     static TParseTree Other2(TParseTree p)
4009     {
4010         if(__ctfe)
4011         {
4012             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.literal!("^"), pegged.peg.literal!("\t"), pegged.peg.literal!("\n"), pegged.peg.literal!("\r"), pegged.peg.literal!(" "), pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z'))), "WebIDL.Other2")(p);
4013         }
4014         else
4015         {
4016             if (auto m = tuple(`Other2`, p.end) in memo)
4017                 return *m;
4018             else
4019             {
4020                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.literal!("^"), pegged.peg.literal!("\t"), pegged.peg.literal!("\n"), pegged.peg.literal!("\r"), pegged.peg.literal!(" "), pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z'))), "WebIDL.Other2"), "Other2")(p);
4021                 memo[tuple(`Other2`, p.end)] = result;
4022                 return result;
4023             }
4024         }
4025     }
4026 
4027     static TParseTree Other2(string s)
4028     {
4029         if(__ctfe)
4030         {
4031             return         pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.literal!("^"), pegged.peg.literal!("\t"), pegged.peg.literal!("\n"), pegged.peg.literal!("\r"), pegged.peg.literal!(" "), pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z'))), "WebIDL.Other2")(TParseTree("", false,[], s));
4032         }
4033         else
4034         {
4035             forgetMemo();
4036             return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.literal!("^"), pegged.peg.literal!("\t"), pegged.peg.literal!("\n"), pegged.peg.literal!("\r"), pegged.peg.literal!(" "), pegged.peg.charRange!('0', '9'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z'))), "WebIDL.Other2"), "Other2")(TParseTree("", false,[], s));
4037         }
4038     }
4039     static string Other2(GetName g)
4040     {
4041         return "WebIDL.Other2";
4042     }
4043 
4044     static TParseTree ArgumentNameKeyword(TParseTree p)
4045     {
4046         if(__ctfe)
4047         {
4048             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", "includes", "inherit", "interface", "iterable", "maplike", "namespace", "partial", "required", "setlike", "setter", "static", "stringifier", "typedef", "unrestricted"), pegged.peg.negLookahead!(Identifier)), "WebIDL.ArgumentNameKeyword")(p);
4049         }
4050         else
4051         {
4052             if (auto m = tuple(`ArgumentNameKeyword`, p.end) in memo)
4053                 return *m;
4054             else
4055             {
4056                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", "includes", "inherit", "interface", "iterable", "maplike", "namespace", "partial", "required", "setlike", "setter", "static", "stringifier", "typedef", "unrestricted"), pegged.peg.negLookahead!(Identifier)), "WebIDL.ArgumentNameKeyword"), "ArgumentNameKeyword")(p);
4057                 memo[tuple(`ArgumentNameKeyword`, p.end)] = result;
4058                 return result;
4059             }
4060         }
4061     }
4062 
4063     static TParseTree ArgumentNameKeyword(string s)
4064     {
4065         if(__ctfe)
4066         {
4067             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", "includes", "inherit", "interface", "iterable", "maplike", "namespace", "partial", "required", "setlike", "setter", "static", "stringifier", "typedef", "unrestricted"), pegged.peg.negLookahead!(Identifier)), "WebIDL.ArgumentNameKeyword")(TParseTree("", false,[], s));
4068         }
4069         else
4070         {
4071             forgetMemo();
4072             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", "includes", "inherit", "interface", "iterable", "maplike", "namespace", "partial", "required", "setlike", "setter", "static", "stringifier", "typedef", "unrestricted"), pegged.peg.negLookahead!(Identifier)), "WebIDL.ArgumentNameKeyword"), "ArgumentNameKeyword")(TParseTree("", false,[], s));
4073         }
4074     }
4075     static string ArgumentNameKeyword(GetName g)
4076     {
4077         return "WebIDL.ArgumentNameKeyword";
4078     }
4079 
4080     static TParseTree ExtendedAttributeNoArgs(TParseTree p)
4081     {
4082         if(__ctfe)
4083         {
4084             return         pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), "WebIDL.ExtendedAttributeNoArgs")(p);
4085         }
4086         else
4087         {
4088             if (auto m = tuple(`ExtendedAttributeNoArgs`, p.end) in memo)
4089                 return *m;
4090             else
4091             {
4092                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), "WebIDL.ExtendedAttributeNoArgs"), "ExtendedAttributeNoArgs")(p);
4093                 memo[tuple(`ExtendedAttributeNoArgs`, p.end)] = result;
4094                 return result;
4095             }
4096         }
4097     }
4098 
4099     static TParseTree ExtendedAttributeNoArgs(string s)
4100     {
4101         if(__ctfe)
4102         {
4103             return         pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), "WebIDL.ExtendedAttributeNoArgs")(TParseTree("", false,[], s));
4104         }
4105         else
4106         {
4107             forgetMemo();
4108             return hooked!(pegged.peg.defined!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), "WebIDL.ExtendedAttributeNoArgs"), "ExtendedAttributeNoArgs")(TParseTree("", false,[], s));
4109         }
4110     }
4111     static string ExtendedAttributeNoArgs(GetName g)
4112     {
4113         return "WebIDL.ExtendedAttributeNoArgs";
4114     }
4115 
4116     static TParseTree ExtendedAttributeArgList(TParseTree p)
4117     {
4118         if(__ctfe)
4119         {
4120             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeArgList")(p);
4121         }
4122         else
4123         {
4124             if (auto m = tuple(`ExtendedAttributeArgList`, p.end) in memo)
4125                 return *m;
4126             else
4127             {
4128                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeArgList"), "ExtendedAttributeArgList")(p);
4129                 memo[tuple(`ExtendedAttributeArgList`, p.end)] = result;
4130                 return result;
4131             }
4132         }
4133     }
4134 
4135     static TParseTree ExtendedAttributeArgList(string s)
4136     {
4137         if(__ctfe)
4138         {
4139             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeArgList")(TParseTree("", false,[], s));
4140         }
4141         else
4142         {
4143             forgetMemo();
4144             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeArgList"), "ExtendedAttributeArgList")(TParseTree("", false,[], s));
4145         }
4146     }
4147     static string ExtendedAttributeArgList(GetName g)
4148     {
4149         return "WebIDL.ExtendedAttributeArgList";
4150     }
4151 
4152     static TParseTree ExtendedAttributeIdent(TParseTree p)
4153     {
4154         if(__ctfe)
4155         {
4156             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.ExtendedAttributeIdent")(p);
4157         }
4158         else
4159         {
4160             if (auto m = tuple(`ExtendedAttributeIdent`, p.end) in memo)
4161                 return *m;
4162             else
4163             {
4164                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.ExtendedAttributeIdent"), "ExtendedAttributeIdent")(p);
4165                 memo[tuple(`ExtendedAttributeIdent`, p.end)] = result;
4166                 return result;
4167             }
4168         }
4169     }
4170 
4171     static TParseTree ExtendedAttributeIdent(string s)
4172     {
4173         if(__ctfe)
4174         {
4175             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.ExtendedAttributeIdent")(TParseTree("", false,[], s));
4176         }
4177         else
4178         {
4179             forgetMemo();
4180             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing)), "WebIDL.ExtendedAttributeIdent"), "ExtendedAttributeIdent")(TParseTree("", false,[], s));
4181         }
4182     }
4183     static string ExtendedAttributeIdent(GetName g)
4184     {
4185         return "WebIDL.ExtendedAttributeIdent";
4186     }
4187 
4188     static TParseTree ExtendedAttributeIdentList(TParseTree p)
4189     {
4190         if(__ctfe)
4191         {
4192             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, IdentifierList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeIdentList")(p);
4193         }
4194         else
4195         {
4196             if (auto m = tuple(`ExtendedAttributeIdentList`, p.end) in memo)
4197                 return *m;
4198             else
4199             {
4200                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, IdentifierList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeIdentList"), "ExtendedAttributeIdentList")(p);
4201                 memo[tuple(`ExtendedAttributeIdentList`, p.end)] = result;
4202                 return result;
4203             }
4204         }
4205     }
4206 
4207     static TParseTree ExtendedAttributeIdentList(string s)
4208     {
4209         if(__ctfe)
4210         {
4211             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, IdentifierList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeIdentList")(TParseTree("", false,[], s));
4212         }
4213         else
4214         {
4215             forgetMemo();
4216             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, IdentifierList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeIdentList"), "ExtendedAttributeIdentList")(TParseTree("", false,[], s));
4217         }
4218     }
4219     static string ExtendedAttributeIdentList(GetName g)
4220     {
4221         return "WebIDL.ExtendedAttributeIdentList";
4222     }
4223 
4224     static TParseTree ExtendedAttributeNamedArgList(TParseTree p)
4225     {
4226         if(__ctfe)
4227         {
4228             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeNamedArgList")(p);
4229         }
4230         else
4231         {
4232             if (auto m = tuple(`ExtendedAttributeNamedArgList`, p.end) in memo)
4233                 return *m;
4234             else
4235             {
4236                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeNamedArgList"), "ExtendedAttributeNamedArgList")(p);
4237                 memo[tuple(`ExtendedAttributeNamedArgList`, p.end)] = result;
4238                 return result;
4239             }
4240         }
4241     }
4242 
4243     static TParseTree ExtendedAttributeNamedArgList(string s)
4244     {
4245         if(__ctfe)
4246         {
4247             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeNamedArgList")(TParseTree("", false,[], s));
4248         }
4249         else
4250         {
4251             forgetMemo();
4252             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("="), Spacing), pegged.peg.wrapAround!(Spacing, Identifier, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("("), Spacing), pegged.peg.wrapAround!(Spacing, ArgumentList, Spacing), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!(")"), Spacing)), "WebIDL.ExtendedAttributeNamedArgList"), "ExtendedAttributeNamedArgList")(TParseTree("", false,[], s));
4253         }
4254     }
4255     static string ExtendedAttributeNamedArgList(GetName g)
4256     {
4257         return "WebIDL.ExtendedAttributeNamedArgList";
4258     }
4259 
4260     static TParseTree opCall(TParseTree p)
4261     {
4262         TParseTree result = decimateTree(Definitions(p));
4263         result.children = [result];
4264         result.name = "WebIDL";
4265         return result;
4266     }
4267 
4268     static TParseTree opCall(string input)
4269     {
4270         if(__ctfe)
4271         {
4272             return WebIDL(TParseTree(``, false, [], input, 0, 0));
4273         }
4274         else
4275         {
4276             forgetMemo();
4277             return WebIDL(TParseTree(``, false, [], input, 0, 0));
4278         }
4279     }
4280     static string opCall(GetName g)
4281     {
4282         return "WebIDL";
4283     }
4284 
4285 
4286     static void forgetMemo()
4287     {
4288         memo = null;
4289     }
4290     }
4291 }
4292 
4293 alias GenericWebIDL!(ParseTree).WebIDL WebIDL;
4294