Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 242
CRAP
0.00% covered (danger)
0.00%
0 / 6327
Grammar
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 242
3454022
0.00% covered (danger)
0.00%
0 / 6327
 load
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 10
 withComments
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
 setType
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 10
 a0
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a1
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a2
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a3
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a4
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a5
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a6
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a7
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a8
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a9
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a10
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a11
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a12
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a13
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a14
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a15
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a16
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a17
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a18
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a19
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a20
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 1
 a21
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a22
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a23
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a24
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a25
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a26
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a27
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a28
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a29
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a30
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a31
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a32
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a33
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a34
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a35
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a36
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a37
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 6
 a38
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a39
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a40
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a41
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a42
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a43
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a44
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a45
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a46
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a47
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a48
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a49
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a50
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a51
n/a
0 / 0
1
n/a
0 / 0
 a52
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 a53
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 6
 a54
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a55
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a56
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a57
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a58
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 a59
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a60
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a61
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 a62
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a63
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a64
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a65
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a66
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a67
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 6
 a68
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 a69
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 6
 a70
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a71
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a72
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a73
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a74
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a75
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a76
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a77
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a78
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a79
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a80
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 2
 a81
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a82
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a83
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a84
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a85
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 a86
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a87
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 a88
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a89
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a90
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a91
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a92
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a93
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 a94
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
 a95
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 5
 a96
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a97
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a98
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 a99
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 a100
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 a101
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 5
 a102
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a103
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a104
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a105
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a106
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 a107
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 1
 parsestart
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 16
 discard_
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 22
 parseDefinitions
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 discardwhitespace
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 13
 discardcomment
0.00% covered (danger)
0.00%
0 / 1
870
0.00% covered (danger)
0.00%
0 / 83
 parseleadingComments
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 6
 parseExtendedAttributeList
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 60
 parseDefinition
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 20
 discardeol
0.00% covered (danger)
0.00%
0 / 1
90
0.00% covered (danger)
0.00%
0 / 23
 parseExtendedAttribute
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 18
 parseExtendedAttributes
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 35
 parseCallbackOrInterfaceOrMixin
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 48
 parseNamespace
0.00% covered (danger)
0.00%
0 / 1
342
0.00% covered (danger)
0.00%
0 / 73
 parsePartial
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 24
 parseDictionary
0.00% covered (danger)
0.00%
0 / 1
380
0.00% covered (danger)
0.00%
0 / 78
 parseEnum
0.00% covered (danger)
0.00%
0 / 1
342
0.00% covered (danger)
0.00%
0 / 73
 parseTypedef
0.00% covered (danger)
0.00%
0 / 1
156
0.00% covered (danger)
0.00%
0 / 47
 parseIncludesStatement
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 52
 parseExtendedAttributeNoArgs
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 28
 parseExtendedAttributeArgList
0.00% covered (danger)
0.00%
0 / 1
132
0.00% covered (danger)
0.00%
0 / 47
 parseExtendedAttributeIdent
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 34
 parseExtendedAttributeNamedArgList
0.00% covered (danger)
0.00%
0 / 1
272
0.00% covered (danger)
0.00%
0 / 70
 discardSpecCompliantExtendedAttribute
0.00% covered (danger)
0.00%
0 / 1
1056
0.00% covered (danger)
0.00%
0 / 134
 discardi_
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 23
 parseCallbackRestOrInterface
0.00% covered (danger)
0.00%
0 / 1
380
0.00% covered (danger)
0.00%
0 / 76
 parseInterfaceOrMixin
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 5
 parseidentifier
0.00% covered (danger)
0.00%
0 / 1
600
0.00% covered (danger)
0.00%
0 / 88
 parseNamespaceMembers
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 parsePartialDefinition
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 29
 parseInheritance
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 30
 parseDictionaryMembers
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 parseEnumValueList
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 21
 parseTypeWithExtendedAttributes
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 16
 parseArgumentList
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 22
 parseExtendedAttributeRHS
0.00% covered (danger)
0.00%
0 / 1
6642
0.00% covered (danger)
0.00%
0 / 411
 discardExtendedAttributeInner
0.00% covered (danger)
0.00%
0 / 1
992
0.00% covered (danger)
0.00%
0 / 132
 discardExtendedAttributeRest
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
 discardOther
0.00% covered (danger)
0.00%
0 / 1
156
0.00% covered (danger)
0.00%
0 / 43
 parse_
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 22
 parseCallbackRest
0.00% covered (danger)
0.00%
0 / 1
342
0.00% covered (danger)
0.00%
0 / 78
 parseCallbackInterfaceMembers
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 parseInterfaceRest
0.00% covered (danger)
0.00%
0 / 1
240
0.00% covered (danger)
0.00%
0 / 65
 parseMixinRest
0.00% covered (danger)
0.00%
0 / 1
342
0.00% covered (danger)
0.00%
0 / 73
 discardArgumentNameKeyword
0.00% covered (danger)
0.00%
0 / 1
6806
0.00% covered (danger)
0.00%
0 / 184
 discardBufferRelatedType
0.00% covered (danger)
0.00%
0 / 1
1406
0.00% covered (danger)
0.00%
0 / 83
 discardOtherIdLike
0.00% covered (danger)
0.00%
0 / 1
7832
0.00% covered (danger)
0.00%
0 / 185
 parseNamespaceMember
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 27
 parsePartialInterfaceOrPartialMixin
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 5
 parsePartialDictionary
0.00% covered (danger)
0.00%
0 / 1
342
0.00% covered (danger)
0.00%
0 / 73
 parseDictionaryMemberRest
0.00% covered (danger)
0.00%
0 / 1
420
0.00% covered (danger)
0.00%
0 / 86
 parsestring
0.00% covered (danger)
0.00%
0 / 1
132
0.00% covered (danger)
0.00%
0 / 37
 parseEnumValueListComma
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 30
 parseType
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 19
 parseArgument
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 16
 parseArguments
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 35
 discardstring
0.00% covered (danger)
0.00%
0 / 1
132
0.00% covered (danger)
0.00%
0 / 37
 discardinteger
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 22
 discarddecimal
0.00% covered (danger)
0.00%
0 / 1
2862
0.00% covered (danger)
0.00%
0 / 168
 discardOtherOrComma
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 18
 discardidentifier
0.00% covered (danger)
0.00%
0 / 1
600
0.00% covered (danger)
0.00%
0 / 88
 discardotherchar
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 30
 discardotherterminals
0.00% covered (danger)
0.00%
0 / 1
552
0.00% covered (danger)
0.00%
0 / 60
 parseCallbackInterfaceMember
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 5
 parseInterfaceMembers
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 parsec_
0.00% covered (danger)
0.00%
0 / 1
90
0.00% covered (danger)
0.00%
0 / 31
 parseMixinMembers
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 parseRegularOperation
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 16
 parseAttributeRest
0.00% covered (danger)
0.00%
0 / 1
132
0.00% covered (danger)
0.00%
0 / 42
 parsePartialInterfaceRest
0.00% covered (danger)
0.00%
0 / 1
210
0.00% covered (danger)
0.00%
0 / 60
 parseDefault
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 parseEnumValueListString
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 27
 parseSingleType
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 8
 parseUnionType
0.00% covered (danger)
0.00%
0 / 1
342
0.00% covered (danger)
0.00%
0 / 70
 parseNull
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 20
 parseArgumentRest
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 55
 parseopt_minus
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 15
 parsedecimal_integer
0.00% covered (danger)
0.00%
0 / 1
90
0.00% covered (danger)
0.00%
0 / 31
 parsehex_integer
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 37
 parseoctal_integer
0.00% covered (danger)
0.00%
0 / 1
90
0.00% covered (danger)
0.00%
0 / 31
 parseConst
0.00% covered (danger)
0.00%
0 / 1
272
0.00% covered (danger)
0.00%
0 / 65
 parseInterfaceMember
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 5
 parseMixinMember
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 25
 parseOperationRest
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 55
 parseAttributeName
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 19
 parsePartialInterfaceMembers
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 parseDefaultValue
0.00% covered (danger)
0.00%
0 / 1
600
0.00% covered (danger)
0.00%
0 / 102
 parseDistinguishableType
0.00% covered (danger)
0.00%
0 / 1
1560
0.00% covered (danger)
0.00%
0 / 143
 parseAnyType
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 19
 parsePromiseType
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 50
 parseUnionMemberType
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 32
 parseArgumentName
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 19
 parseEllipsis
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 17
 parseConstType
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 23
 parseConstValue
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 8
 parsePartialInterfaceMember
0.00% covered (danger)
0.00%
0 / 1
132
0.00% covered (danger)
0.00%
0 / 32
 parseConstructor
0.00% covered (danger)
0.00%
0 / 1
272
0.00% covered (danger)
0.00%
0 / 63
 parseStringifier
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 24
 parseOptionalReadOnly
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 20
 parseOptionalOperationName
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
 parseAttributeNameKeyword
0.00% covered (danger)
0.00%
0 / 1
110
0.00% covered (danger)
0.00%
0 / 29
 parsePrimitiveType
0.00% covered (danger)
0.00%
0 / 1
462
0.00% covered (danger)
0.00%
0 / 53
 parseStringType
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 35
 parseBufferRelatedType
0.00% covered (danger)
0.00%
0 / 1
1406
0.00% covered (danger)
0.00%
0 / 83
 parseRecordType
0.00% covered (danger)
0.00%
0 / 1
306
0.00% covered (danger)
0.00%
0 / 68
 parseArgumentNameKeyword
0.00% covered (danger)
0.00%
0 / 1
6806
0.00% covered (danger)
0.00%
0 / 184
 parseBooleanLiteral
0.00% covered (danger)
0.00%
0 / 1
110
0.00% covered (danger)
0.00%
0 / 29
 parseFloatLiteral
0.00% covered (danger)
0.00%
0 / 1
380
0.00% covered (danger)
0.00%
0 / 76
 parseIntLiteral
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 20
 parseOperation
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 5
 parseStaticMember
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 24
 parseIterable
0.00% covered (danger)
0.00%
0 / 1
306
0.00% covered (danger)
0.00%
0 / 68
 parseAsyncIterable
0.00% covered (danger)
0.00%
0 / 1
506
0.00% covered (danger)
0.00%
0 / 86
 parseReadOnlyMember
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 24
 parseMaplikeRest
0.00% covered (danger)
0.00%
0 / 1
420
0.00% covered (danger)
0.00%
0 / 81
 parseSetlikeRest
0.00% covered (danger)
0.00%
0 / 1
272
0.00% covered (danger)
0.00%
0 / 63
 parseInheritAttribute
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 24
 parseStringifierRest
0.00% covered (danger)
0.00%
0 / 1
90
0.00% covered (danger)
0.00%
0 / 38
 parseOperationName
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 19
 parseUnsignedIntegerType
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 26
 parseUnrestrictedFloatType
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 26
 parseinteger
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 22
 parseSpecialOperation
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 16
 parseStaticMemberRest
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 18
 parseOptionalType
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 25
 parseOptionalArgumentList
0.00% covered (danger)
0.00%
0 / 1
90
0.00% covered (danger)
0.00%
0 / 38
 parseReadOnlyMemberRest
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 8
 parseOperationNameKeyword
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 19
 parseIntegerType
0.00% covered (danger)
0.00%
0 / 1
272
0.00% covered (danger)
0.00%
0 / 57
 parseFloatType
0.00% covered (danger)
0.00%
0 / 1
110
0.00% covered (danger)
0.00%
0 / 29
 parseSpecial
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 35
 parsei_
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 23
 parse
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 17
<?php
/*
 * Generated by WikiPEG
 */
/* File-scope initializer */
namespace Wikimedia\WebIDL;
class Grammar extends \Wikimedia\WikiPEG\PEGParserBase {
    // initializer
    
    /** @var string */
    private $filename = '';
    /** @var int */
    private $lineNum = 1;
    /** @var bool */
    private $keepComments = true;
    /** @var string[]|null */
    private $lastComments = null;
    /** @var ?string */
    private $lastWS = null;
    /**
     * @param string $contents
     * @param array $options
     * @return array
     */
    public static function load( string $contents, array $options = [] ) {
        $g = new Grammar();
        $g->filename = $options['sourceName'] ?? "<unknown>";
        $g->keepComments = $options['keepComments'] ?? true;
        $ast = $g->parse( $contents );
        if ( $options['concrete'] ?? false ) {
            $ast[] = [
                'type' => 'eof',
                'value' => '',
                'trivia' => $g->lastWS ?? ''
            ];
        }
        return $ast;
    }
    private function withComments( $ast ) {
        if ( !$this->keepComments ) {
            unset( $ast['leadingComments'] );
            unset( $ast['trailingComments'] );
        }
        return $ast;
    }
    private static $basicType = [
        'type' => null,
        'extAttrs' => [],
        'generic' => '',
        'nullable' => false,
        'union' => false,
        'idlType' => null,
    ];
    private static $basicExtAttr = [
        'type' => 'extended-attribute',
        'name' => null,
        'arguments' => [],
        'rhs' => null,
    ];
    private static function setType(array &$t, string $val): array {
        if ( ($t['type'] ?? null) !== null) {
            return $t;
        }
        $t['type'] = $val;
        if (is_array($t['idlType'] ?? null)) {
            if ($t['generic'] === '' && $t['union'] === false) {
                self::setType($t['idlType'], $val);
            } else if ($t['union'] === false) {
                foreach ($t['idlType'] as &$tt) {
                    self::setType($tt, $val);
                }
            }
        }
        return $t;
    }
    // cache init
    
    // expectations
    protected $expectations = [
        0 => ["type" => "end", "description" => "end of input"],
1 => ["type" => "class", "value" => "[\\t ]", "description" => "[\\t ]"],
2 => ["type" => "literal", "value" => "//", "description" => "\"//\""],
3 => ["type" => "class", "value" => "[^\\n\\r]", "description" => "[^\\n\\r]"],
4 => ["type" => "literal", "value" => "/*", "description" => "\"/*\""],
5 => ["type" => "class", "value" => "[^\\n\\r*]", "description" => "[^\\n\\r*]"],
6 => ["type" => "literal", "value" => "*", "description" => "\"*\""],
7 => ["type" => "literal", "value" => "*/", "description" => "\"*/\""],
8 => ["type" => "literal", "value" => "[", "description" => "\"[\""],
9 => ["type" => "literal", "value" => "]", "description" => "\"]\""],
10 => ["type" => "literal", "value" => "\x0a", "description" => "\"\\n\""],
11 => ["type" => "literal", "value" => "\x0d\x0a", "description" => "\"\\r\\n\""],
12 => ["type" => "literal", "value" => "\x0d", "description" => "\"\\r\""],
13 => ["type" => "literal", "value" => ",", "description" => "\",\""],
14 => ["type" => "literal", "value" => "callback", "description" => "\"callback\""],
15 => ["type" => "literal", "value" => "interface", "description" => "\"interface\""],
16 => ["type" => "literal", "value" => "namespace", "description" => "\"namespace\""],
17 => ["type" => "literal", "value" => "{", "description" => "\"{\""],
18 => ["type" => "literal", "value" => "}", "description" => "\"}\""],
19 => ["type" => "literal", "value" => ";", "description" => "\";\""],
20 => ["type" => "literal", "value" => "partial", "description" => "\"partial\""],
21 => ["type" => "literal", "value" => "dictionary", "description" => "\"dictionary\""],
22 => ["type" => "literal", "value" => "enum", "description" => "\"enum\""],
23 => ["type" => "literal", "value" => "typedef", "description" => "\"typedef\""],
24 => ["type" => "literal", "value" => "includes", "description" => "\"includes\""],
25 => ["type" => "literal", "value" => "(", "description" => "\"(\""],
26 => ["type" => "literal", "value" => ")", "description" => "\")\""],
27 => ["type" => "literal", "value" => "=", "description" => "\"=\""],
28 => ["type" => "class", "value" => "[-_]", "description" => "[-_]"],
29 => ["type" => "class", "value" => "[A-Za-z]", "description" => "[A-Za-z]"],
30 => ["type" => "class", "value" => "[-_0-9A-Za-z]", "description" => "[-_0-9A-Za-z]"],
31 => ["type" => "literal", "value" => ":", "description" => "\":\""],
32 => ["type" => "literal", "value" => "mixin", "description" => "\"mixin\""],
33 => ["type" => "literal", "value" => "async", "description" => "\"async\""],
34 => ["type" => "literal", "value" => "attribute", "description" => "\"attribute\""],
35 => ["type" => "literal", "value" => "const", "description" => "\"const\""],
36 => ["type" => "literal", "value" => "constructor", "description" => "\"constructor\""],
37 => ["type" => "literal", "value" => "deleter", "description" => "\"deleter\""],
38 => ["type" => "literal", "value" => "getter", "description" => "\"getter\""],
39 => ["type" => "literal", "value" => "inherit", "description" => "\"inherit\""],
40 => ["type" => "literal", "value" => "iterable", "description" => "\"iterable\""],
41 => ["type" => "literal", "value" => "maplike", "description" => "\"maplike\""],
42 => ["type" => "literal", "value" => "readonly", "description" => "\"readonly\""],
43 => ["type" => "literal", "value" => "required", "description" => "\"required\""],
44 => ["type" => "literal", "value" => "setlike", "description" => "\"setlike\""],
45 => ["type" => "literal", "value" => "setter", "description" => "\"setter\""],
46 => ["type" => "literal", "value" => "static", "description" => "\"static\""],
47 => ["type" => "literal", "value" => "stringifier", "description" => "\"stringifier\""],
48 => ["type" => "literal", "value" => "unrestricted", "description" => "\"unrestricted\""],
49 => ["type" => "literal", "value" => "ArrayBuffer", "description" => "\"ArrayBuffer\""],
50 => ["type" => "literal", "value" => "DataView", "description" => "\"DataView\""],
51 => ["type" => "literal", "value" => "Int8Array", "description" => "\"Int8Array\""],
52 => ["type" => "literal", "value" => "Int16Array", "description" => "\"Int16Array\""],
53 => ["type" => "literal", "value" => "Int32Array", "description" => "\"Int32Array\""],
54 => ["type" => "literal", "value" => "Uint8Array", "description" => "\"Uint8Array\""],
55 => ["type" => "literal", "value" => "Uint16Array", "description" => "\"Uint16Array\""],
56 => ["type" => "literal", "value" => "Uint32Array", "description" => "\"Uint32Array\""],
57 => ["type" => "literal", "value" => "Uint8ClampedArray", "description" => "\"Uint8ClampedArray\""],
58 => ["type" => "literal", "value" => "Float32Array", "description" => "\"Float32Array\""],
59 => ["type" => "literal", "value" => "Float64Array", "description" => "\"Float64Array\""],
60 => ["type" => "literal", "value" => "ByteString", "description" => "\"ByteString\""],
61 => ["type" => "literal", "value" => "DOMString", "description" => "\"DOMString\""],
62 => ["type" => "literal", "value" => "FrozenArray", "description" => "\"FrozenArray\""],
63 => ["type" => "literal", "value" => "Infinity", "description" => "\"Infinity\""],
64 => ["type" => "literal", "value" => "NaN", "description" => "\"NaN\""],
65 => ["type" => "literal", "value" => "ObservableArray", "description" => "\"ObservableArray\""],
66 => ["type" => "literal", "value" => "Promise", "description" => "\"Promise\""],
67 => ["type" => "literal", "value" => "USVString", "description" => "\"USVString\""],
68 => ["type" => "literal", "value" => "any", "description" => "\"any\""],
69 => ["type" => "literal", "value" => "bigint", "description" => "\"bigint\""],
70 => ["type" => "literal", "value" => "boolean", "description" => "\"boolean\""],
71 => ["type" => "literal", "value" => "byte", "description" => "\"byte\""],
72 => ["type" => "literal", "value" => "double", "description" => "\"double\""],
73 => ["type" => "literal", "value" => "false", "description" => "\"false\""],
74 => ["type" => "literal", "value" => "float", "description" => "\"float\""],
75 => ["type" => "literal", "value" => "long", "description" => "\"long\""],
76 => ["type" => "literal", "value" => "null", "description" => "\"null\""],
77 => ["type" => "literal", "value" => "object", "description" => "\"object\""],
78 => ["type" => "literal", "value" => "octet", "description" => "\"octet\""],
79 => ["type" => "literal", "value" => "or", "description" => "\"or\""],
80 => ["type" => "literal", "value" => "optional", "description" => "\"optional\""],
81 => ["type" => "literal", "value" => "record", "description" => "\"record\""],
82 => ["type" => "literal", "value" => "sequence", "description" => "\"sequence\""],
83 => ["type" => "literal", "value" => "short", "description" => "\"short\""],
84 => ["type" => "literal", "value" => "symbol", "description" => "\"symbol\""],
85 => ["type" => "literal", "value" => "true", "description" => "\"true\""],
86 => ["type" => "literal", "value" => "unsigned", "description" => "\"unsigned\""],
87 => ["type" => "literal", "value" => "undefined", "description" => "\"undefined\""],
88 => ["type" => "literal", "value" => "\"", "description" => "\"\\\"\""],
89 => ["type" => "class", "value" => "[^\\\"]", "description" => "[^\\\"]"],
90 => ["type" => "class", "value" => "[0-9]", "description" => "[0-9]"],
91 => ["type" => "literal", "value" => ".", "description" => "\".\""],
92 => ["type" => "class", "value" => "[Ee]", "description" => "[Ee]"],
93 => ["type" => "class", "value" => "[+-]", "description" => "[+-]"],
94 => ["type" => "class", "value" => "[^\\t\\n\\r 0-9A-Za-z]", "description" => "[^\\t\\n\\r 0-9A-Za-z]"],
95 => ["type" => "literal", "value" => "-", "description" => "\"-\""],
96 => ["type" => "literal", "value" => "-Infinity", "description" => "\"-Infinity\""],
97 => ["type" => "literal", "value" => "...", "description" => "\"...\""],
98 => ["type" => "literal", "value" => "<", "description" => "\"<\""],
99 => ["type" => "literal", "value" => ">", "description" => "\">\""],
100 => ["type" => "literal", "value" => "?", "description" => "\"?\""],
101 => ["type" => "class", "value" => "[ \\t]", "description" => "[ \\t]"],
102 => ["type" => "class", "value" => "[1-9]", "description" => "[1-9]"],
103 => ["type" => "literal", "value" => "0x", "description" => "\"0x\""],
104 => ["type" => "literal", "value" => "0X", "description" => "\"0X\""],
105 => ["type" => "class", "value" => "[0-9A-Fa-f]", "description" => "[0-9A-Fa-f]"],
106 => ["type" => "literal", "value" => "0", "description" => "\"0\""],
107 => ["type" => "class", "value" => "[0-7]", "description" => "[0-7]"],
    ];
    // actions
    private function a0($d) {
 return $d; 
}
private function a1($r) {
  $c = array_values(array_filter($r, function($v) { return $v[0] === '/'; }));
  $this->lastComments = $c;
  $this->lastWS = implode( '', $r );
  return $c;
}
private function a2($c, $e, $d) {
      $d['extAttrs'] = $e;
      $d['leadingComments'] = $c;
      return $this->withComments($d);
    
}
private function a3() {
    $r = $this->lastComments; $this->lastComments = null; return $r;
}
private function a4($e, $rest) {
 array_unshift($rest, $e); return $rest; 
}
private function a5() {
 return []; 
}
private function a6($nl) {
 $this->lineNum++; return $nl; 
}
private function a7($c) {
 return $c; 
}
private function a8($im) {
 return $im; 
}
private function a9($name, $m) {
    return [
        'type' => 'namespace',
        'name' => $name,
        'inheritance' => null,
        'partial' => false,
        'members' => $m,
    ];
}
private function a10($p) {
    $p['partial'] = true; return $p;
}
private function a11($name, $inh, $m) {
        return [
            'type' => 'dictionary',
            'name' => $name,
            'partial' => false,
            'members' => $m,
            'inheritance' => $inh,
        ];
    
}
private function a12($name, $vals) {
    return [
        'type' => 'enum',
        'name' => $name,
        'values' => $vals,
    ];
}
private function a13($t, $name) {
    return [
        'type' => 'typedef',
         'name' => $name,
         'idlType' => self::setType($t, 'typedef-type'),
    ];
}
private function a14($target, $incl) {
    return [
        'type' => 'includes',
        'target' => $target,
        'includes' => $incl,
    ];
}
private function a15($name) {
    return [ 'name' => $name ] + self::$basicExtAttr;
}
private function a16($name, $args) {
    return [ 'name' => $name, 'arguments' => $args ] + self::$basicExtAttr;
}
private function a17($name, $rhs) {
    return [
        'name' => $name,
        'rhs' => $rhs,
    ] + self::$basicExtAttr;
}
private function a18($name, $rhs, $args) {
    return [
        'name' => $name,
        'arguments' => $args,
        'rhs' => [ 'type' => 'identifier', 'value' => $rhs ],
    ] + self::$basicExtAttr;
}
private function a19($name, $m) {
    return [
        'type' => 'callback interface',
        'name' => $name,
        'inheritance' => null,
        'members' => $m,
        'partial' => false,
    ];
}
private function a20($s) {
        return $s[0] == "_" ? substr($s, 1) : $s ;
    
}
private function a21($c, $e, $m) {
      $m['extAttrs'] = $e;
      $m['leadingComments'] = $c;
      return $this->withComments( $m );
    
}
private function a22($p) {
 return $p; 
}
private function a23($name) {
return $name;
}
private function a24($s, $vals) {
    array_unshift( $vals, [
        'type' => 'enum-value',
        'value' => $s,
    ] );
    return $vals;
}
private function a25($e, $t) {
        $t['extAttrs'] = $e; return $t;
    
}
private function a26($a, $rest) {
 array_unshift($rest, $a); return $rest; 
}
private function a27($rhs) {
        return [ 'type' => 'identifier', 'value' => $rhs ];
    
}
private function a28($s, $s2) {
return $s2;
}
private function a29($s, $rest) {
        array_unshift($rest, $s);
        $val = array_map(function($item) {
            return [ 'value' => $item ];
        }, $rest);
        return [ 'type' => 'identifier-list', 'value' => $val ];
    
}
private function a30($s) {
        return [ 'type' => 'string', 'value' => $s ];
    
}
private function a31($s, $rest) {
        array_unshift($rest, $s);
        $val = array_map(function($item) {
            return [ 'value' => $item ];
        }, $rest);
        return [ 'type' => 'string-list', 'value' => $val ];
    
}
private function a32($s) {
        return [ 'type' => 'integer', 'value' => $s ];
    
}
private function a33($s, $rest) {
        array_unshift($rest, $s);
        $val = array_map(function($item) {
            return [ 'value' => $item ];
        }, $rest);
        return [ 'type' => 'integer-list', 'value' => $val ];
    
}
private function a34($s) {
        return [ 'type' => 'decimal', 'value' => $s ];
    
}
private function a35($s, $rest) {
        array_unshift($rest, $s);
        $val = array_map(function($item) {
            return [ 'value' => $item ];
        }, $rest);
        return [ 'type' => 'decimal-list', 'value' => $val ];
    
}
private function a36($name, $t, $args) {
    return [
        'type' => 'callback',
         'name' => $name,
         'idlType' => self::setType($t, 'return-type'),
         'arguments' => $args,
    ];
}
private function a37($name, $inh, $m, $c) {
    return $this->withComments( [
        'type' => 'interface',
        'name' => $name,
        'inheritance' => $inh,
        'members' => $m,
        'partial' => false,
        'trailingComments' => $c,
    ] );
}
private function a38($name, $m) {
    return [
        'type' => 'interface mixin',
        'name' => $name,
        'inheritance' => null,
        'partial' => false,
        'members' => $m,
    ];
}
private function a39($k) {
 return $k; 
}
private function a40($s) {
 return $s; 
}
private function a41($a) {
 $a['readonly'] = true; return $a; 
}
private function a42($name, $m) {
       return [
           'type' => 'dictionary',
           'name' => $name,
           'partial' => true,
           'members' => $m,
           'inheritance' => null,
       ];
   
}
private function a43($t, $name) {
      return [
          'type' => 'field',
          'name' => $name,
          'required' => true,
          'idlType' => self::setType($t, 'dictionary-type'),
          'default' => null,
      ];
    
}
private function a44($t, $name, $d) {
      return [
          'type' => 'field',
          'name' => $name,
          'required' => false,
          'idlType' => self::setType($t, 'dictionary-type'),
          'default' => $d
      ];
  
}
private function a45($vals) {
 return $vals; 
}
private function a46($t, $n) {
 $t['nullable'] = ($n !== null); return $t; 
}
private function a47($e, $a) {
        $a['extAttrs'] = $e; return $a;
    
}
private function a48($m, $n) {
    return $m * $n;
}
private function a49($s) {
 return floatval( $s ); 
}
private function a50() {
 return null; 
}
private function a51($r) {
  return array_values(array_filter($r, function($v) { return $v !== null; }));
}
private function a52($t, $o) {
    $o['idlType'] = self::setType($t, 'return-type');
    return $o;
}
private function a53($t, $name, $c) {
    return $this->withComments( [
        'type' => 'attribute',
        'name' => $name,
        'special' => '',
        'readonly' => false,
        'idlType' => self::setType($t, 'attribute-type'),
        'trailingComments' => $c,
    ] );
}
private function a54($name, $m) {
    return [
        'type' => 'interface',
        'name' => $name,
        'inheritance' => null,
        'members' => $m,
    ];
}
private function a55($val) {
 return $val; 
}
private function a56($s, $vals) {
    array_unshift( $vals, [
        'type' => 'enum-value',
        'value' => $s,
    ] );
    return $vals;
  
}
private function a57($t, $t2) {
 return $t2; 
}
private function a58($t, $rest) {
        array_unshift($rest, $t);
        return [ 'idlType' => $rest, 'union' => true ] + self::$basicType;
    
}
private function a59() {
 return true; 
}
private function a60($t, $name, $d) {
      return [
          'type' => 'argument',
          'default' => $d,
          'optional' => true,
          'variadic' => false,
          'idlType' => self::setType($t, 'argument-type'),
          'name' => $name,
      ];
  
}
private function a61($t, $e, $name) {
      return [
          'type' => 'argument',
          'default' => null,
          'optional' => false,
          'variadic' => ($e !== null),
          'idlType' => self::setType($t, 'argument-type'),
          'name' => $name,
      ];
  
}
private function a62() {
 return -1; 
}
private function a63() {
 return 1; 
}
private function a64($s) {
 return intval($s); 
}
private function a65($s) {
 return hexdec($s); 
}
private function a66($s) {
 return octdec( $s ); 
}
private function a67($t, $name, $v, $c) {
    return $this->withComments( [
        'type' => 'const',
        'idlType' => $t,
        'name' => $name,
        'value' => $v,
        'trailingComments' => $c,
    ] );
}
private function a68($ro, $a) {
      $a['readonly'] = ($ro !== null);
      return $a;
  
}
private function a69($name, $args, $c) {
    return $this->withComments( [
        'type' => 'operation',
        'special' => '',
        'idlType' => null,
        'name' => $name,
        'arguments' => $args,
        'extAttrs' => null,
        'trailingComments' => $c,
    ] );
}
private function a70($id) {
 return $id; 
}
private function a71($s) {
 return [ 'type' => 'string', 'value' => $s ]; 
}
private function a72() {
 return [ 'type' => 'sequence', 'value' => [] ]; 
}
private function a73() {
 return [ 'type' => 'dictionary' ]; 
}
private function a74() {
 return [ 'type' => 'null' ]; 
}
private function a75($t) {
        return [ 'idlType' => $t ] + self::$basicType;
    
}
private function a76($g, $t) {
        return [ 'idlType' => [$t], 'generic' => $g ] + self::$basicType;
    
}
private function a77($t) {
      return [ 'idlType' => $t ] + self::$basicType;
  
}
private function a78($dt, $n) {
 $dt['nullable'] = ($n !== null); return $dt; 
}
private function a79() {
      return [ 'idlType' => 'any' ] + self::$basicType;
    
}
private function a80($t) {
        if ( $t['idlType'] === 'void' ) { $t['type'] = 'return-type'; }
        return [ 'idlType' => [$t], 'generic' => 'Promise' ] + self::$basicType;
    
}
private function a81($t, $n) {
        $t['nullable'] = ($n !== null); return $t;
    
}
private function a82($name) {
 return $name; 
}
private function a83($t) {
        return [ 'type' => 'const-type', 'idlType' => $t ] + self::$basicType;
    
}
private function a84($args, $c) {
        return $this->withComments( [
          'type' => 'constructor',
          'arguments' => $args,
          'trailingComments' => $c,
        ] );
  
}
private function a85($rest) {
    $rest['special'] = 'stringifier';
    return $rest;
}
private function a86($v) {
 return $v; 
}
private function a87($t1, $t2) {
        $t1 = [ 'idlType' => $t1 ] + self::$basicType;
        return [ 'idlType' => [$t1,$t2], 'generic' => 'record' ] + self::$basicType;
    
}
private function a88($v) {
        return [ 'type' => 'boolean', 'value' => ($v === "true") ];
    
}
private function a89($s) {
        return [ 'type' => 'number', 'value' => $s ];
    
}
private function a90() {
        return [ 'type' => 'Infinity', 'negative' => true ];
    
}
private function a91() {
        return [ 'type' => 'Infinity', 'negative' => false ];
    
}
private function a92() {
        return [ 'type' => 'NaN' ];
    
}
private function a93($rest) {
    $rest['special'] = 'static';
    return $rest;
}
private function a94($t1, $t2, $c) {
        return $this->withComments( [
            'type' => 'iterable',
            'idlType' => $t2 ? [ $t1, $t2 ] : [ $t1 ],
            'readonly' => false,
            'async' => false,
            'arguments' => [],
            'trailingComments' => $c,
        ] );
    
}
private function a95($t1, $t2, $args, $c) {
        return $this->withComments( [
            'type' => 'iterable',
            'idlType' => $t2 ? [ $t1, $t2 ] : [ $t1 ],
            'readonly' => false,
            'async' => true,
            'arguments' => $args ?? [],
            'trailingComments' => $c,
        ] );
    
}
private function a96($m) {
    $m['readonly'] = true; return $m;
}
private function a97($t1, $t2, $c) {
        return $this->withComments( [
            'type' => 'maplike',
            'idlType' => [ $t1, $t2 ],
            'readonly' => false,
            'async' => false,
            'arguments' => [],
            'trailingComments' => $c,
        ] );
    
}
private function a98($t, $c) {
         return $this->withComments( [
             'type' => 'setlike',
             'idlType' => [ $t ],
             'readonly' => false,
             'async' => false,
             'arguments' => [],
             'trailingComments' => $c,
         ] );
    
}
private function a99($a) {
    $a['special'] = 'inherit';
    return $a;
}
private function a100($ro, $a) {
    $a['readonly'] = ($ro !== null);
    return $a;
  
}
private function a101($c) {
    return $this->withComments( [
        'type' => 'operation',
        'name' => '',
        'arguments' => [],
        'special' => 'stringifier',
        'trailingComments' => $c,
    ] );
}
private function a102($t) {
 return "unsigned $t"; 
}
private function a103($t) {
 return "unrestricted $t"; 
}
private function a104($s, $o) {
    $o['special'] = $s; return $o;
}
private function a105($t) {
 return $t; 
}
private function a106($args) {
 return $args; 
}
private function a107($l) {
 return $l ? "long long" : "long"; 
}
    // generated
    private function parsestart($silence) {
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  $r4 = $this->discard_($silence);
  if ($r4===self::$FAILED) {
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->parseDefinitions($silence);
  // d <- $r5
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a0($r5);
  }
  // free $p3
  return $r1;
}
private function discard_($silence) {
  $p2 = $this->currPos;
  $r3 = [];
  for (;;) {
    // start choice_1
    $p5 = $this->currPos;
    $r4 = $this->discardwhitespace($silence);
    if ($r4!==self::$FAILED) {
      $r4 = substr($this->input, $p5, $this->currPos - $p5);
      goto choice_1;
    } else {
      $r4 = self::$FAILED;
    }
    // free $p5
    $p5 = $this->currPos;
    $r4 = $this->discardcomment($silence);
    if ($r4!==self::$FAILED) {
      $r4 = substr($this->input, $p5, $this->currPos - $p5);
    } else {
      $r4 = self::$FAILED;
    }
    // free $p5
    choice_1:
    if ($r4!==self::$FAILED) {
      $r3[] = $r4;
    } else {
      break;
    }
  }
  // r <- $r3
  // free $r4
  $r1 = $r3;
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a1($r3);
  }
  return $r1;
}
private function parseDefinitions($silence) {
  $r1 = [];
  for (;;) {
    $p3 = $this->currPos;
    // start seq_1
    $p4 = $this->currPos;
    $r5 = $this->parseleadingComments($silence);
    // c <- $r5
    if ($r5===self::$FAILED) {
      $r2 = self::$FAILED;
      goto seq_1;
    }
    $r6 = $this->parseExtendedAttributeList($silence);
    // e <- $r6
    if ($r6===self::$FAILED) {
      $this->currPos = $p4;
      $r2 = self::$FAILED;
      goto seq_1;
    }
    $r7 = $this->parseDefinition($silence);
    // d <- $r7
    if ($r7===self::$FAILED) {
      $this->currPos = $p4;
      $r2 = self::$FAILED;
      goto seq_1;
    }
    $r2 = true;
    seq_1:
    if ($r2!==self::$FAILED) {
      $this->savedPos = $p3;
      $r2 = $this->a2($r5, $r6, $r7);
      $r1[] = $r2;
    } else {
      break;
    }
    // free $p4
  }
  // free $r2
  return $r1;
}
private function discardwhitespace($silence) {
  $r1 = self::$FAILED;
  for (;;) {
    // start choice_1
    $r2 = $this->input[$this->currPos] ?? '';
    if ($r2 === "\x09" || $r2 === " ") {
      $this->currPos++;
      goto choice_1;
    } else {
      $r2 = self::$FAILED;
      if (!$silence) {$this->fail(1);}
    }
    $r2 = $this->discardeol($silence);
    choice_1:
    if ($r2!==self::$FAILED) {
      $r1 = true;
    } else {
      break;
    }
  }
  // free $r2
  return $r1;
}
private function discardcomment($silence) {
  // start choice_1
  // start seq_1
  $p2 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "//", $this->currPos, 2, false) === 0) {
    $r3 = "//";
    $this->currPos += 2;
  } else {
    if (!$silence) {$this->fail(2);}
    $r3 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  for (;;) {
    $r5 = self::charAt($this->input, $this->currPos);
    if ($r5 !== '' && !($r5 === "\x0a" || $r5 === "\x0d")) {
      $this->currPos += strlen($r5);
    } else {
      $r5 = self::$FAILED;
      if (!$silence) {$this->fail(3);}
      break;
    }
  }
  // free $r5
  $r4 = true;
  if ($r4===self::$FAILED) {
    $this->currPos = $p2;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  // free $r4
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  // free $p2
  // start seq_2
  $p2 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "/*", $this->currPos, 2, false) === 0) {
    $r4 = "/*";
    $this->currPos += 2;
  } else {
    if (!$silence) {$this->fail(4);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_2;
  }
  for (;;) {
    // start choice_2
    $r6 = self::$FAILED;
    for (;;) {
      if (strcspn($this->input, "\x0a\x0d*", $this->currPos, 1) !== 0) {
        $r7 = self::consumeChar($this->input, $this->currPos);
        $r6 = true;
      } else {
        $r7 = self::$FAILED;
        if (!$silence) {$this->fail(5);}
        break;
      }
    }
    if ($r6!==self::$FAILED) {
      goto choice_2;
    }
    // free $r7
    $r6 = $this->discardeol($silence);
    if ($r6!==self::$FAILED) {
      goto choice_2;
    }
    // start seq_3
    $p8 = $this->currPos;
    if (($this->input[$this->currPos] ?? null) === "*") {
      $this->currPos++;
      $r7 = "*";
    } else {
      if (!$silence) {$this->fail(6);}
      $r7 = self::$FAILED;
      $r6 = self::$FAILED;
      goto seq_3;
    }
    $p9 = $this->currPos;
    if (($this->input[$this->currPos] ?? null) === "/") {
      $this->currPos++;
      $r10 = "/";
    } else {
      $r10 = self::$FAILED;
    }
    if ($r10 === self::$FAILED) {
      $r10 = false;
    } else {
      $r10 = self::$FAILED;
      $this->currPos = $p9;
      $this->currPos = $p8;
      $r6 = self::$FAILED;
      goto seq_3;
    }
    // free $p9
    $r6 = true;
    seq_3:
    // free $p8
    choice_2:
    if ($r6===self::$FAILED) {
      break;
    }
  }
  // free $r6
  $r5 = true;
  if ($r5===self::$FAILED) {
    $this->currPos = $p2;
    $r1 = self::$FAILED;
    goto seq_2;
  }
  // free $r5
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "*/", $this->currPos, 2, false) === 0) {
    $r5 = "*/";
    $this->currPos += 2;
  } else {
    if (!$silence) {$this->fail(7);}
    $r5 = self::$FAILED;
    $this->currPos = $p2;
    $r1 = self::$FAILED;
    goto seq_2;
  }
  $r1 = true;
  seq_2:
  // free $p2
  choice_1:
  return $r1;
}
private function parseleadingComments($silence) {
  $p2 = $this->currPos;
  $r1 = '';
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a3();
  }
  return $r1;
}
private function parseExtendedAttributeList($silence) {
  // start choice_1
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  if (($this->input[$this->currPos] ?? null) === "[") {
    $this->currPos++;
    $r4 = "[";
  } else {
    if (!$silence) {$this->fail(8);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->discard_($silence);
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r6 = $this->parseExtendedAttribute($silence);
  // e <- $r6
  if ($r6===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r7 = $this->parseExtendedAttributes($silence);
  // rest <- $r7
  if ($r7===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === "]") {
    $this->currPos++;
    $r8 = "]";
  } else {
    if (!$silence) {$this->fail(9);}
    $r8 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r9 = $this->discard_($silence);
  if ($r9===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a4($r6, $r7);
    goto choice_1;
  }
  // free $p3
  $p3 = $this->currPos;
  // start seq_2
  $p10 = $this->currPos;
  $p11 = $this->currPos;
  if (($this->input[$this->currPos] ?? null) === "[") {
    $this->currPos++;
    $r12 = "[";
  } else {
    $r12 = self::$FAILED;
  }
  if ($r12 === self::$FAILED) {
    $r12 = false;
  } else {
    $r12 = self::$FAILED;
    $this->currPos = $p11;
    $r1 = self::$FAILED;
    goto seq_2;
  }
  // free $p11
  $r1 = true;
  seq_2:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p3;
    $r1 = $this->a5();
  }
  // free $p10
  choice_1:
  return $r1;
}
private function parseDefinition($silence) {
  // start choice_1
  $r1 = $this->parseCallbackOrInterfaceOrMixin($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parseNamespace($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parsePartial($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parseDictionary($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parseEnum($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parseTypedef($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parseIncludesStatement($silence);
  choice_1:
  return $r1;
}
private function discardeol($silence) {
  $p2 = $this->currPos;
  // start choice_1
  if (($this->input[$this->currPos] ?? null) === "\x0a") {
    $this->currPos++;
    $r3 = "\x0a";
    goto choice_1;
  } else {
    if (!$silence) {$this->fail(10);}
    $r3 = self::$FAILED;
  }
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "\x0d\x0a", $this->currPos, 2, false) === 0) {
    $r3 = "\x0d\x0a";
    $this->currPos += 2;
    goto choice_1;
  } else {
    if (!$silence) {$this->fail(11);}
    $r3 = self::$FAILED;
  }
  if (($this->input[$this->currPos] ?? null) === "\x0d") {
    $this->currPos++;
    $r3 = "\x0d";
  } else {
    if (!$silence) {$this->fail(12);}
    $r3 = self::$FAILED;
  }
  choice_1:
  // nl <- $r3
  $r1 = $r3;
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a6($r3);
  }
  return $r1;
}
private function parseExtendedAttribute($silence) {
  // start choice_1
  $r1 = $this->parseExtendedAttributeNoArgs($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parseExtendedAttributeArgList($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parseExtendedAttributeIdent($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $r1 = $this->parseExtendedAttributeNamedArgList($silence);
  if ($r1!==self::$FAILED) {
    goto choice_1;
  }
  $p2 = $this->currPos;
  $r1 = $this->discardSpecCompliantExtendedAttribute($silence);
  if ($r1!==self::$FAILED) {
    $r1 = substr($this->input, $p2, $this->currPos - $p2);
  } else {
    $r1 = self::$FAILED;
  }
  // free $p2
  choice_1:
  return $r1;
}
private function parseExtendedAttributes($silence) {
  // start choice_1
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  if (($this->input[$this->currPos] ?? null) === ",") {
    $this->currPos++;
    $r4 = ",";
  } else {
    if (!$silence) {$this->fail(13);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->discard_($silence);
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r6 = $this->parseExtendedAttribute($silence);
  // e <- $r6
  if ($r6===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r7 = $this->parseExtendedAttributes($silence);
  // rest <- $r7
  if ($r7===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a4($r6, $r7);
    goto choice_1;
  }
  // free $p3
  $p3 = $this->currPos;
  $r1 = '';
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p3;
    $r1 = $this->a5();
  }
  choice_1:
  return $r1;
}
private function parseCallbackOrInterfaceOrMixin($silence) {
  // start choice_1
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "callback", $this->currPos, 8, false) === 0) {
    $r4 = "callback";
    $this->currPos += 8;
  } else {
    if (!$silence) {$this->fail(14);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->discardi_($silence);
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r6 = $this->parseCallbackRestOrInterface($silence);
  // c <- $r6
  if ($r6===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a7($r6);
    goto choice_1;
  }
  // free $p3
  $p3 = $this->currPos;
  // start seq_2
  $p7 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "interface", $this->currPos, 9, false) === 0) {
    $r8 = "interface";
    $this->currPos += 9;
  } else {
    if (!$silence) {$this->fail(15);}
    $r8 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_2;
  }
  $r9 = $this->discardi_($silence);
  if ($r9===self::$FAILED) {
    $this->currPos = $p7;
    $r1 = self::$FAILED;
    goto seq_2;
  }
  $r10 = $this->parseInterfaceOrMixin($silence);
  // im <- $r10
  if ($r10===self::$FAILED) {
    $this->currPos = $p7;
    $r1 = self::$FAILED;
    goto seq_2;
  }
  $r1 = true;
  seq_2:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p3;
    $r1 = $this->a8($r10);
  }
  // free $p7
  choice_1:
  return $r1;
}
private function parseNamespace($silence) {
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "namespace", $this->currPos, 9, false) === 0) {
    $r4 = "namespace";
    $this->currPos += 9;
  } else {
    if (!$silence) {$this->fail(16);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->discardi_($silence);
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r6 = $this->parseidentifier($silence);
  // name <- $r6
  if ($r6===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r7 = $this->discard_($silence);
  if ($r7===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === "{") {
    $this->currPos++;
    $r8 = "{";
  } else {
    if (!$silence) {$this->fail(17);}
    $r8 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r9 = $this->discard_($silence);
  if ($r9===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r10 = $this->parseNamespaceMembers($silence);
  // m <- $r10
  if ($r10===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === "}") {
    $this->currPos++;
    $r11 = "}";
  } else {
    if (!$silence) {$this->fail(18);}
    $r11 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r12 = $this->discard_($silence);
  if ($r12===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === ";") {
    $this->currPos++;
    $r13 = ";";
  } else {
    if (!$silence) {$this->fail(19);}
    $r13 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r14 = $this->discard_($silence);
  if ($r14===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a9($r6, $r10);
  }
  // free $p3
  return $r1;
}
private function parsePartial($silence) {
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "partial", $this->currPos, 7, false) === 0) {
    $r4 = "partial";
    $this->currPos += 7;
  } else {
    if (!$silence) {$this->fail(20);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->discardi_($silence);
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r6 = $this->parsePartialDefinition($silence);
  // p <- $r6
  if ($r6===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a10($r6);
  }
  // free $p3
  return $r1;
}
private function parseDictionary($silence) {
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "dictionary", $this->currPos, 10, false) === 0) {
    $r4 = "dictionary";
    $this->currPos += 10;
  } else {
    if (!$silence) {$this->fail(21);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->discardi_($silence);
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r6 = $this->parseidentifier($silence);
  // name <- $r6
  if ($r6===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r7 = $this->discard_($silence);
  if ($r7===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r8 = $this->parseInheritance($silence);
  // inh <- $r8
  if ($r8===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === "{") {
    $this->currPos++;
    $r9 = "{";
  } else {
    if (!$silence) {$this->fail(17);}
    $r9 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r10 = $this->discard_($silence);
  if ($r10===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r11 = $this->parseDictionaryMembers($silence);
  // m <- $r11
  if ($r11===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === "}") {
    $this->currPos++;
    $r12 = "}";
  } else {
    if (!$silence) {$this->fail(18);}
    $r12 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r13 = $this->discard_($silence);
  if ($r13===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === ";") {
    $this->currPos++;
    $r14 = ";";
  } else {
    if (!$silence) {$this->fail(19);}
    $r14 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r15 = $this->discard_($silence);
  if ($r15===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a11($r6, $r8, $r11);
  }
  // free $p3
  return $r1;
}
private function parseEnum($silence) {
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "enum", $this->currPos, 4, false) === 0) {
    $r4 = "enum";
    $this->currPos += 4;
  } else {
    if (!$silence) {$this->fail(22);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->discardi_($silence);
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r6 = $this->parseidentifier($silence);
  // name <- $r6
  if ($r6===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r7 = $this->discard_($silence);
  if ($r7===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === "{") {
    $this->currPos++;
    $r8 = "{";
  } else {
    if (!$silence) {$this->fail(17);}
    $r8 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r9 = $this->discard_($silence);
  if ($r9===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r10 = $this->parseEnumValueList($silence);
  // vals <- $r10
  if ($r10===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === "}") {
    $this->currPos++;
    $r11 = "}";
  } else {
    if (!$silence) {$this->fail(18);}
    $r11 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r12 = $this->discard_($silence);
  if ($r12===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === ";") {
    $this->currPos++;
    $r13 = ";";
  } else {
    if (!$silence) {$this->fail(19);}
    $r13 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r14 = $this->discard_($silence);
  if ($r14===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {
    $this->savedPos = $p2;
    $r1 = $this->a12($r6, $r10);
  }
  // free $p3
  return $r1;
}
private function parseTypedef($silence) {
  $p2 = $this->currPos;
  // start seq_1
  $p3 = $this->currPos;
  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "typedef", $this->currPos, 7, false) === 0) {
    $r4 = "typedef";
    $this->currPos += 7;
  } else {
    if (!$silence) {$this->fail(23);}
    $r4 = self::$FAILED;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r5 = $this->discardi_($silence);
  if ($r5===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r6 = $this->parseTypeWithExtendedAttributes($silence);
  // t <- $r6
  if ($r6===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r7 = $this->parseidentifier($silence);
  // name <- $r7
  if ($r7===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r8 = $this->discard_($silence);
  if ($r8===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  if (($this->input[$this->currPos] ?? null) === ";") {
    $this->currPos++;
    $r9 = ";";
  } else {
    if (!$silence) {$this->fail(19);}
    $r9 = self::$FAILED;
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r10 = $this->discard_($silence);
  if ($r10===self::$FAILED) {
    $this->currPos = $p3;
    $r1 = self::$FAILED;
    goto seq_1;
  }
  $r1 = true;
  seq_1:
  if ($r1!==self::$FAILED) {