From 524625609a34a81d212ee47f34ee77b33ac58948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= Date: Wed, 24 Aug 2022 11:10:09 +0300 Subject: [PATCH] Remove unused IDL scripts (IDL changes are now maintained by hand) --- idl/WebIDL.py | 8748 ------------------------------- idl/common.idl | 9 - idl/parser.out | 9787 ----------------------------------- idl/ply/ANNOUNCE | 40 - idl/ply/CHANGES | 1093 ---- idl/ply/PKG-INFO | 22 - idl/ply/README | 271 - idl/ply/TODO | 16 - idl/ply/ply/__init__.py | 4 - idl/ply/ply/cpp.py | 898 ---- idl/ply/ply/ctokens.py | 133 - idl/ply/ply/lex.py | 1058 ---- idl/ply/ply/yacc.py | 3276 ------------ idl/webgpu_api_generator.py | 78 - 14 files changed, 25433 deletions(-) delete mode 100644 idl/WebIDL.py delete mode 100644 idl/common.idl delete mode 100644 idl/parser.out delete mode 100644 idl/ply/ANNOUNCE delete mode 100644 idl/ply/CHANGES delete mode 100644 idl/ply/PKG-INFO delete mode 100644 idl/ply/README delete mode 100644 idl/ply/TODO delete mode 100644 idl/ply/ply/__init__.py delete mode 100644 idl/ply/ply/cpp.py delete mode 100644 idl/ply/ply/ctokens.py delete mode 100644 idl/ply/ply/lex.py delete mode 100644 idl/ply/ply/yacc.py delete mode 100644 idl/webgpu_api_generator.py diff --git a/idl/WebIDL.py b/idl/WebIDL.py deleted file mode 100644 index bbcfbba..0000000 --- a/idl/WebIDL.py +++ /dev/null @@ -1,8748 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -""" A WebIDL parser. """ - -from __future__ import print_function -from ply import lex, yacc -import re -import os -import traceback -import math -import string -from collections import defaultdict, OrderedDict -from itertools import chain - -# Machinery - - -def parseInt(literal): - string = literal - sign = 0 - base = 0 - - if string[0] == "-": - sign = -1 - string = string[1:] - else: - sign = 1 - - if string[0] == "0" and len(string) > 1: - if string[1] == "x" or string[1] == "X": - base = 16 - string = string[2:] - else: - base = 8 - string = string[1:] - else: - base = 10 - - value = int(string, base) - return value * sign - - -def enum(*names, **kw): - class Foo(object): - attrs = OrderedDict() - - def __init__(self, names): - for v, k in enumerate(names): - self.attrs[k] = v - - def __getattr__(self, attr): - if attr in self.attrs: - return self.attrs[attr] - raise AttributeError - - def __setattr__(self, name, value): # this makes it read-only - raise NotImplementedError - - if "base" not in kw: - return Foo(names) - return Foo(chain(kw["base"].attrs.keys(), names)) - - -class WebIDLError(Exception): - def __init__(self, message, locations, warning=False): - self.message = message - self.locations = [str(loc) for loc in locations] - self.warning = warning - - def __str__(self): - return "%s: %s%s%s" % ( - self.warning and "warning" or "error", - self.message, - ", " if len(self.locations) != 0 else "", - "\n".join(self.locations), - ) - - -class Location(object): - def __init__(self, lexer, lineno, lexpos, filename): - self._line = None - self._lineno = lineno - self._lexpos = lexpos - self._lexdata = lexer.lexdata - self._file = filename if filename else "" - - def __eq__(self, other): - return self._lexpos == other._lexpos and self._file == other._file - - def filename(self): - return self._file - - def resolve(self): - if self._line: - return - - startofline = self._lexdata.rfind("\n", 0, self._lexpos) + 1 - endofline = self._lexdata.find("\n", self._lexpos, self._lexpos + 80) - if endofline != -1: - self._line = self._lexdata[startofline:endofline] - else: - self._line = self._lexdata[startofline:] - self._colno = self._lexpos - startofline - - # Our line number seems to point to the start of self._lexdata - self._lineno += self._lexdata.count("\n", 0, startofline) - - def get(self): - self.resolve() - return "%s line %s:%s" % (self._file, self._lineno, self._colno) - - def _pointerline(self): - return " " * self._colno + "^" - - def __str__(self): - self.resolve() - return "%s line %s:%s\n%s\n%s" % ( - self._file, - self._lineno, - self._colno, - self._line, - self._pointerline(), - ) - - -class BuiltinLocation(object): - def __init__(self, text): - self.msg = text + "\n" - - def __eq__(self, other): - return isinstance(other, BuiltinLocation) and self.msg == other.msg - - def filename(self): - return "" - - def resolve(self): - pass - - def get(self): - return self.msg - - def __str__(self): - return self.get() - - -# Data Model - - -class IDLObject(object): - def __init__(self, location): - self.location = location - self.userData = dict() - - def filename(self): - return self.location.filename() - - def isInterface(self): - return False - - def isNamespace(self): - return False - - def isInterfaceMixin(self): - return False - - def isEnum(self): - return False - - def isCallback(self): - return False - - def isType(self): - return False - - def isDictionary(self): - return False - - def isUnion(self): - return False - - def isTypedef(self): - return False - - def getUserData(self, key, default): - return self.userData.get(key, default) - - def setUserData(self, key, value): - self.userData[key] = value - - def addExtendedAttributes(self, attrs): - assert False # Override me! - - def handleExtendedAttribute(self, attr): - assert False # Override me! - - def _getDependentObjects(self): - assert False # Override me! - - def getDeps(self, visited=None): - """Return a set of files that this object depends on. If any of - these files are changed the parser needs to be rerun to regenerate - a new IDLObject. - - The visited argument is a set of all the objects already visited. - We must test to see if we are in it, and if so, do nothing. This - prevents infinite recursion.""" - - # NB: We can't use visited=set() above because the default value is - # evaluated when the def statement is evaluated, not when the function - # is executed, so there would be one set for all invocations. - if visited is None: - visited = set() - - if self in visited: - return set() - - visited.add(self) - - deps = set() - if self.filename() != "": - deps.add(self.filename()) - - for d in self._getDependentObjects(): - deps.update(d.getDeps(visited)) - - return deps - - -class IDLScope(IDLObject): - def __init__(self, location, parentScope, identifier): - IDLObject.__init__(self, location) - - self.parentScope = parentScope - if identifier: - assert isinstance(identifier, IDLIdentifier) - self._name = identifier - else: - self._name = None - - self._dict = {} - self.globalNames = set() - # A mapping from global name to the set of global interfaces - # that have that global name. - self.globalNameMapping = defaultdict(set) - - def __str__(self): - return self.QName() - - def QName(self): - # It's possible for us to be called before __init__ has been called, for - # the IDLObjectWithScope case. In that case, self._name won't be set yet. - if hasattr(self, "_name"): - name = self._name - else: - name = None - if name: - return name.QName() + "::" - return "::" - - def ensureUnique(self, identifier, object): - """ - Ensure that there is at most one 'identifier' in scope ('self'). - Note that object can be None. This occurs if we end up here for an - interface type we haven't seen yet. - """ - assert isinstance(identifier, IDLUnresolvedIdentifier) - assert not object or isinstance(object, IDLObjectWithIdentifier) - assert not object or object.identifier == identifier - - if identifier.name in self._dict: - if not object: - return - - # ensureUnique twice with the same object is not allowed - assert id(object) != id(self._dict[identifier.name]) - - replacement = self.resolveIdentifierConflict( - self, identifier, self._dict[identifier.name], object - ) - self._dict[identifier.name] = replacement - return - - assert object - - self._dict[identifier.name] = object - - def resolveIdentifierConflict(self, scope, identifier, originalObject, newObject): - if ( - isinstance(originalObject, IDLExternalInterface) - and isinstance(newObject, IDLExternalInterface) - and originalObject.identifier.name == newObject.identifier.name - ): - return originalObject - - if isinstance(originalObject, IDLExternalInterface) or isinstance( - newObject, IDLExternalInterface - ): - raise WebIDLError( - "Name collision between " - "interface declarations for identifier '%s' at '%s' and '%s'" - % (identifier.name, originalObject.location, newObject.location), - [], - ) - - if isinstance(originalObject, IDLDictionary) or isinstance( - newObject, IDLDictionary - ): - raise WebIDLError( - "Name collision between dictionary declarations for " - "identifier '%s'.\n%s\n%s" - % (identifier.name, originalObject.location, newObject.location), - [], - ) - - # We do the merging of overloads here as opposed to in IDLInterface - # because we need to merge overloads of LegacyFactoryFunctions and we need to - # detect conflicts in those across interfaces. See also the comment in - # IDLInterface.addExtendedAttributes for "LegacyFactoryFunction". - if isinstance(originalObject, IDLMethod) and isinstance(newObject, IDLMethod): - return originalObject.addOverload(newObject) - - # Default to throwing, derived classes can override. - conflictdesc = "\n\t%s at %s\n\t%s at %s" % ( - originalObject, - originalObject.location, - newObject, - newObject.location, - ) - - raise WebIDLError( - "Multiple unresolvable definitions of identifier '%s' in scope '%s'%s" - % (identifier.name, str(self), conflictdesc), - [], - ) - - def _lookupIdentifier(self, identifier): - return self._dict[identifier.name] - - def lookupIdentifier(self, identifier): - assert isinstance(identifier, IDLIdentifier) - assert identifier.scope == self - return self._lookupIdentifier(identifier) - - def addIfaceGlobalNames(self, interfaceName, globalNames): - """Record the global names (from |globalNames|) that can be used in - [Exposed] to expose things in a global named |interfaceName|""" - self.globalNames.update(globalNames) - for name in globalNames: - self.globalNameMapping[name].add(interfaceName) - - -class IDLIdentifier(IDLObject): - def __init__(self, location, scope, name): - IDLObject.__init__(self, location) - - self.name = name - assert isinstance(scope, IDLScope) - self.scope = scope - - def __str__(self): - return self.QName() - - def QName(self): - return self.scope.QName() + self.name - - def __hash__(self): - return self.QName().__hash__() - - def __eq__(self, other): - return self.QName() == other.QName() - - def object(self): - return self.scope.lookupIdentifier(self) - - -class IDLUnresolvedIdentifier(IDLObject): - def __init__( - self, location, name, allowDoubleUnderscore=False, allowForbidden=False - ): - IDLObject.__init__(self, location) - - assert len(name) > 0 - - if name == "__noSuchMethod__": - raise WebIDLError("__noSuchMethod__ is deprecated", [location]) - - if name[:2] == "__" and not allowDoubleUnderscore: - raise WebIDLError("Identifiers beginning with __ are reserved", [location]) - if name[0] == "_" and not allowDoubleUnderscore: - name = name[1:] - if name in ["constructor", "toString"] and not allowForbidden: - raise WebIDLError( - "Cannot use reserved identifier '%s'" % (name), [location] - ) - - self.name = name - - def __str__(self): - return self.QName() - - def QName(self): - return "::" + self.name - - def resolve(self, scope, object): - assert isinstance(scope, IDLScope) - assert not object or isinstance(object, IDLObjectWithIdentifier) - assert not object or object.identifier == self - - scope.ensureUnique(self, object) - - identifier = IDLIdentifier(self.location, scope, self.name) - if object: - object.identifier = identifier - return identifier - - def finish(self): - assert False # Should replace with a resolved identifier first. - - -class IDLObjectWithIdentifier(IDLObject): - def __init__(self, location, parentScope, identifier): - IDLObject.__init__(self, location) - - assert isinstance(identifier, IDLUnresolvedIdentifier) - - self.identifier = identifier - - if parentScope: - self.resolve(parentScope) - - def resolve(self, parentScope): - assert isinstance(parentScope, IDLScope) - assert isinstance(self.identifier, IDLUnresolvedIdentifier) - self.identifier.resolve(parentScope, self) - - -class IDLObjectWithScope(IDLObjectWithIdentifier, IDLScope): - def __init__(self, location, parentScope, identifier): - assert isinstance(identifier, IDLUnresolvedIdentifier) - - IDLObjectWithIdentifier.__init__(self, location, parentScope, identifier) - IDLScope.__init__(self, location, parentScope, self.identifier) - - -class IDLIdentifierPlaceholder(IDLObjectWithIdentifier): - def __init__(self, location, identifier): - assert isinstance(identifier, IDLUnresolvedIdentifier) - IDLObjectWithIdentifier.__init__(self, location, None, identifier) - - def finish(self, scope): - try: - scope._lookupIdentifier(self.identifier) - except: - raise WebIDLError( - "Unresolved type '%s'." % self.identifier, [self.location] - ) - - obj = self.identifier.resolve(scope, None) - return scope.lookupIdentifier(obj) - - -class IDLExposureMixins: - def __init__(self, location): - # _exposureGlobalNames are the global names listed in our [Exposed] - # extended attribute. exposureSet is the exposure set as defined in the - # Web IDL spec: it contains interface names. - self._exposureGlobalNames = set() - self.exposureSet = set() - self._location = location - self._globalScope = None - - def finish(self, scope): - assert scope.parentScope is None - self._globalScope = scope - - # Verify that our [Exposed] value, if any, makes sense. - for globalName in self._exposureGlobalNames: - if globalName not in scope.globalNames: - raise WebIDLError( - "Unknown [Exposed] value %s" % globalName, [self._location] - ) - - # Verify that we are exposed _somwhere_ if we have some place to be - # exposed. We don't want to assert that we're definitely exposed - # because a lot of our parser tests have small-enough IDL snippets that - # they don't include any globals, and we don't really want to go through - # and add global interfaces and [Exposed] annotations to all those - # tests. - if len(scope.globalNames) != 0: - if len(self._exposureGlobalNames) == 0: - raise WebIDLError( - ( - "'%s' is not exposed anywhere even though we have " - "globals to be exposed to" - ) - % self, - [self.location], - ) - - globalNameSetToExposureSet(scope, self._exposureGlobalNames, self.exposureSet) - - def isExposedInWindow(self): - return "Window" in self.exposureSet - - def isExposedInAnyWorker(self): - return len(self.getWorkerExposureSet()) > 0 - - def isExposedInWorkerDebugger(self): - return len(self.getWorkerDebuggerExposureSet()) > 0 - - def isExposedInAnyWorklet(self): - return len(self.getWorkletExposureSet()) > 0 - - def isExposedInSomeButNotAllWorkers(self): - """ - Returns true if the Exposed extended attribute for this interface - exposes it in some worker globals but not others. The return value does - not depend on whether the interface is exposed in Window or System - globals. - """ - if not self.isExposedInAnyWorker(): - return False - workerScopes = self.parentScope.globalNameMapping["Worker"] - return len(workerScopes.difference(self.exposureSet)) > 0 - - def getWorkerExposureSet(self): - workerScopes = self._globalScope.globalNameMapping["Worker"] - return workerScopes.intersection(self.exposureSet) - - def getWorkletExposureSet(self): - workletScopes = self._globalScope.globalNameMapping["Worklet"] - return workletScopes.intersection(self.exposureSet) - - def getWorkerDebuggerExposureSet(self): - workerDebuggerScopes = self._globalScope.globalNameMapping["WorkerDebugger"] - return workerDebuggerScopes.intersection(self.exposureSet) - - -class IDLExternalInterface(IDLObjectWithIdentifier): - def __init__(self, location, parentScope, identifier): - assert isinstance(identifier, IDLUnresolvedIdentifier) - assert isinstance(parentScope, IDLScope) - self.parent = None - IDLObjectWithIdentifier.__init__(self, location, parentScope, identifier) - IDLObjectWithIdentifier.resolve(self, parentScope) - - def finish(self, scope): - pass - - def validate(self): - pass - - def isIteratorInterface(self): - return False - - def isExternal(self): - return True - - def isInterface(self): - return True - - def addExtendedAttributes(self, attrs): - if len(attrs) != 0: - raise WebIDLError( - "There are no extended attributes that are " - "allowed on external interfaces", - [attrs[0].location, self.location], - ) - - def resolve(self, parentScope): - pass - - def getJSImplementation(self): - return None - - def isJSImplemented(self): - return False - - def hasProbablyShortLivingWrapper(self): - return False - - def _getDependentObjects(self): - return set() - - -class IDLPartialDictionary(IDLObject): - def __init__(self, location, name, members, nonPartialDictionary): - assert isinstance(name, IDLUnresolvedIdentifier) - - IDLObject.__init__(self, location) - self.identifier = name - self.members = members - self._nonPartialDictionary = nonPartialDictionary - self._finished = False - nonPartialDictionary.addPartialDictionary(self) - - def addExtendedAttributes(self, attrs): - pass - - def finish(self, scope): - if self._finished: - return - self._finished = True - - # Need to make sure our non-partial dictionary gets - # finished so it can report cases when we only have partial - # dictionaries. - self._nonPartialDictionary.finish(scope) - - def validate(self): - pass - - -class IDLPartialInterfaceOrNamespace(IDLObject): - def __init__(self, location, name, members, nonPartialInterfaceOrNamespace): - assert isinstance(name, IDLUnresolvedIdentifier) - - IDLObject.__init__(self, location) - self.identifier = name - self.members = members - # propagatedExtendedAttrs are the ones that should get - # propagated to our non-partial interface. - self.propagatedExtendedAttrs = [] - self._haveSecureContextExtendedAttribute = False - self._nonPartialInterfaceOrNamespace = nonPartialInterfaceOrNamespace - self._finished = False - nonPartialInterfaceOrNamespace.addPartial(self) - - def addExtendedAttributes(self, attrs): - for attr in attrs: - identifier = attr.identifier() - - if identifier == "LegacyFactoryFunction": - self.propagatedExtendedAttrs.append(attr) - elif identifier == "SecureContext": - self._haveSecureContextExtendedAttribute = True - # This gets propagated to all our members. - for member in self.members: - if member.getExtendedAttribute("SecureContext"): - raise WebIDLError( - "[SecureContext] specified on both a " - "partial interface member and on the " - "partial interface itself", - [member.location, attr.location], - ) - member.addExtendedAttributes([attr]) - elif identifier == "Exposed": - # This just gets propagated to all our members. - for member in self.members: - if len(member._exposureGlobalNames) != 0: - raise WebIDLError( - "[Exposed] specified on both a " - "partial interface member and on the " - "partial interface itself", - [member.location, attr.location], - ) - member.addExtendedAttributes([attr]) - else: - raise WebIDLError( - "Unknown extended attribute %s on partial " - "interface" % identifier, - [attr.location], - ) - - def finish(self, scope): - if self._finished: - return - self._finished = True - if ( - not self._haveSecureContextExtendedAttribute - and self._nonPartialInterfaceOrNamespace.getExtendedAttribute( - "SecureContext" - ) - ): - # This gets propagated to all our members. - for member in self.members: - if member.getExtendedAttribute("SecureContext"): - raise WebIDLError( - "[SecureContext] specified on both a " - "partial interface member and on the " - "non-partial interface", - [ - member.location, - self._nonPartialInterfaceOrNamespace.location, - ], - ) - member.addExtendedAttributes( - [ - IDLExtendedAttribute( - self._nonPartialInterfaceOrNamespace.location, - ("SecureContext",), - ) - ] - ) - # Need to make sure our non-partial interface or namespace gets - # finished so it can report cases when we only have partial - # interfaces/namespaces. - self._nonPartialInterfaceOrNamespace.finish(scope) - - def validate(self): - pass - - -def convertExposedAttrToGlobalNameSet(exposedAttr, targetSet): - assert len(targetSet) == 0 - if exposedAttr.hasValue(): - targetSet.add(exposedAttr.value()) - else: - assert exposedAttr.hasArgs() - targetSet.update(exposedAttr.args()) - - -def globalNameSetToExposureSet(globalScope, nameSet, exposureSet): - for name in nameSet: - exposureSet.update(globalScope.globalNameMapping[name]) - - -class IDLInterfaceOrInterfaceMixinOrNamespace(IDLObjectWithScope, IDLExposureMixins): - def __init__(self, location, parentScope, name): - assert isinstance(parentScope, IDLScope) - assert isinstance(name, IDLUnresolvedIdentifier) - - self._finished = False - self.members = [] - self._partials = [] - self._extendedAttrDict = {} - self._isKnownNonPartial = False - - IDLObjectWithScope.__init__(self, location, parentScope, name) - IDLExposureMixins.__init__(self, location) - - def finish(self, scope): - if not self._isKnownNonPartial: - raise WebIDLError( - "%s does not have a non-partial declaration" % str(self), - [self.location], - ) - - IDLExposureMixins.finish(self, scope) - - # Now go ahead and merge in our partials. - for partial in self._partials: - partial.finish(scope) - self.addExtendedAttributes(partial.propagatedExtendedAttrs) - self.members.extend(partial.members) - - def resolveIdentifierConflict(self, scope, identifier, originalObject, newObject): - assert isinstance(scope, IDLScope) - assert isinstance(originalObject, IDLInterfaceMember) - assert isinstance(newObject, IDLInterfaceMember) - - retval = IDLScope.resolveIdentifierConflict( - self, scope, identifier, originalObject, newObject - ) - - # Might be a ctor, which isn't in self.members - if newObject in self.members: - self.members.remove(newObject) - return retval - - def typeName(self): - if self.isInterface(): - return "interface" - if self.isNamespace(): - return "namespace" - assert self.isInterfaceMixin() - return "interface mixin" - - def getExtendedAttribute(self, name): - return self._extendedAttrDict.get(name, None) - - def setNonPartial(self, location, members): - if self._isKnownNonPartial: - raise WebIDLError( - "Two non-partial definitions for the " "same %s" % self.typeName(), - [location, self.location], - ) - self._isKnownNonPartial = True - # Now make it look like we were parsed at this new location, since - # that's the place where the interface is "really" defined - self.location = location - # Put the new members at the beginning - self.members = members + self.members - - def addPartial(self, partial): - assert self.identifier.name == partial.identifier.name - self._partials.append(partial) - - def getPartials(self): - # Don't let people mutate our guts. - return list(self._partials) - - def finishMembers(self, scope): - # Assuming we've merged in our partials, set the _exposureGlobalNames on - # any members that don't have it set yet. Note that any partial - # interfaces that had [Exposed] set have already set up - # _exposureGlobalNames on all the members coming from them, so this is - # just implementing the "members default to interface or interface mixin - # that defined them" and "partial interfaces or interface mixins default - # to interface or interface mixin they're a partial for" rules from the - # spec. - for m in self.members: - # If m, or the partial m came from, had [Exposed] - # specified, it already has a nonempty exposure global names set. - if len(m._exposureGlobalNames) == 0: - m._exposureGlobalNames.update(self._exposureGlobalNames) - if m.isAttr() and m.stringifier: - m.expand(self.members) - - # resolve() will modify self.members, so we need to iterate - # over a copy of the member list here. - for member in list(self.members): - member.resolve(self) - - for member in self.members: - member.finish(scope) - - # Now that we've finished our members, which has updated their exposure - # sets, make sure they aren't exposed in places where we are not. - for member in self.members: - if not member.exposureSet.issubset(self.exposureSet): - raise WebIDLError( - "Interface or interface mixin member has " - "larger exposure set than its container", - [member.location, self.location], - ) - - def isExternal(self): - return False - - -class IDLInterfaceMixin(IDLInterfaceOrInterfaceMixinOrNamespace): - def __init__(self, location, parentScope, name, members, isKnownNonPartial): - self.actualExposureGlobalNames = set() - - assert isKnownNonPartial or len(members) == 0 - IDLInterfaceOrInterfaceMixinOrNamespace.__init__( - self, location, parentScope, name - ) - - if isKnownNonPartial: - self.setNonPartial(location, members) - - def __str__(self): - return "Interface mixin '%s'" % self.identifier.name - - def isInterfaceMixin(self): - return True - - def finish(self, scope): - if self._finished: - return - self._finished = True - - # Expose to the globals of interfaces that includes this mixin if this - # mixin has no explicit [Exposed] so that its members can be exposed - # based on the base interface exposure set. - # - # Make sure this is done before IDLExposureMixins.finish call, since - # that converts our set of exposure global names to an actual exposure - # set. - hasImplicitExposure = len(self._exposureGlobalNames) == 0 - if hasImplicitExposure: - self._exposureGlobalNames.update(self.actualExposureGlobalNames) - - IDLInterfaceOrInterfaceMixinOrNamespace.finish(self, scope) - - self.finishMembers(scope) - - def validate(self): - for member in self.members: - - if member.isAttr(): - if member.inherit: - raise WebIDLError( - "Interface mixin member cannot include " - "an inherited attribute", - [member.location, self.location], - ) - if member.isStatic(): - raise WebIDLError( - "Interface mixin member cannot include " "a static member", - [member.location, self.location], - ) - - if member.isMethod(): - if member.isStatic(): - raise WebIDLError( - "Interface mixin member cannot include " "a static operation", - [member.location, self.location], - ) - if ( - member.isGetter() - or member.isSetter() - or member.isDeleter() - or member.isLegacycaller() - ): - raise WebIDLError( - "Interface mixin member cannot include a " "special operation", - [member.location, self.location], - ) - - def addExtendedAttributes(self, attrs): - for attr in attrs: - identifier = attr.identifier() - - if identifier == "SecureContext": - if not attr.noArguments(): - raise WebIDLError( - "[%s] must take no arguments" % identifier, [attr.location] - ) - # This gets propagated to all our members. - for member in self.members: - if member.getExtendedAttribute("SecureContext"): - raise WebIDLError( - "[SecureContext] specified on both " - "an interface mixin member and on" - "the interface mixin itself", - [member.location, attr.location], - ) - member.addExtendedAttributes([attr]) - elif identifier == "Exposed": - convertExposedAttrToGlobalNameSet(attr, self._exposureGlobalNames) - else: - raise WebIDLError( - "Unknown extended attribute %s on interface" % identifier, - [attr.location], - ) - - attrlist = attr.listValue() - self._extendedAttrDict[identifier] = attrlist if len(attrlist) else True - - def _getDependentObjects(self): - return set(self.members) - - -class IDLInterfaceOrNamespace(IDLInterfaceOrInterfaceMixinOrNamespace): - def __init__(self, location, parentScope, name, parent, members, isKnownNonPartial): - assert isKnownNonPartial or not parent - assert isKnownNonPartial or len(members) == 0 - - self.parent = None - self._callback = False - self.maplikeOrSetlikeOrIterable = None - # namedConstructors needs deterministic ordering because bindings code - # outputs the constructs in the order that namedConstructors enumerates - # them. - self.legacyFactoryFunctions = list() - self.legacyWindowAliases = [] - self.includedMixins = set() - # self.interfacesBasedOnSelf is the set of interfaces that inherit from - # self, including self itself. - # Used for distinguishability checking. - self.interfacesBasedOnSelf = set([self]) - self._hasChildInterfaces = False - self._isOnGlobalProtoChain = False - # Tracking of the number of reserved slots we need for our - # members and those of ancestor interfaces. - self.totalMembersInSlots = 0 - # Tracking of the number of own own members we have in slots - self._ownMembersInSlots = 0 - # If this is an iterator interface, we need to know what iterable - # interface we're iterating for in order to get its nativeType. - self.iterableInterface = None - # True if we have cross-origin members. - self.hasCrossOriginMembers = False - # True if some descendant (including ourselves) has cross-origin members - self.hasDescendantWithCrossOriginMembers = False - - IDLInterfaceOrInterfaceMixinOrNamespace.__init__( - self, location, parentScope, name - ) - - if isKnownNonPartial: - self.setNonPartial(location, parent, members) - - def ctor(self): - identifier = IDLUnresolvedIdentifier( - self.location, "constructor", allowForbidden=True - ) - try: - return self._lookupIdentifier(identifier) - except: - return None - - def isIterable(self): - return ( - self.maplikeOrSetlikeOrIterable - and self.maplikeOrSetlikeOrIterable.isIterable() - ) - - def isIteratorInterface(self): - return self.iterableInterface is not None - - def finish(self, scope): - if self._finished: - return - - self._finished = True - - IDLInterfaceOrInterfaceMixinOrNamespace.finish(self, scope) - - if len(self.legacyWindowAliases) > 0: - if not self.hasInterfaceObject(): - raise WebIDLError( - "Interface %s unexpectedly has [LegacyWindowAlias] " - "and [LegacyNoInterfaceObject] together" % self.identifier.name, - [self.location], - ) - if not self.isExposedInWindow(): - raise WebIDLError( - "Interface %s has [LegacyWindowAlias] " - "but not exposed in Window" % self.identifier.name, - [self.location], - ) - - # Generate maplike/setlike interface members. Since generated members - # need to be treated like regular interface members, do this before - # things like exposure setting. - for member in self.members: - if member.isMaplikeOrSetlikeOrIterable(): - # Check that we only have one interface declaration (currently - # there can only be one maplike/setlike declaration per - # interface) - if self.maplikeOrSetlikeOrIterable: - raise WebIDLError( - "%s declaration used on " - "interface that already has %s " - "declaration" - % ( - member.maplikeOrSetlikeOrIterableType, - self.maplikeOrSetlikeOrIterable.maplikeOrSetlikeOrIterableType, - ), - [self.maplikeOrSetlikeOrIterable.location, member.location], - ) - self.maplikeOrSetlikeOrIterable = member - # If we've got a maplike or setlike declaration, we'll be building all of - # our required methods in Codegen. Generate members now. - self.maplikeOrSetlikeOrIterable.expand( - self.members, self.isJSImplemented() - ) - - assert not self.parent or isinstance(self.parent, IDLIdentifierPlaceholder) - parent = self.parent.finish(scope) if self.parent else None - if parent and isinstance(parent, IDLExternalInterface): - raise WebIDLError( - "%s inherits from %s which does not have " - "a definition" % (self.identifier.name, self.parent.identifier.name), - [self.location], - ) - if parent and not isinstance(parent, IDLInterface): - raise WebIDLError( - "%s inherits from %s which is not an interface " - % (self.identifier.name, self.parent.identifier.name), - [self.location, parent.location], - ) - - self.parent = parent - - assert iter(self.members) - - if self.isNamespace(): - assert not self.parent - for m in self.members: - if m.isAttr() or m.isMethod(): - if m.isStatic(): - raise WebIDLError( - "Don't mark things explicitly static " "in namespaces", - [self.location, m.location], - ) - # Just mark all our methods/attributes as static. The other - # option is to duplicate the relevant InterfaceMembers - # production bits but modified to produce static stuff to - # start with, but that sounds annoying. - m.forceStatic() - - if self.parent: - self.parent.finish(scope) - self.parent._hasChildInterfaces = True - - self.totalMembersInSlots = self.parent.totalMembersInSlots - - # Interfaces with [Global] must not have anything inherit from them - if self.parent.getExtendedAttribute("Global"): - # Note: This is not a self.parent.isOnGlobalProtoChain() check - # because ancestors of a [Global] interface can have other - # descendants. - raise WebIDLError( - "[Global] interface has another interface " "inheriting from it", - [self.location, self.parent.location], - ) - - # Make sure that we're not exposed in places where our parent is not - if not self.exposureSet.issubset(self.parent.exposureSet): - raise WebIDLError( - "Interface %s is exposed in globals where its " - "parent interface %s is not exposed." - % (self.identifier.name, self.parent.identifier.name), - [self.location, self.parent.location], - ) - - # Callbacks must not inherit from non-callbacks. - # XXXbz Can non-callbacks inherit from callbacks? Spec issue pending. - if self.isCallback(): - if not self.parent.isCallback(): - raise WebIDLError( - "Callback interface %s inheriting from " - "non-callback interface %s" - % (self.identifier.name, self.parent.identifier.name), - [self.location, self.parent.location], - ) - elif self.parent.isCallback(): - raise WebIDLError( - "Non-callback interface %s inheriting from " - "callback interface %s" - % (self.identifier.name, self.parent.identifier.name), - [self.location, self.parent.location], - ) - - # Interfaces which have interface objects can't inherit - # from [LegacyNoInterfaceObject] interfaces. - if self.parent.getExtendedAttribute( - "LegacyNoInterfaceObject" - ) and not self.getExtendedAttribute("LegacyNoInterfaceObject"): - raise WebIDLError( - "Interface %s does not have " - "[LegacyNoInterfaceObject] but inherits from " - "interface %s which does" - % (self.identifier.name, self.parent.identifier.name), - [self.location, self.parent.location], - ) - - # Interfaces that are not [SecureContext] can't inherit - # from [SecureContext] interfaces. - if self.parent.getExtendedAttribute( - "SecureContext" - ) and not self.getExtendedAttribute("SecureContext"): - raise WebIDLError( - "Interface %s does not have " - "[SecureContext] but inherits from " - "interface %s which does" - % (self.identifier.name, self.parent.identifier.name), - [self.location, self.parent.location], - ) - - for mixin in self.includedMixins: - mixin.finish(scope) - - cycleInGraph = self.findInterfaceLoopPoint(self) - if cycleInGraph: - raise WebIDLError( - "Interface %s has itself as ancestor" % self.identifier.name, - [self.location, cycleInGraph.location], - ) - - self.finishMembers(scope) - - ctor = self.ctor() - if ctor is not None: - if not self.hasInterfaceObject(): - raise WebIDLError( - "Can't have both a constructor and [LegacyNoInterfaceObject]", - [self.location, ctor.location], - ) - - if self.globalNames: - raise WebIDLError( - "Can't have both a constructor and [Global]", - [self.location, ctor.location], - ) - - assert ctor._exposureGlobalNames == self._exposureGlobalNames - ctor._exposureGlobalNames.update(self._exposureGlobalNames) - # Remove the constructor operation from our member list so - # it doesn't get in the way later. - self.members.remove(ctor) - - for ctor in self.legacyFactoryFunctions: - if self.globalNames: - raise WebIDLError( - "Can't have both a legacy factory function and [Global]", - [self.location, ctor.location], - ) - assert len(ctor._exposureGlobalNames) == 0 - ctor._exposureGlobalNames.update(self._exposureGlobalNames) - ctor.finish(scope) - - # Make a copy of our member list, so things that implement us - # can get those without all the stuff we implement ourselves - # admixed. - self.originalMembers = list(self.members) - - for mixin in sorted(self.includedMixins, key=lambda x: x.identifier.name): - for mixinMember in mixin.members: - for member in self.members: - if mixinMember.identifier.name == member.identifier.name: - raise WebIDLError( - "Multiple definitions of %s on %s coming from 'includes' statements" - % (member.identifier.name, self), - [mixinMember.location, member.location], - ) - self.members.extend(mixin.members) - - for ancestor in self.getInheritedInterfaces(): - ancestor.interfacesBasedOnSelf.add(self) - if ( - ancestor.maplikeOrSetlikeOrIterable is not None - and self.maplikeOrSetlikeOrIterable is not None - ): - raise WebIDLError( - "Cannot have maplike/setlike on %s that " - "inherits %s, which is already " - "maplike/setlike" - % (self.identifier.name, ancestor.identifier.name), - [ - self.maplikeOrSetlikeOrIterable.location, - ancestor.maplikeOrSetlikeOrIterable.location, - ], - ) - - # Deal with interfaces marked [LegacyUnforgeable], now that we have our full - # member list, except unforgeables pulled in from parents. We want to - # do this before we set "originatingInterface" on our unforgeable - # members. - if self.getExtendedAttribute("LegacyUnforgeable"): - # Check that the interface already has all the things the - # spec would otherwise require us to synthesize and is - # missing the ones we plan to synthesize. - if not any(m.isMethod() and m.isStringifier() for m in self.members): - raise WebIDLError( - "LegacyUnforgeable interface %s does not have a " - "stringifier" % self.identifier.name, - [self.location], - ) - - for m in self.members: - if m.identifier.name == "toJSON": - raise WebIDLError( - "LegacyUnforgeable interface %s has a " - "toJSON so we won't be able to add " - "one ourselves" % self.identifier.name, - [self.location, m.location], - ) - - if m.identifier.name == "valueOf" and not m.isStatic(): - raise WebIDLError( - "LegacyUnforgeable interface %s has a valueOf " - "member so we won't be able to add one " - "ourselves" % self.identifier.name, - [self.location, m.location], - ) - - for member in self.members: - if ( - (member.isAttr() or member.isMethod()) - and member.isLegacyUnforgeable() - and not hasattr(member, "originatingInterface") - ): - member.originatingInterface = self - - for member in self.members: - if ( - member.isMethod() and member.getExtendedAttribute("CrossOriginCallable") - ) or ( - member.isAttr() - and ( - member.getExtendedAttribute("CrossOriginReadable") - or member.getExtendedAttribute("CrossOriginWritable") - ) - ): - self.hasCrossOriginMembers = True - break - - if self.hasCrossOriginMembers: - parent = self - while parent: - parent.hasDescendantWithCrossOriginMembers = True - parent = parent.parent - - # Compute slot indices for our members before we pull in unforgeable - # members from our parent. Also, maplike/setlike declarations get a - # slot to hold their backing object. - for member in self.members: - if ( - member.isAttr() - and ( - member.getExtendedAttribute("StoreInSlot") - or member.getExtendedAttribute("Cached") - ) - ) or member.isMaplikeOrSetlike(): - if self.isJSImplemented() and not member.isMaplikeOrSetlike(): - raise WebIDLError( - "Interface %s is JS-implemented and we " - "don't support [Cached] or [StoreInSlot] " - "on JS-implemented interfaces" % self.identifier.name, - [self.location, member.location], - ) - if member.slotIndices is None: - member.slotIndices = dict() - member.slotIndices[self.identifier.name] = self.totalMembersInSlots - self.totalMembersInSlots += 1 - if member.getExtendedAttribute("StoreInSlot"): - self._ownMembersInSlots += 1 - - if self.parent: - # Make sure we don't shadow any of the [LegacyUnforgeable] attributes on our - # ancestor interfaces. We don't have to worry about mixins here, because - # those have already been imported into the relevant .members lists. And - # we don't have to worry about anything other than our parent, because it - # has already imported its ancestors' unforgeable attributes into its - # member list. - for unforgeableMember in ( - member - for member in self.parent.members - if (member.isAttr() or member.isMethod()) - and member.isLegacyUnforgeable() - ): - shadows = [ - m - for m in self.members - if (m.isAttr() or m.isMethod()) - and not m.isStatic() - and m.identifier.name == unforgeableMember.identifier.name - ] - if len(shadows) != 0: - locs = [unforgeableMember.location] + [s.location for s in shadows] - raise WebIDLError( - "Interface %s shadows [LegacyUnforgeable] " - "members of %s" - % (self.identifier.name, ancestor.identifier.name), - locs, - ) - # And now just stick it in our members, since we won't be - # inheriting this down the proto chain. If we really cared we - # could try to do something where we set up the unforgeable - # attributes/methods of ancestor interfaces, with their - # corresponding getters, on our interface, but that gets pretty - # complicated and seems unnecessary. - self.members.append(unforgeableMember) - - # At this point, we have all of our members. If the current interface - # uses maplike/setlike, check for collisions anywhere in the current - # interface or higher in the inheritance chain. - if self.maplikeOrSetlikeOrIterable: - testInterface = self - isAncestor = False - while testInterface: - self.maplikeOrSetlikeOrIterable.checkCollisions( - testInterface.members, isAncestor - ) - isAncestor = True - testInterface = testInterface.parent - - # Ensure that there's at most one of each {named,indexed} - # {getter,setter,deleter}, at most one stringifier, - # and at most one legacycaller. Note that this last is not - # quite per spec, but in practice no one overloads - # legacycallers. Also note that in practice we disallow - # indexed deleters, but it simplifies some other code to - # treat deleter analogously to getter/setter by - # prefixing it with "named". - specialMembersSeen = {} - for member in self.members: - if not member.isMethod(): - continue - - if member.isGetter(): - memberType = "getters" - elif member.isSetter(): - memberType = "setters" - elif member.isDeleter(): - memberType = "deleters" - elif member.isStringifier(): - memberType = "stringifiers" - elif member.isLegacycaller(): - memberType = "legacycallers" - else: - continue - - if memberType != "stringifiers" and memberType != "legacycallers": - if member.isNamed(): - memberType = "named " + memberType - else: - assert member.isIndexed() - memberType = "indexed " + memberType - - if memberType in specialMembersSeen: - raise WebIDLError( - "Multiple " + memberType + " on %s" % (self), - [ - self.location, - specialMembersSeen[memberType].location, - member.location, - ], - ) - - specialMembersSeen[memberType] = member - - if self.getExtendedAttribute("LegacyUnenumerableNamedProperties"): - # Check that we have a named getter. - if "named getters" not in specialMembersSeen: - raise WebIDLError( - "Interface with [LegacyUnenumerableNamedProperties] does " - "not have a named getter", - [self.location], - ) - ancestor = self.parent - while ancestor: - if ancestor.getExtendedAttribute("LegacyUnenumerableNamedProperties"): - raise WebIDLError( - "Interface with [LegacyUnenumerableNamedProperties] " - "inherits from another interface with " - "[LegacyUnenumerableNamedProperties]", - [self.location, ancestor.location], - ) - ancestor = ancestor.parent - - if self._isOnGlobalProtoChain: - # Make sure we have no named setters or deleters - for memberType in ["setter", "deleter"]: - memberId = "named " + memberType + "s" - if memberId in specialMembersSeen: - raise WebIDLError( - "Interface with [Global] has a named %s" % memberType, - [self.location, specialMembersSeen[memberId].location], - ) - # Make sure we're not [LegacyOverrideBuiltIns] - if self.getExtendedAttribute("LegacyOverrideBuiltIns"): - raise WebIDLError( - "Interface with [Global] also has " "[LegacyOverrideBuiltIns]", - [self.location], - ) - # Mark all of our ancestors as being on the global's proto chain too - parent = self.parent - while parent: - # Must not inherit from an interface with [LegacyOverrideBuiltIns] - if parent.getExtendedAttribute("LegacyOverrideBuiltIns"): - raise WebIDLError( - "Interface with [Global] inherits from " - "interface with [LegacyOverrideBuiltIns]", - [self.location, parent.location], - ) - parent._isOnGlobalProtoChain = True - parent = parent.parent - - def validate(self): - def checkDuplicateNames(member, name, attributeName): - for m in self.members: - if m.identifier.name == name: - raise WebIDLError( - "[%s=%s] has same name as interface member" - % (attributeName, name), - [member.location, m.location], - ) - if m.isMethod() and m != member and name in m.aliases: - raise WebIDLError( - "conflicting [%s=%s] definitions" % (attributeName, name), - [member.location, m.location], - ) - if m.isAttr() and m != member and name in m.bindingAliases: - raise WebIDLError( - "conflicting [%s=%s] definitions" % (attributeName, name), - [member.location, m.location], - ) - - # We also don't support inheriting from unforgeable interfaces. - if self.getExtendedAttribute("LegacyUnforgeable") and self.hasChildInterfaces(): - locations = [self.location] + list( - i.location for i in self.interfacesBasedOnSelf if i.parent == self - ) - raise WebIDLError( - "%s is an unforgeable ancestor interface" % self.identifier.name, - locations, - ) - - ctor = self.ctor() - if ctor is not None: - ctor.validate() - for namedCtor in self.legacyFactoryFunctions: - namedCtor.validate() - - indexedGetter = None - hasLengthAttribute = False - for member in self.members: - member.validate() - - if self.isCallback() and member.getExtendedAttribute("Replaceable"): - raise WebIDLError( - "[Replaceable] used on an attribute on " - "interface %s which is a callback interface" % self.identifier.name, - [self.location, member.location], - ) - - # Check that PutForwards refers to another attribute and that no - # cycles exist in forwarded assignments. Also check for a - # integer-typed "length" attribute. - if member.isAttr(): - if member.identifier.name == "length" and member.type.isInteger(): - hasLengthAttribute = True - - iface = self - attr = member - putForwards = attr.getExtendedAttribute("PutForwards") - if putForwards and self.isCallback(): - raise WebIDLError( - "[PutForwards] used on an attribute " - "on interface %s which is a callback " - "interface" % self.identifier.name, - [self.location, member.location], - ) - - while putForwards is not None: - forwardIface = attr.type.unroll().inner - fowardAttr = None - - for forwardedMember in forwardIface.members: - if ( - not forwardedMember.isAttr() - or forwardedMember.identifier.name != putForwards[0] - ): - continue - if forwardedMember == member: - raise WebIDLError( - "Cycle detected in forwarded " - "assignments for attribute %s on " - "%s" % (member.identifier.name, self), - [member.location], - ) - fowardAttr = forwardedMember - break - - if fowardAttr is None: - raise WebIDLError( - "Attribute %s on %s forwards to " - "missing attribute %s" - % (attr.identifier.name, iface, putForwards), - [attr.location], - ) - - iface = forwardIface - attr = fowardAttr - putForwards = attr.getExtendedAttribute("PutForwards") - - # Check that the name of an [Alias] doesn't conflict with an - # interface member and whether we support indexed properties. - if member.isMethod(): - if member.isGetter() and member.isIndexed(): - indexedGetter = member - - for alias in member.aliases: - if self.isOnGlobalProtoChain(): - raise WebIDLError( - "[Alias] must not be used on a " - "[Global] interface operation", - [member.location], - ) - if ( - member.getExtendedAttribute("Exposed") - or member.getExtendedAttribute("ChromeOnly") - or member.getExtendedAttribute("Pref") - or member.getExtendedAttribute("Func") - or member.getExtendedAttribute("SecureContext") - ): - raise WebIDLError( - "[Alias] must not be used on a " - "conditionally exposed operation", - [member.location], - ) - if member.isStatic(): - raise WebIDLError( - "[Alias] must not be used on a " "static operation", - [member.location], - ) - if member.isIdentifierLess(): - raise WebIDLError( - "[Alias] must not be used on an " - "identifierless operation", - [member.location], - ) - if member.isLegacyUnforgeable(): - raise WebIDLError( - "[Alias] must not be used on an " - "[LegacyUnforgeable] operation", - [member.location], - ) - - checkDuplicateNames(member, alias, "Alias") - - # Check that the name of a [BindingAlias] doesn't conflict with an - # interface member. - if member.isAttr(): - for bindingAlias in member.bindingAliases: - checkDuplicateNames(member, bindingAlias, "BindingAlias") - - # Conditional exposure makes no sense for interfaces with no - # interface object. - # And SecureContext makes sense for interfaces with no interface object, - # since it is also propagated to interface members. - if ( - self.isExposedConditionally(exclusions=["SecureContext"]) - and not self.hasInterfaceObject() - ): - raise WebIDLError( - "Interface with no interface object is " "exposed conditionally", - [self.location], - ) - - # Value iterators are only allowed on interfaces with indexed getters, - # and pair iterators are only allowed on interfaces without indexed - # getters. - if self.isIterable(): - iterableDecl = self.maplikeOrSetlikeOrIterable - if iterableDecl.isValueIterator(): - if not indexedGetter: - raise WebIDLError( - "Interface with value iterator does not " - "support indexed properties", - [self.location, iterableDecl.location], - ) - - if iterableDecl.valueType != indexedGetter.signatures()[0][0]: - raise WebIDLError( - "Iterable type does not match indexed " "getter type", - [iterableDecl.location, indexedGetter.location], - ) - - if not hasLengthAttribute: - raise WebIDLError( - "Interface with value iterator does not " - 'have an integer-typed "length" attribute', - [self.location, iterableDecl.location], - ) - else: - assert iterableDecl.isPairIterator() - if indexedGetter: - raise WebIDLError( - "Interface with pair iterator supports " "indexed properties", - [self.location, iterableDecl.location, indexedGetter.location], - ) - - if indexedGetter and not hasLengthAttribute: - raise WebIDLError( - "Interface with an indexed getter does not have " - 'an integer-typed "length" attribute', - [self.location, indexedGetter.location], - ) - - def setCallback(self, value): - self._callback = value - - def isCallback(self): - return self._callback - - def isSingleOperationInterface(self): - assert self.isCallback() or self.isJSImplemented() - return ( - # JS-implemented things should never need the - # this-handling weirdness of single-operation interfaces. - not self.isJSImplemented() - and - # Not inheriting from another interface - not self.parent - and - # No attributes of any kinds - not any(m.isAttr() for m in self.members) - and - # There is at least one regular operation, and all regular - # operations have the same identifier - len( - set( - m.identifier.name - for m in self.members - if m.isMethod() and not m.isStatic() - ) - ) - == 1 - ) - - def inheritanceDepth(self): - depth = 0 - parent = self.parent - while parent: - depth = depth + 1 - parent = parent.parent - return depth - - def hasConstants(self): - return any(m.isConst() for m in self.members) - - def hasInterfaceObject(self): - if self.isCallback(): - return self.hasConstants() - return not hasattr(self, "_noInterfaceObject") - - def hasInterfacePrototypeObject(self): - return ( - not self.isCallback() - and not self.isNamespace() - and self.getUserData("hasConcreteDescendant", False) - ) - - def addIncludedMixin(self, includedMixin): - assert isinstance(includedMixin, IDLInterfaceMixin) - self.includedMixins.add(includedMixin) - - def getInheritedInterfaces(self): - """ - Returns a list of the interfaces this interface inherits from - (not including this interface itself). The list is in order - from most derived to least derived. - """ - assert self._finished - if not self.parent: - return [] - parentInterfaces = self.parent.getInheritedInterfaces() - parentInterfaces.insert(0, self.parent) - return parentInterfaces - - def findInterfaceLoopPoint(self, otherInterface): - """ - Finds an interface amongst our ancestors that inherits from otherInterface. - If there is no such interface, returns None. - """ - if self.parent: - if self.parent == otherInterface: - return self - loopPoint = self.parent.findInterfaceLoopPoint(otherInterface) - if loopPoint: - return loopPoint - return None - - def setNonPartial(self, location, parent, members): - assert not parent or isinstance(parent, IDLIdentifierPlaceholder) - IDLInterfaceOrInterfaceMixinOrNamespace.setNonPartial(self, location, members) - assert not self.parent - self.parent = parent - - def getJSImplementation(self): - classId = self.getExtendedAttribute("JSImplementation") - if not classId: - return classId - assert isinstance(classId, list) - assert len(classId) == 1 - return classId[0] - - def isJSImplemented(self): - return bool(self.getJSImplementation()) - - def hasProbablyShortLivingWrapper(self): - current = self - while current: - if current.getExtendedAttribute("ProbablyShortLivingWrapper"): - return True - current = current.parent - return False - - def hasChildInterfaces(self): - return self._hasChildInterfaces - - def isOnGlobalProtoChain(self): - return self._isOnGlobalProtoChain - - def _getDependentObjects(self): - deps = set(self.members) - deps.update(self.includedMixins) - if self.parent: - deps.add(self.parent) - return deps - - def hasMembersInSlots(self): - return self._ownMembersInSlots != 0 - - conditionExtendedAttributes = ["Pref", "ChromeOnly", "Func", "SecureContext"] - - def isExposedConditionally(self, exclusions=[]): - return any( - ((not a in exclusions) and self.getExtendedAttribute(a)) - for a in self.conditionExtendedAttributes - ) - - -class IDLInterface(IDLInterfaceOrNamespace): - def __init__( - self, - location, - parentScope, - name, - parent, - members, - isKnownNonPartial, - classNameOverride=None, - ): - IDLInterfaceOrNamespace.__init__( - self, location, parentScope, name, parent, members, isKnownNonPartial - ) - self.classNameOverride = classNameOverride - - def __str__(self): - return "Interface '%s'" % self.identifier.name - - def isInterface(self): - return True - - def getClassName(self): - if self.classNameOverride: - return self.classNameOverride - return self.identifier.name - - def addExtendedAttributes(self, attrs): - for attr in attrs: - identifier = attr.identifier() - - # Special cased attrs - if identifier == "TreatNonCallableAsNull": - raise WebIDLError( - "TreatNonCallableAsNull cannot be specified on interfaces", - [attr.location, self.location], - ) - if identifier == "LegacyTreatNonObjectAsNull": - raise WebIDLError( - "LegacyTreatNonObjectAsNull cannot be specified on interfaces", - [attr.location, self.location], - ) - elif identifier == "LegacyNoInterfaceObject": - if not attr.noArguments(): - raise WebIDLError( - "[LegacyNoInterfaceObject] must take no arguments", - [attr.location], - ) - - self._noInterfaceObject = True - elif identifier == "LegacyFactoryFunction": - if not attr.hasValue(): - raise WebIDLError( - "LegacyFactoryFunction must either take an identifier or take a named argument list", - [attr.location], - ) - - args = attr.args() if attr.hasArgs() else [] - - retType = IDLWrapperType(self.location, self) - - method = IDLConstructor(attr.location, args, attr.value()) - method.reallyInit(self) - - # Named constructors are always assumed to be able to - # throw (since there's no way to indicate otherwise). - method.addExtendedAttributes( - [IDLExtendedAttribute(self.location, ("Throws",))] - ) - - # We need to detect conflicts for LegacyFactoryFunctions across - # interfaces. We first call resolve on the parentScope, - # which will merge all LegacyFactoryFunctions with the same - # identifier accross interfaces as overloads. - method.resolve(self.parentScope) - - # Then we look up the identifier on the parentScope. If the - # result is the same as the method we're adding then it - # hasn't been added as an overload and it's the first time - # we've encountered a LegacyFactoryFunction with that identifier. - # If the result is not the same as the method we're adding - # then it has been added as an overload and we need to check - # whether the result is actually one of our existing - # LegacyFactoryFunctions. - newMethod = self.parentScope.lookupIdentifier(method.identifier) - if newMethod == method: - self.legacyFactoryFunctions.append(method) - elif newMethod not in self.legacyFactoryFunctions: - raise WebIDLError( - "LegacyFactoryFunction conflicts with a " - "LegacyFactoryFunction of a different interface", - [method.location, newMethod.location], - ) - elif identifier == "ExceptionClass": - if not attr.noArguments(): - raise WebIDLError( - "[ExceptionClass] must take no arguments", [attr.location] - ) - if self.parent: - raise WebIDLError( - "[ExceptionClass] must not be specified on " - "an interface with inherited interfaces", - [attr.location, self.location], - ) - elif identifier == "Global": - if attr.hasValue(): - self.globalNames = [attr.value()] - elif attr.hasArgs(): - self.globalNames = attr.args() - else: - self.globalNames = [self.identifier.name] - self.parentScope.addIfaceGlobalNames( - self.identifier.name, self.globalNames - ) - self._isOnGlobalProtoChain = True - elif identifier == "LegacyWindowAlias": - if attr.hasValue(): - self.legacyWindowAliases = [attr.value()] - elif attr.hasArgs(): - self.legacyWindowAliases = attr.args() - else: - raise WebIDLError( - "[%s] must either take an identifier " - "or take an identifier list" % identifier, - [attr.location], - ) - for alias in self.legacyWindowAliases: - unresolved = IDLUnresolvedIdentifier(attr.location, alias) - IDLObjectWithIdentifier(attr.location, self.parentScope, unresolved) - elif identifier == "SecureContext": - if not attr.noArguments(): - raise WebIDLError( - "[%s] must take no arguments" % identifier, [attr.location] - ) - # This gets propagated to all our members. - for member in self.members: - if member.getExtendedAttribute("SecureContext"): - raise WebIDLError( - "[SecureContext] specified on both " - "an interface member and on the " - "interface itself", - [member.location, attr.location], - ) - member.addExtendedAttributes([attr]) - elif ( - identifier == "NeedResolve" - or identifier == "LegacyOverrideBuiltIns" - or identifier == "ChromeOnly" - or identifier == "LegacyUnforgeable" - or identifier == "LegacyEventInit" - or identifier == "ProbablyShortLivingWrapper" - or identifier == "LegacyUnenumerableNamedProperties" - or identifier == "RunConstructorInCallerCompartment" - or identifier == "WantsEventListenerHooks" - or identifier == "Serializable" - ): - # Known extended attributes that do not take values - if not attr.noArguments(): - raise WebIDLError( - "[%s] must take no arguments" % identifier, [attr.location] - ) - elif identifier == "Exposed": - convertExposedAttrToGlobalNameSet(attr, self._exposureGlobalNames) - elif ( - identifier == "Pref" - or identifier == "JSImplementation" - or identifier == "HeaderFile" - or identifier == "Func" - or identifier == "Deprecated" - ): - # Known extended attributes that take a string value - if not attr.hasValue(): - raise WebIDLError( - "[%s] must have a value" % identifier, [attr.location] - ) - elif identifier == "InstrumentedProps": - # Known extended attributes that take a list - if not attr.hasArgs(): - raise WebIDLError( - "[%s] must have arguments" % identifier, [attr.location] - ) - else: - raise WebIDLError( - "Unknown extended attribute %s on interface" % identifier, - [attr.location], - ) - - attrlist = attr.listValue() - self._extendedAttrDict[identifier] = attrlist if len(attrlist) else True - - def validate(self): - IDLInterfaceOrNamespace.validate(self) - if self.parent and self.isSerializable() and not self.parent.isSerializable(): - raise WebIDLError( - "Serializable interface inherits from non-serializable " - "interface. Per spec, that means the object should not be " - "serializable, so chances are someone made a mistake here " - "somewhere.", - [self.location, self.parent.location], - ) - - def isSerializable(self): - return self.getExtendedAttribute("Serializable") - - def setNonPartial(self, location, parent, members): - # Before we do anything else, finish initializing any constructors that - # might be in "members", so we don't have partially-initialized objects - # hanging around. We couldn't do it before now because we needed to have - # to have the IDLInterface on hand to properly set the return type. - for member in members: - if isinstance(member, IDLConstructor): - member.reallyInit(self) - - IDLInterfaceOrNamespace.setNonPartial(self, location, parent, members) - - -class IDLNamespace(IDLInterfaceOrNamespace): - def __init__(self, location, parentScope, name, members, isKnownNonPartial): - IDLInterfaceOrNamespace.__init__( - self, location, parentScope, name, None, members, isKnownNonPartial - ) - - def __str__(self): - return "Namespace '%s'" % self.identifier.name - - def isNamespace(self): - return True - - def addExtendedAttributes(self, attrs): - # The set of things namespaces support is small enough it's simpler - # to factor out into a separate method than it is to sprinkle - # isNamespace() checks all through - # IDLInterfaceOrNamespace.addExtendedAttributes. - for attr in attrs: - identifier = attr.identifier() - - if identifier == "Exposed": - convertExposedAttrToGlobalNameSet(attr, self._exposureGlobalNames) - elif identifier == "ClassString": - # Takes a string value to override the default "Object" if - # desired. - if not attr.hasValue(): - raise WebIDLError( - "[%s] must have a value" % identifier, [attr.location] - ) - elif identifier == "ProtoObjectHack" or identifier == "ChromeOnly": - if not attr.noArguments(): - raise WebIDLError( - "[%s] must not have arguments" % identifier, [attr.location] - ) - elif ( - identifier == "Pref" - or identifier == "HeaderFile" - or identifier == "Func" - ): - # Known extended attributes that take a string value - if not attr.hasValue(): - raise WebIDLError( - "[%s] must have a value" % identifier, [attr.location] - ) - else: - raise WebIDLError( - "Unknown extended attribute %s on namespace" % identifier, - [attr.location], - ) - - attrlist = attr.listValue() - self._extendedAttrDict[identifier] = attrlist if len(attrlist) else True - - def isSerializable(self): - return False - - -class IDLDictionary(IDLObjectWithScope): - def __init__(self, location, parentScope, name, parent, members): - assert isinstance(parentScope, IDLScope) - assert isinstance(name, IDLUnresolvedIdentifier) - assert not parent or isinstance(parent, IDLIdentifierPlaceholder) - - self.parent = parent - self._finished = False - self.members = list(members) - self._partialDictionaries = [] - self._extendedAttrDict = {} - self.needsConversionToJS = False - self.needsConversionFromJS = False - - IDLObjectWithScope.__init__(self, location, parentScope, name) - - def __str__(self): - return "Dictionary '%s'" % self.identifier.name - - def isDictionary(self): - return True - - def canBeEmpty(self): - """ - Returns true if this dictionary can be empty (that is, it has no - required members and neither do any of its ancestors). - """ - return all(member.optional for member in self.members) and ( - not self.parent or self.parent.canBeEmpty() - ) - - def finish(self, scope): - if self._finished: - return - - self._finished = True - - if self.parent: - assert isinstance(self.parent, IDLIdentifierPlaceholder) - oldParent = self.parent - self.parent = self.parent.finish(scope) - if not isinstance(self.parent, IDLDictionary): - raise WebIDLError( - "Dictionary %s has parent that is not a dictionary" - % self.identifier.name, - [oldParent.location, self.parent.location], - ) - - # Make sure the parent resolves all its members before we start - # looking at them. - self.parent.finish(scope) - - # Now go ahead and merge in our partial dictionaries. - for partial in self._partialDictionaries: - partial.finish(scope) - self.members.extend(partial.members) - - for member in self.members: - member.resolve(self) - if not member.isComplete(): - member.complete(scope) - assert member.type.isComplete() - - # Members of a dictionary are sorted in lexicographic order - self.members.sort(key=lambda x: x.identifier.name) - - inheritedMembers = [] - ancestor = self.parent - while ancestor: - if ancestor == self: - raise WebIDLError( - "Dictionary %s has itself as an ancestor" % self.identifier.name, - [self.identifier.location], - ) - inheritedMembers.extend(ancestor.members) - ancestor = ancestor.parent - - # Catch name duplication - for inheritedMember in inheritedMembers: - for member in self.members: - if member.identifier.name == inheritedMember.identifier.name: - raise WebIDLError( - "Dictionary %s has two members with name %s" - % (self.identifier.name, member.identifier.name), - [member.location, inheritedMember.location], - ) - - def validate(self): - def typeContainsDictionary(memberType, dictionary): - """ - Returns a tuple whose: - - - First element is a Boolean value indicating whether - memberType contains dictionary. - - - Second element is: - A list of locations that leads from the type that was passed in - the memberType argument, to the dictionary being validated, - if the boolean value in the first element is True. - - None, if the boolean value in the first element is False. - """ - - if ( - memberType.nullable() - or memberType.isSequence() - or memberType.isRecord() - ): - return typeContainsDictionary(memberType.inner, dictionary) - - if memberType.isDictionary(): - if memberType.inner == dictionary: - return (True, [memberType.location]) - - (contains, locations) = dictionaryContainsDictionary( - memberType.inner, dictionary - ) - if contains: - return (True, [memberType.location] + locations) - - if memberType.isUnion(): - for member in memberType.flatMemberTypes: - (contains, locations) = typeContainsDictionary(member, dictionary) - if contains: - return (True, locations) - - return (False, None) - - def dictionaryContainsDictionary(dictMember, dictionary): - for member in dictMember.members: - (contains, locations) = typeContainsDictionary(member.type, dictionary) - if contains: - return (True, [member.location] + locations) - - if dictMember.parent: - if dictMember.parent == dictionary: - return (True, [dictMember.location]) - else: - (contains, locations) = dictionaryContainsDictionary( - dictMember.parent, dictionary - ) - if contains: - return (True, [dictMember.location] + locations) - - return (False, None) - - for member in self.members: - if member.type.isDictionary() and member.type.nullable(): - raise WebIDLError( - "Dictionary %s has member with nullable " - "dictionary type" % self.identifier.name, - [member.location], - ) - (contains, locations) = typeContainsDictionary(member.type, self) - if contains: - raise WebIDLError( - "Dictionary %s has member with itself as type." - % self.identifier.name, - [member.location] + locations, - ) - - def getExtendedAttribute(self, name): - return self._extendedAttrDict.get(name, None) - - def addExtendedAttributes(self, attrs): - for attr in attrs: - identifier = attr.identifier() - - if identifier == "GenerateInitFromJSON" or identifier == "GenerateInit": - if not attr.noArguments(): - raise WebIDLError( - "[%s] must not have arguments" % identifier, [attr.location] - ) - self.needsConversionFromJS = True - elif ( - identifier == "GenerateConversionToJS" or identifier == "GenerateToJSON" - ): - if not attr.noArguments(): - raise WebIDLError( - "[%s] must not have arguments" % identifier, [attr.location] - ) - # ToJSON methods require to-JS conversion, because we - # implement ToJSON by converting to a JS object and - # then using JSON.stringify. - self.needsConversionToJS = True - else: - raise WebIDLError( - "[%s] extended attribute not allowed on " - "dictionaries" % identifier, - [attr.location], - ) - - self._extendedAttrDict[identifier] = True - - def _getDependentObjects(self): - deps = set(self.members) - if self.parent: - deps.add(self.parent) - return deps - - def addPartialDictionary(self, partial): - assert self.identifier.name == partial.identifier.name - self._partialDictionaries.append(partial) - - -class IDLEnum(IDLObjectWithIdentifier): - def __init__(self, location, parentScope, name, values): - assert isinstance(parentScope, IDLScope) - assert isinstance(name, IDLUnresolvedIdentifier) - - if len(values) != len(set(values)): - raise WebIDLError( - "Enum %s has multiple identical strings" % name.name, [location] - ) - - IDLObjectWithIdentifier.__init__(self, location, parentScope, name) - self._values = values - - def values(self): - return self._values - - def finish(self, scope): - pass - - def validate(self): - pass - - def isEnum(self): - return True - - def addExtendedAttributes(self, attrs): - if len(attrs) != 0: - raise WebIDLError( - "There are no extended attributes that are " "allowed on enums", - [attrs[0].location, self.location], - ) - - def _getDependentObjects(self): - return set() - - -class IDLType(IDLObject): - Tags = enum( - # The integer types - "int8", - "uint8", - "int16", - "uint16", - "int32", - "uint32", - "int64", - "uint64", - # Additional primitive types - "bool", - "unrestricted_float", - "float", - "unrestricted_double", - # "double" last primitive type to match IDLBuiltinType - "double", - # Other types - "any", - "domstring", - "bytestring", - "usvstring", - "utf8string", - "jsstring", - "object", - "void", - # Funny stuff - "interface", - "dictionary", - "enum", - "callback", - "union", - "sequence", - "record", - "promise", - ) - - def __init__(self, location, name): - IDLObject.__init__(self, location) - self.name = name - self.builtin = False - self.legacyNullToEmptyString = False - self._clamp = False - self._enforceRange = False - self._allowShared = False - self._extendedAttrDict = {} - - def __hash__(self): - return ( - hash(self.builtin) - + hash(self.name) - + hash(self._clamp) - + hash(self._enforceRange) - + hash(self.legacyNullToEmptyString) - + hash(self._allowShared) - ) - - def __eq__(self, other): - return ( - other - and self.builtin == other.builtin - and self.name == other.name - and self._clamp == other.hasClamp() - and self._enforceRange == other.hasEnforceRange() - and self.legacyNullToEmptyString == other.legacyNullToEmptyString - and self._allowShared == other.hasAllowShared() - ) - - def __ne__(self, other): - return not self == other - - def __str__(self): - return str(self.name) - - def prettyName(self): - """ - A name that looks like what this type is named in the IDL spec. By default - this is just our .name, but types that have more interesting spec - representations should override this. - """ - return str(self.name) - - def isType(self): - return True - - def nullable(self): - return False - - def isPrimitive(self): - return False - - def isBoolean(self): - return False - - def isNumeric(self): - return False - - def isString(self): - return False - - def isByteString(self): - return False - - def isDOMString(self): - return False - - def isUSVString(self): - return False - - def isUTF8String(self): - return False - - def isJSString(self): - return False - - def isVoid(self): - return self.name == "Void" - - def isSequence(self): - return False - - def isRecord(self): - return False - - def isReadableStream(self): - return False - - def isArrayBuffer(self): - return False - - def isArrayBufferView(self): - return False - - def isTypedArray(self): - return False - - def isBufferSource(self): - return self.isArrayBuffer() or self.isArrayBufferView() or self.isTypedArray() - - def isCallbackInterface(self): - return False - - def isNonCallbackInterface(self): - return False - - def isGeckoInterface(self): - """Returns a boolean indicating whether this type is an 'interface' - type that is implemented in Gecko. At the moment, this returns - true for all interface types that are not types from the TypedArray - spec.""" - return self.isInterface() and not self.isSpiderMonkeyInterface() - - def isSpiderMonkeyInterface(self): - """Returns a boolean indicating whether this type is an 'interface' - type that is implemented in SpiderMonkey.""" - return self.isInterface() and (self.isBufferSource() or self.isReadableStream()) - - def isAny(self): - return self.tag() == IDLType.Tags.any - - def isObject(self): - return self.tag() == IDLType.Tags.object - - def isPromise(self): - return False - - def isComplete(self): - return True - - def includesRestrictedFloat(self): - return False - - def isFloat(self): - return False - - def isUnrestricted(self): - # Should only call this on float types - assert self.isFloat() - - def isJSONType(self): - return False - - def hasClamp(self): - return self._clamp - - def hasEnforceRange(self): - return self._enforceRange - - def hasAllowShared(self): - return self._allowShared - - def tag(self): - assert False # Override me! - - def treatNonCallableAsNull(self): - assert self.tag() == IDLType.Tags.callback - return self.nullable() and self.inner.callback._treatNonCallableAsNull - - def treatNonObjectAsNull(self): - assert self.tag() == IDLType.Tags.callback - return self.nullable() and self.inner.callback._treatNonObjectAsNull - - def withExtendedAttributes(self, attrs): - if len(attrs) > 0: - raise WebIDLError( - "Extended attributes on types only supported for builtins", - [attrs[0].location, self.location], - ) - return self - - def getExtendedAttribute(self, name): - return self._extendedAttrDict.get(name, None) - - def resolveType(self, parentScope): - pass - - def unroll(self): - return self - - def isDistinguishableFrom(self, other): - raise TypeError( - "Can't tell whether a generic type is or is not " - "distinguishable from other things" - ) - - def isExposedInAllOf(self, exposureSet): - return True - - -class IDLUnresolvedType(IDLType): - """ - Unresolved types are interface types - """ - - def __init__(self, location, name, attrs=[]): - IDLType.__init__(self, location, name) - self.extraTypeAttributes = attrs - - def isComplete(self): - return False - - def complete(self, scope): - obj = None - try: - obj = scope._lookupIdentifier(self.name) - except: - raise WebIDLError("Unresolved type '%s'." % self.name, [self.location]) - - assert obj - if obj.isType(): - print(obj) - assert not obj.isType() - if obj.isTypedef(): - assert self.name.name == obj.identifier.name - typedefType = IDLTypedefType(self.location, obj.innerType, obj.identifier) - assert not typedefType.isComplete() - return typedefType.complete(scope).withExtendedAttributes( - self.extraTypeAttributes - ) - elif obj.isCallback() and not obj.isInterface(): - assert self.name.name == obj.identifier.name - return IDLCallbackType(self.location, obj) - - name = self.name.resolve(scope, None) - return IDLWrapperType(self.location, obj) - - def withExtendedAttributes(self, attrs): - return IDLUnresolvedType(self.location, self.name, attrs) - - def isDistinguishableFrom(self, other): - raise TypeError( - "Can't tell whether an unresolved type is or is not " - "distinguishable from other things" - ) - - -class IDLParametrizedType(IDLType): - def __init__(self, location, name, innerType): - IDLType.__init__(self, location, name) - self.builtin = False - self.inner = innerType - - def includesRestrictedFloat(self): - return self.inner.includesRestrictedFloat() - - def resolveType(self, parentScope): - assert isinstance(parentScope, IDLScope) - self.inner.resolveType(parentScope) - - def isComplete(self): - return self.inner.isComplete() - - def unroll(self): - return self.inner.unroll() - - def _getDependentObjects(self): - return self.inner._getDependentObjects() - - -class IDLNullableType(IDLParametrizedType): - def __init__(self, location, innerType): - assert not innerType.isVoid() - assert not innerType == BuiltinTypes[IDLBuiltinType.Types.any] - - IDLParametrizedType.__init__(self, location, None, innerType) - - def __hash__(self): - return hash(self.inner) - - def __eq__(self, other): - return isinstance(other, IDLNullableType) and self.inner == other.inner - - def __str__(self): - return self.inner.__str__() + "OrNull" - - def prettyName(self): - return self.inner.prettyName() + "?" - - def nullable(self): - return True - - def isCallback(self): - return self.inner.isCallback() - - def isPrimitive(self): - return self.inner.isPrimitive() - - def isBoolean(self): - return self.inner.isBoolean() - - def isNumeric(self): - return self.inner.isNumeric() - - def isString(self): - return self.inner.isString() - - def isByteString(self): - return self.inner.isByteString() - - def isDOMString(self): - return self.inner.isDOMString() - - def isUSVString(self): - return self.inner.isUSVString() - - def isUTF8String(self): - return self.inner.isUTF8String() - - def isJSString(self): - return self.inner.isJSString() - - def isFloat(self): - return self.inner.isFloat() - - def isUnrestricted(self): - return self.inner.isUnrestricted() - - def isInteger(self): - return self.inner.isInteger() - - def isVoid(self): - return False - - def isSequence(self): - return self.inner.isSequence() - - def isRecord(self): - return self.inner.isRecord() - - def isReadableStream(self): - return self.inner.isReadableStream() - - def isArrayBuffer(self): - return self.inner.isArrayBuffer() - - def isArrayBufferView(self): - return self.inner.isArrayBufferView() - - def isTypedArray(self): - return self.inner.isTypedArray() - - def isDictionary(self): - return self.inner.isDictionary() - - def isInterface(self): - return self.inner.isInterface() - - def isPromise(self): - # There is no such thing as a nullable Promise. - assert not self.inner.isPromise() - return False - - def isCallbackInterface(self): - return self.inner.isCallbackInterface() - - def isNonCallbackInterface(self): - return self.inner.isNonCallbackInterface() - - def isEnum(self): - return self.inner.isEnum() - - def isUnion(self): - return self.inner.isUnion() - - def isJSONType(self): - return self.inner.isJSONType() - - def hasClamp(self): - return self.inner.hasClamp() - - def hasEnforceRange(self): - return self.inner.hasEnforceRange() - - def hasAllowShared(self): - return self.inner.hasAllowShared() - - def isComplete(self): - return self.name is not None - - def tag(self): - return self.inner.tag() - - def complete(self, scope): - if not self.inner.isComplete(): - self.inner = self.inner.complete(scope) - assert self.inner.isComplete() - - if self.inner.nullable(): - raise WebIDLError( - "The inner type of a nullable type must not be " "a nullable type", - [self.location, self.inner.location], - ) - if self.inner.isUnion(): - if self.inner.hasNullableType: - raise WebIDLError( - "The inner type of a nullable type must not " - "be a union type that itself has a nullable " - "type as a member type", - [self.location], - ) - if self.inner.isDOMString(): - if self.inner.legacyNullToEmptyString: - raise WebIDLError( - "[LegacyNullToEmptyString] not allowed on a nullable DOMString", - [self.location, self.inner.location], - ) - - self.name = self.inner.name + "OrNull" - return self - - def isDistinguishableFrom(self, other): - if ( - other.nullable() - or other.isDictionary() - or ( - other.isUnion() and (other.hasNullableType or other.hasDictionaryType()) - ) - ): - # Can't tell which type null should become - return False - return self.inner.isDistinguishableFrom(other) - - def withExtendedAttributes(self, attrs): - # See https://github.com/heycam/webidl/issues/827#issuecomment-565131350 - # Allowing extended attributes to apply to a nullable type is an intermediate solution. - # A potential longer term solution is to introduce a null type and get rid of nullables. - # For example, we could do `([Clamp] long or null) foo` in the future. - return IDLNullableType(self.location, self.inner.withExtendedAttributes(attrs)) - - -class IDLSequenceType(IDLParametrizedType): - def __init__(self, location, parameterType): - assert not parameterType.isVoid() - - IDLParametrizedType.__init__(self, location, parameterType.name, parameterType) - # Need to set self.name up front if our inner type is already complete, - # since in that case our .complete() won't be called. - if self.inner.isComplete(): - self.name = self.inner.name + "Sequence" - - def __hash__(self): - return hash(self.inner) - - def __eq__(self, other): - return isinstance(other, IDLSequenceType) and self.inner == other.inner - - def __str__(self): - return self.inner.__str__() + "Sequence" - - def prettyName(self): - return "sequence<%s>" % self.inner.prettyName() - - def isVoid(self): - return False - - def isSequence(self): - return True - - def isJSONType(self): - return self.inner.isJSONType() - - def tag(self): - return IDLType.Tags.sequence - - def complete(self, scope): - self.inner = self.inner.complete(scope) - self.name = self.inner.name + "Sequence" - return self - - def isDistinguishableFrom(self, other): - if other.isPromise(): - return False - if other.isUnion(): - # Just forward to the union; it'll deal - return other.isDistinguishableFrom(self) - return ( - other.isPrimitive() - or other.isString() - or other.isEnum() - or other.isInterface() - or other.isDictionary() - or other.isCallback() - or other.isRecord() - ) - - -class IDLRecordType(IDLParametrizedType): - def __init__(self, location, keyType, valueType): - assert keyType.isString() - assert keyType.isComplete() - assert not valueType.isVoid() - - IDLParametrizedType.__init__(self, location, valueType.name, valueType) - self.keyType = keyType - - # Need to set self.name up front if our inner type is already complete, - # since in that case our .complete() won't be called. - if self.inner.isComplete(): - self.name = self.keyType.name + self.inner.name + "Record" - - def __hash__(self): - return hash(self.inner) - - def __eq__(self, other): - return isinstance(other, IDLRecordType) and self.inner == other.inner - - def __str__(self): - return self.keyType.__str__() + self.inner.__str__() + "Record" - - def prettyName(self): - return "record<%s, %s>" % (self.keyType.prettyName(), self.inner.prettyName()) - - def isRecord(self): - return True - - def isJSONType(self): - return self.inner.isJSONType() - - def tag(self): - return IDLType.Tags.record - - def complete(self, scope): - self.inner = self.inner.complete(scope) - self.name = self.keyType.name + self.inner.name + "Record" - return self - - def unroll(self): - # We do not unroll our inner. Just stop at ourselves. That - # lets us add headers for both ourselves and our inner as - # needed. - return self - - def isDistinguishableFrom(self, other): - if other.isPromise(): - return False - if other.isUnion(): - # Just forward to the union; it'll deal - return other.isDistinguishableFrom(self) - return ( - other.isPrimitive() - or other.isString() - or other.isEnum() - or other.isNonCallbackInterface() - or other.isSequence() - ) - - def isExposedInAllOf(self, exposureSet): - return self.inner.unroll().isExposedInAllOf(exposureSet) - - -class IDLUnionType(IDLType): - def __init__(self, location, memberTypes): - IDLType.__init__(self, location, "") - self.memberTypes = memberTypes - self.hasNullableType = False - self._dictionaryType = None - self.flatMemberTypes = None - self.builtin = False - - def __eq__(self, other): - return isinstance(other, IDLUnionType) and self.memberTypes == other.memberTypes - - def __hash__(self): - assert self.isComplete() - return self.name.__hash__() - - def prettyName(self): - return "(" + " or ".join(m.prettyName() for m in self.memberTypes) + ")" - - def isVoid(self): - return False - - def isUnion(self): - return True - - def isJSONType(self): - return all(m.isJSONType() for m in self.memberTypes) - - def includesRestrictedFloat(self): - return any(t.includesRestrictedFloat() for t in self.memberTypes) - - def tag(self): - return IDLType.Tags.union - - def resolveType(self, parentScope): - assert isinstance(parentScope, IDLScope) - for t in self.memberTypes: - t.resolveType(parentScope) - - def isComplete(self): - return self.flatMemberTypes is not None - - def complete(self, scope): - def typeName(type): - if isinstance(type, IDLNullableType): - return typeName(type.inner) + "OrNull" - if isinstance(type, IDLWrapperType): - return typeName(type._identifier.object()) - if isinstance(type, IDLObjectWithIdentifier): - return typeName(type.identifier) - if isinstance(type, IDLBuiltinType) and type.hasAllowShared(): - assert type.isBufferSource() - return "MaybeShared" + type.name - return type.name - - for (i, type) in enumerate(self.memberTypes): - if not type.isComplete(): - self.memberTypes[i] = type.complete(scope) - - self.name = "Or".join(typeName(type) for type in self.memberTypes) - self.flatMemberTypes = list(self.memberTypes) - i = 0 - while i < len(self.flatMemberTypes): - if self.flatMemberTypes[i].nullable(): - if self.hasNullableType: - raise WebIDLError( - "Can't have more than one nullable types in a union", - [nullableType.location, self.flatMemberTypes[i].location], - ) - if self.hasDictionaryType(): - raise WebIDLError( - "Can't have a nullable type and a " - "dictionary type in a union", - [ - self._dictionaryType.location, - self.flatMemberTypes[i].location, - ], - ) - self.hasNullableType = True - nullableType = self.flatMemberTypes[i] - self.flatMemberTypes[i] = self.flatMemberTypes[i].inner - continue - if self.flatMemberTypes[i].isDictionary(): - if self.hasNullableType: - raise WebIDLError( - "Can't have a nullable type and a " - "dictionary type in a union", - [nullableType.location, self.flatMemberTypes[i].location], - ) - self._dictionaryType = self.flatMemberTypes[i] - elif self.flatMemberTypes[i].isUnion(): - self.flatMemberTypes[i : i + 1] = self.flatMemberTypes[i].memberTypes - continue - i += 1 - - for (i, t) in enumerate(self.flatMemberTypes[:-1]): - for u in self.flatMemberTypes[i + 1 :]: - if not t.isDistinguishableFrom(u): - raise WebIDLError( - "Flat member types of a union should be " - "distinguishable, " + str(t) + " is not " - "distinguishable from " + str(u), - [self.location, t.location, u.location], - ) - - return self - - def isDistinguishableFrom(self, other): - if self.hasNullableType and other.nullable(): - # Can't tell which type null should become - return False - if other.isUnion(): - otherTypes = other.unroll().memberTypes - else: - otherTypes = [other] - # For every type in otherTypes, check that it's distinguishable from - # every type in our types - for u in otherTypes: - if any(not t.isDistinguishableFrom(u) for t in self.memberTypes): - return False - return True - - def isExposedInAllOf(self, exposureSet): - # We could have different member types in different globals. Just make sure that each thing in exposureSet has one of our member types exposed in it. - for globalName in exposureSet: - if not any( - t.unroll().isExposedInAllOf(set([globalName])) - for t in self.flatMemberTypes - ): - return False - return True - - def hasDictionaryType(self): - return self._dictionaryType is not None - - def hasPossiblyEmptyDictionaryType(self): - return ( - self._dictionaryType is not None and self._dictionaryType.inner.canBeEmpty() - ) - - def _getDependentObjects(self): - return set(self.memberTypes) - - -class IDLTypedefType(IDLType): - def __init__(self, location, innerType, name): - IDLType.__init__(self, location, name) - self.inner = innerType - self.builtin = False - - def __hash__(self): - return hash(self.inner) - - def __eq__(self, other): - return isinstance(other, IDLTypedefType) and self.inner == other.inner - - def __str__(self): - return self.name - - def nullable(self): - return self.inner.nullable() - - def isPrimitive(self): - return self.inner.isPrimitive() - - def isBoolean(self): - return self.inner.isBoolean() - - def isNumeric(self): - return self.inner.isNumeric() - - def isString(self): - return self.inner.isString() - - def isByteString(self): - return self.inner.isByteString() - - def isDOMString(self): - return self.inner.isDOMString() - - def isUSVString(self): - return self.inner.isUSVString() - - def isUTF8String(self): - return self.inner.isUTF8String() - - def isJSString(self): - return self.inner.isJSString() - - def isVoid(self): - return self.inner.isVoid() - - def isJSONType(self): - return self.inner.isJSONType() - - def isSequence(self): - return self.inner.isSequence() - - def isRecord(self): - return self.inner.isRecord() - - def isReadableStream(self): - return self.inner.isReadableStream() - - def isDictionary(self): - return self.inner.isDictionary() - - def isArrayBuffer(self): - return self.inner.isArrayBuffer() - - def isArrayBufferView(self): - return self.inner.isArrayBufferView() - - def isTypedArray(self): - return self.inner.isTypedArray() - - def isInterface(self): - return self.inner.isInterface() - - def isCallbackInterface(self): - return self.inner.isCallbackInterface() - - def isNonCallbackInterface(self): - return self.inner.isNonCallbackInterface() - - def isComplete(self): - return False - - def complete(self, parentScope): - if not self.inner.isComplete(): - self.inner = self.inner.complete(parentScope) - assert self.inner.isComplete() - return self.inner - - # Do we need a resolveType impl? I don't think it's particularly useful.... - - def tag(self): - return self.inner.tag() - - def unroll(self): - return self.inner.unroll() - - def isDistinguishableFrom(self, other): - return self.inner.isDistinguishableFrom(other) - - def _getDependentObjects(self): - return self.inner._getDependentObjects() - - def withExtendedAttributes(self, attrs): - return IDLTypedefType( - self.location, self.inner.withExtendedAttributes(attrs), self.name - ) - - -class IDLTypedef(IDLObjectWithIdentifier): - def __init__(self, location, parentScope, innerType, name): - # Set self.innerType first, because IDLObjectWithIdentifier.__init__ - # will call our __str__, which wants to use it. - self.innerType = innerType - identifier = IDLUnresolvedIdentifier(location, name) - IDLObjectWithIdentifier.__init__(self, location, parentScope, identifier) - - def __str__(self): - return "Typedef %s %s" % (self.identifier.name, self.innerType) - - def finish(self, parentScope): - if not self.innerType.isComplete(): - self.innerType = self.innerType.complete(parentScope) - - def validate(self): - pass - - def isTypedef(self): - return True - - def addExtendedAttributes(self, attrs): - if len(attrs) != 0: - raise WebIDLError( - "There are no extended attributes that are " "allowed on typedefs", - [attrs[0].location, self.location], - ) - - def _getDependentObjects(self): - return self.innerType._getDependentObjects() - - -class IDLWrapperType(IDLType): - def __init__(self, location, inner): - IDLType.__init__(self, location, inner.identifier.name) - self.inner = inner - self._identifier = inner.identifier - self.builtin = False - - def __hash__(self): - return hash(self._identifier) + hash(self.builtin) - - def __eq__(self, other): - return ( - isinstance(other, IDLWrapperType) - and self._identifier == other._identifier - and self.builtin == other.builtin - ) - - def __str__(self): - return str(self.name) + " (Wrapper)" - - def isVoid(self): - return False - - def isDictionary(self): - return isinstance(self.inner, IDLDictionary) - - def isInterface(self): - return isinstance(self.inner, IDLInterface) or isinstance( - self.inner, IDLExternalInterface - ) - - def isCallbackInterface(self): - return self.isInterface() and self.inner.isCallback() - - def isNonCallbackInterface(self): - return self.isInterface() and not self.inner.isCallback() - - def isEnum(self): - return isinstance(self.inner, IDLEnum) - - def isJSONType(self): - if self.isInterface(): - if self.inner.isExternal(): - return False - iface = self.inner - while iface: - if any(m.isMethod() and m.isToJSON() for m in iface.members): - return True - iface = iface.parent - return False - elif self.isEnum(): - return True - elif self.isDictionary(): - dictionary = self.inner - while dictionary: - if not all(m.type.isJSONType() for m in dictionary.members): - return False - dictionary = dictionary.parent - return True - else: - raise WebIDLError( - "IDLWrapperType wraps type %s that we don't know if " - "is serializable" % type(self.inner), - [self.location], - ) - - def resolveType(self, parentScope): - assert isinstance(parentScope, IDLScope) - self.inner.resolve(parentScope) - - def isComplete(self): - return True - - def tag(self): - if self.isInterface(): - return IDLType.Tags.interface - elif self.isEnum(): - return IDLType.Tags.enum - elif self.isDictionary(): - return IDLType.Tags.dictionary - else: - assert False - - def isDistinguishableFrom(self, other): - if other.isPromise(): - return False - if other.isUnion(): - # Just forward to the union; it'll deal - return other.isDistinguishableFrom(self) - assert self.isInterface() or self.isEnum() or self.isDictionary() - if self.isEnum(): - return ( - other.isPrimitive() - or other.isInterface() - or other.isObject() - or other.isCallback() - or other.isDictionary() - or other.isSequence() - or other.isRecord() - ) - if self.isDictionary() and other.nullable(): - return False - if ( - other.isPrimitive() - or other.isString() - or other.isEnum() - or other.isSequence() - ): - return True - if self.isDictionary(): - return other.isNonCallbackInterface() - - assert self.isInterface() - if other.isInterface(): - if other.isSpiderMonkeyInterface(): - # Just let |other| handle things - return other.isDistinguishableFrom(self) - assert self.isGeckoInterface() and other.isGeckoInterface() - if self.inner.isExternal() or other.unroll().inner.isExternal(): - return self != other - return len( - self.inner.interfacesBasedOnSelf - & other.unroll().inner.interfacesBasedOnSelf - ) == 0 and (self.isNonCallbackInterface() or other.isNonCallbackInterface()) - if other.isDictionary() or other.isCallback() or other.isRecord(): - return self.isNonCallbackInterface() - - # Not much else |other| can be - assert other.isObject() - return False - - def isExposedInAllOf(self, exposureSet): - if not self.isInterface(): - return True - iface = self.inner - if iface.isExternal(): - # Let's say true, so we don't have to implement exposure mixins on - # external interfaces and sprinkle [Exposed=Window] on every single - # external interface declaration. - return True - return iface.exposureSet.issuperset(exposureSet) - - def _getDependentObjects(self): - # NB: The codegen for an interface type depends on - # a) That the identifier is in fact an interface (as opposed to - # a dictionary or something else). - # b) The native type of the interface. - # If we depend on the interface object we will also depend on - # anything the interface depends on which is undesirable. We - # considered implementing a dependency just on the interface type - # file, but then every modification to an interface would cause this - # to be regenerated which is still undesirable. We decided not to - # depend on anything, reasoning that: - # 1) Changing the concrete type of the interface requires modifying - # Bindings.conf, which is still a global dependency. - # 2) Changing an interface to a dictionary (or vice versa) with the - # same identifier should be incredibly rare. - # - # On the other hand, if our type is a dictionary, we should - # depend on it, because the member types of a dictionary - # affect whether a method taking the dictionary as an argument - # takes a JSContext* argument or not. - if self.isDictionary(): - return set([self.inner]) - return set() - - -class IDLPromiseType(IDLParametrizedType): - def __init__(self, location, innerType): - IDLParametrizedType.__init__(self, location, "Promise", innerType) - - def __hash__(self): - return hash(self.promiseInnerType()) - - def __eq__(self, other): - return ( - isinstance(other, IDLPromiseType) - and self.promiseInnerType() == other.promiseInnerType() - ) - - def __str__(self): - return self.inner.__str__() + "Promise" - - def prettyName(self): - return "Promise<%s>" % self.inner.prettyName() - - def isPromise(self): - return True - - def promiseInnerType(self): - return self.inner - - def tag(self): - return IDLType.Tags.promise - - def complete(self, scope): - self.inner = self.promiseInnerType().complete(scope) - return self - - def unroll(self): - # We do not unroll our inner. Just stop at ourselves. That - # lets us add headers for both ourselves and our inner as - # needed. - return self - - def isDistinguishableFrom(self, other): - # Promises are not distinguishable from anything. - return False - - def isExposedInAllOf(self, exposureSet): - # Check the internal type - return self.promiseInnerType().unroll().isExposedInAllOf(exposureSet) - - -class IDLBuiltinType(IDLType): - - Types = enum( - # The integer types - "byte", - "octet", - "short", - "unsigned_short", - "long", - "unsigned_long", - "long_long", - "unsigned_long_long", - # Additional primitive types - "boolean", - "unrestricted_float", - "float", - "unrestricted_double", - # IMPORTANT: "double" must be the last primitive type listed - "double", - # Other types - "any", - "domstring", - "bytestring", - "usvstring", - "utf8string", - "jsstring", - "object", - "void", - # Funny stuff - "ArrayBuffer", - "ArrayBufferView", - "Int8Array", - "Uint8Array", - "Uint8ClampedArray", - "Int16Array", - "Uint16Array", - "Int32Array", - "Uint32Array", - "Float32Array", - "Float64Array", - "ReadableStream", - ) - - TagLookup = { - Types.byte: IDLType.Tags.int8, - Types.octet: IDLType.Tags.uint8, - Types.short: IDLType.Tags.int16, - Types.unsigned_short: IDLType.Tags.uint16, - Types.long: IDLType.Tags.int32, - Types.unsigned_long: IDLType.Tags.uint32, - Types.long_long: IDLType.Tags.int64, - Types.unsigned_long_long: IDLType.Tags.uint64, - Types.boolean: IDLType.Tags.bool, - Types.unrestricted_float: IDLType.Tags.unrestricted_float, - Types.float: IDLType.Tags.float, - Types.unrestricted_double: IDLType.Tags.unrestricted_double, - Types.double: IDLType.Tags.double, - Types.any: IDLType.Tags.any, - Types.domstring: IDLType.Tags.domstring, - Types.bytestring: IDLType.Tags.bytestring, - Types.usvstring: IDLType.Tags.usvstring, - Types.utf8string: IDLType.Tags.utf8string, - Types.jsstring: IDLType.Tags.jsstring, - Types.object: IDLType.Tags.object, - Types.void: IDLType.Tags.void, - Types.ArrayBuffer: IDLType.Tags.interface, - Types.ArrayBufferView: IDLType.Tags.interface, - Types.Int8Array: IDLType.Tags.interface, - Types.Uint8Array: IDLType.Tags.interface, - Types.Uint8ClampedArray: IDLType.Tags.interface, - Types.Int16Array: IDLType.Tags.interface, - Types.Uint16Array: IDLType.Tags.interface, - Types.Int32Array: IDLType.Tags.interface, - Types.Uint32Array: IDLType.Tags.interface, - Types.Float32Array: IDLType.Tags.interface, - Types.Float64Array: IDLType.Tags.interface, - Types.ReadableStream: IDLType.Tags.interface, - } - - PrettyNames = { - Types.byte: "byte", - Types.octet: "octet", - Types.short: "short", - Types.unsigned_short: "unsigned short", - Types.long: "long", - Types.unsigned_long: "unsigned long", - Types.long_long: "long long", - Types.unsigned_long_long: "unsigned long long", - Types.boolean: "boolean", - Types.unrestricted_float: "unrestricted float", - Types.float: "float", - Types.unrestricted_double: "unrestricted double", - Types.double: "double", - Types.any: "any", - Types.domstring: "DOMString", - Types.bytestring: "ByteString", - Types.usvstring: "USVString", - Types.utf8string: "USVString", # That's what it is in spec terms - Types.jsstring: "USVString", # Again, that's what it is in spec terms - Types.object: "object", - Types.void: "void", - Types.ArrayBuffer: "ArrayBuffer", - Types.ArrayBufferView: "ArrayBufferView", - Types.Int8Array: "Int8Array", - Types.Uint8Array: "Uint8Array", - Types.Uint8ClampedArray: "Uint8ClampedArray", - Types.Int16Array: "Int16Array", - Types.Uint16Array: "Uint16Array", - Types.Int32Array: "Int32Array", - Types.Uint32Array: "Uint32Array", - Types.Float32Array: "Float32Array", - Types.Float64Array: "Float64Array", - Types.ReadableStream: "ReadableStream", - } - - def __init__( - self, - location, - name, - type, - clamp=False, - enforceRange=False, - legacyNullToEmptyString=False, - allowShared=False, - attrLocation=[], - ): - """ - The mutually exclusive clamp/enforceRange/legacyNullToEmptyString/allowShared arguments are used - to create instances of this type with the appropriate attributes attached. Use .clamped(), - .rangeEnforced(), .withLegacyNullToEmptyString() and .withAllowShared(). - - attrLocation is an array of source locations of these attributes for error reporting. - """ - IDLType.__init__(self, location, name) - self.builtin = True - self._typeTag = type - self._clamped = None - self._rangeEnforced = None - self._withLegacyNullToEmptyString = None - self._withAllowShared = None - if self.isInteger(): - if clamp: - self._clamp = True - self.name = "Clamped" + self.name - self._extendedAttrDict["Clamp"] = True - elif enforceRange: - self._enforceRange = True - self.name = "RangeEnforced" + self.name - self._extendedAttrDict["EnforceRange"] = True - elif clamp or enforceRange: - raise WebIDLError( - "Non-integer types cannot be [Clamp] or [EnforceRange]", attrLocation - ) - if self.isDOMString() or self.isUTF8String(): - if legacyNullToEmptyString: - self.legacyNullToEmptyString = True - self.name = "NullIsEmpty" + self.name - self._extendedAttrDict["LegacyNullToEmptyString"] = True - elif legacyNullToEmptyString: - raise WebIDLError( - "Non-string types cannot be [LegacyNullToEmptyString]", attrLocation - ) - if self.isBufferSource(): - if allowShared: - self._allowShared = True - self._extendedAttrDict["AllowShared"] = True - elif allowShared: - raise WebIDLError( - "Types that are not buffer source types cannot be [AllowShared]", - attrLocation, - ) - - def __str__(self): - if self._allowShared: - assert self.isBufferSource() - return "MaybeShared" + str(self.name) - return str(self.name) - - def prettyName(self): - return IDLBuiltinType.PrettyNames[self._typeTag] - - def clamped(self, attrLocation): - if not self._clamped: - self._clamped = IDLBuiltinType( - self.location, - self.name, - self._typeTag, - clamp=True, - attrLocation=attrLocation, - ) - return self._clamped - - def rangeEnforced(self, attrLocation): - if not self._rangeEnforced: - self._rangeEnforced = IDLBuiltinType( - self.location, - self.name, - self._typeTag, - enforceRange=True, - attrLocation=attrLocation, - ) - return self._rangeEnforced - - def withLegacyNullToEmptyString(self, attrLocation): - if not self._withLegacyNullToEmptyString: - self._withLegacyNullToEmptyString = IDLBuiltinType( - self.location, - self.name, - self._typeTag, - legacyNullToEmptyString=True, - attrLocation=attrLocation, - ) - return self._withLegacyNullToEmptyString - - def withAllowShared(self, attrLocation): - if not self._withAllowShared: - self._withAllowShared = IDLBuiltinType( - self.location, - self.name, - self._typeTag, - allowShared=True, - attrLocation=attrLocation, - ) - return self._withAllowShared - - def isPrimitive(self): - return self._typeTag <= IDLBuiltinType.Types.double - - def isBoolean(self): - return self._typeTag == IDLBuiltinType.Types.boolean - - def isNumeric(self): - return self.isPrimitive() and not self.isBoolean() - - def isString(self): - return ( - self._typeTag == IDLBuiltinType.Types.domstring - or self._typeTag == IDLBuiltinType.Types.bytestring - or self._typeTag == IDLBuiltinType.Types.usvstring - or self._typeTag == IDLBuiltinType.Types.utf8string - or self._typeTag == IDLBuiltinType.Types.jsstring - ) - - def isByteString(self): - return self._typeTag == IDLBuiltinType.Types.bytestring - - def isDOMString(self): - return self._typeTag == IDLBuiltinType.Types.domstring - - def isUSVString(self): - return self._typeTag == IDLBuiltinType.Types.usvstring - - def isUTF8String(self): - return self._typeTag == IDLBuiltinType.Types.utf8string - - def isJSString(self): - return self._typeTag == IDLBuiltinType.Types.jsstring - - def isInteger(self): - return self._typeTag <= IDLBuiltinType.Types.unsigned_long_long - - def isArrayBuffer(self): - return self._typeTag == IDLBuiltinType.Types.ArrayBuffer - - def isArrayBufferView(self): - return self._typeTag == IDLBuiltinType.Types.ArrayBufferView - - def isTypedArray(self): - return ( - self._typeTag >= IDLBuiltinType.Types.Int8Array - and self._typeTag <= IDLBuiltinType.Types.Float64Array - ) - - def isReadableStream(self): - return self._typeTag == IDLBuiltinType.Types.ReadableStream - - def isInterface(self): - # TypedArray things are interface types per the TypedArray spec, - # but we handle them as builtins because SpiderMonkey implements - # all of it internally. - return ( - self.isArrayBuffer() - or self.isArrayBufferView() - or self.isTypedArray() - or self.isReadableStream() - ) - - def isNonCallbackInterface(self): - # All the interfaces we can be are non-callback - return self.isInterface() - - def isFloat(self): - return ( - self._typeTag == IDLBuiltinType.Types.float - or self._typeTag == IDLBuiltinType.Types.double - or self._typeTag == IDLBuiltinType.Types.unrestricted_float - or self._typeTag == IDLBuiltinType.Types.unrestricted_double - ) - - def isUnrestricted(self): - assert self.isFloat() - return ( - self._typeTag == IDLBuiltinType.Types.unrestricted_float - or self._typeTag == IDLBuiltinType.Types.unrestricted_double - ) - - def isJSONType(self): - return self.isPrimitive() or self.isString() or self.isObject() - - def includesRestrictedFloat(self): - return self.isFloat() and not self.isUnrestricted() - - def tag(self): - return IDLBuiltinType.TagLookup[self._typeTag] - - def isDistinguishableFrom(self, other): - if other.isPromise(): - return False - if other.isUnion(): - # Just forward to the union; it'll deal - return other.isDistinguishableFrom(self) - if self.isBoolean(): - return ( - other.isNumeric() - or other.isString() - or other.isEnum() - or other.isInterface() - or other.isObject() - or other.isCallback() - or other.isDictionary() - or other.isSequence() - or other.isRecord() - ) - if self.isNumeric(): - return ( - other.isBoolean() - or other.isString() - or other.isEnum() - or other.isInterface() - or other.isObject() - or other.isCallback() - or other.isDictionary() - or other.isSequence() - or other.isRecord() - ) - if self.isString(): - return ( - other.isPrimitive() - or other.isInterface() - or other.isObject() - or other.isCallback() - or other.isDictionary() - or other.isSequence() - or other.isRecord() - ) - if self.isAny(): - # Can't tell "any" apart from anything - return False - if self.isObject(): - return other.isPrimitive() or other.isString() or other.isEnum() - if self.isVoid(): - return not other.isVoid() - # Not much else we could be! - assert self.isSpiderMonkeyInterface() - # Like interfaces, but we know we're not a callback - return ( - other.isPrimitive() - or other.isString() - or other.isEnum() - or other.isCallback() - or other.isDictionary() - or other.isSequence() - or other.isRecord() - or ( - other.isInterface() - and ( - # ArrayBuffer is distinguishable from everything - # that's not an ArrayBuffer or a callback interface - (self.isArrayBuffer() and not other.isArrayBuffer()) - or (self.isReadableStream() and not other.isReadableStream()) - or - # ArrayBufferView is distinguishable from everything - # that's not an ArrayBufferView or typed array. - ( - self.isArrayBufferView() - and not other.isArrayBufferView() - and not other.isTypedArray() - ) - or - # Typed arrays are distinguishable from everything - # except ArrayBufferView and the same type of typed - # array - ( - self.isTypedArray() - and not other.isArrayBufferView() - and not (other.isTypedArray() and other.name == self.name) - ) - ) - ) - ) - - def _getDependentObjects(self): - return set() - - def withExtendedAttributes(self, attrs): - ret = self - for attribute in attrs: - identifier = attribute.identifier() - if identifier == "Clamp": - if not attribute.noArguments(): - raise WebIDLError( - "[Clamp] must take no arguments", [attribute.location] - ) - if ret.hasEnforceRange() or self._enforceRange: - raise WebIDLError( - "[EnforceRange] and [Clamp] are mutually exclusive", - [self.location, attribute.location], - ) - ret = self.clamped([self.location, attribute.location]) - elif identifier == "EnforceRange": - if not attribute.noArguments(): - raise WebIDLError( - "[EnforceRange] must take no arguments", [attribute.location] - ) - if ret.hasClamp() or self._clamp: - raise WebIDLError( - "[EnforceRange] and [Clamp] are mutually exclusive", - [self.location, attribute.location], - ) - ret = self.rangeEnforced([self.location, attribute.location]) - elif identifier == "LegacyNullToEmptyString": - if not (self.isDOMString() or self.isUTF8String()): - raise WebIDLError( - "[LegacyNullToEmptyString] only allowed on DOMStrings and UTF8Strings", - [self.location, attribute.location], - ) - assert not self.nullable() - if attribute.hasValue(): - raise WebIDLError( - "[LegacyNullToEmptyString] must take no identifier argument", - [attribute.location], - ) - ret = self.withLegacyNullToEmptyString( - [self.location, attribute.location] - ) - elif identifier == "AllowShared": - if not attribute.noArguments(): - raise WebIDLError( - "[AllowShared] must take no arguments", [attribute.location] - ) - if not self.isBufferSource(): - raise WebIDLError( - "[AllowShared] only allowed on buffer source types", - [self.location, attribute.location], - ) - ret = self.withAllowShared([self.location, attribute.location]) - - else: - raise WebIDLError( - "Unhandled extended attribute on type", - [self.location, attribute.location], - ) - return ret - - -BuiltinTypes = { - IDLBuiltinType.Types.byte: IDLBuiltinType( - BuiltinLocation(""), "Byte", IDLBuiltinType.Types.byte - ), - IDLBuiltinType.Types.octet: IDLBuiltinType( - BuiltinLocation(""), "Octet", IDLBuiltinType.Types.octet - ), - IDLBuiltinType.Types.short: IDLBuiltinType( - BuiltinLocation(""), "Short", IDLBuiltinType.Types.short - ), - IDLBuiltinType.Types.unsigned_short: IDLBuiltinType( - BuiltinLocation(""), - "UnsignedShort", - IDLBuiltinType.Types.unsigned_short, - ), - IDLBuiltinType.Types.long: IDLBuiltinType( - BuiltinLocation(""), "Long", IDLBuiltinType.Types.long - ), - IDLBuiltinType.Types.unsigned_long: IDLBuiltinType( - BuiltinLocation(""), - "UnsignedLong", - IDLBuiltinType.Types.unsigned_long, - ), - IDLBuiltinType.Types.long_long: IDLBuiltinType( - BuiltinLocation(""), "LongLong", IDLBuiltinType.Types.long_long - ), - IDLBuiltinType.Types.unsigned_long_long: IDLBuiltinType( - BuiltinLocation(""), - "UnsignedLongLong", - IDLBuiltinType.Types.unsigned_long_long, - ), - IDLBuiltinType.Types.boolean: IDLBuiltinType( - BuiltinLocation(""), "Boolean", IDLBuiltinType.Types.boolean - ), - IDLBuiltinType.Types.float: IDLBuiltinType( - BuiltinLocation(""), "Float", IDLBuiltinType.Types.float - ), - IDLBuiltinType.Types.unrestricted_float: IDLBuiltinType( - BuiltinLocation(""), - "UnrestrictedFloat", - IDLBuiltinType.Types.unrestricted_float, - ), - IDLBuiltinType.Types.double: IDLBuiltinType( - BuiltinLocation(""), "Double", IDLBuiltinType.Types.double - ), - IDLBuiltinType.Types.unrestricted_double: IDLBuiltinType( - BuiltinLocation(""), - "UnrestrictedDouble", - IDLBuiltinType.Types.unrestricted_double, - ), - IDLBuiltinType.Types.any: IDLBuiltinType( - BuiltinLocation(""), "Any", IDLBuiltinType.Types.any - ), - IDLBuiltinType.Types.domstring: IDLBuiltinType( - BuiltinLocation(""), "String", IDLBuiltinType.Types.domstring - ), - IDLBuiltinType.Types.bytestring: IDLBuiltinType( - BuiltinLocation(""), "ByteString", IDLBuiltinType.Types.bytestring - ), - IDLBuiltinType.Types.usvstring: IDLBuiltinType( - BuiltinLocation(""), "USVString", IDLBuiltinType.Types.usvstring - ), - IDLBuiltinType.Types.utf8string: IDLBuiltinType( - BuiltinLocation(""), "UTF8String", IDLBuiltinType.Types.utf8string - ), - IDLBuiltinType.Types.jsstring: IDLBuiltinType( - BuiltinLocation(""), "JSString", IDLBuiltinType.Types.jsstring - ), - IDLBuiltinType.Types.object: IDLBuiltinType( - BuiltinLocation(""), "Object", IDLBuiltinType.Types.object - ), - IDLBuiltinType.Types.void: IDLBuiltinType( - BuiltinLocation(""), "Void", IDLBuiltinType.Types.void - ), - IDLBuiltinType.Types.ArrayBuffer: IDLBuiltinType( - BuiltinLocation(""), - "ArrayBuffer", - IDLBuiltinType.Types.ArrayBuffer, - ), - IDLBuiltinType.Types.ArrayBufferView: IDLBuiltinType( - BuiltinLocation(""), - "ArrayBufferView", - IDLBuiltinType.Types.ArrayBufferView, - ), - IDLBuiltinType.Types.Int8Array: IDLBuiltinType( - BuiltinLocation(""), "Int8Array", IDLBuiltinType.Types.Int8Array - ), - IDLBuiltinType.Types.Uint8Array: IDLBuiltinType( - BuiltinLocation(""), "Uint8Array", IDLBuiltinType.Types.Uint8Array - ), - IDLBuiltinType.Types.Uint8ClampedArray: IDLBuiltinType( - BuiltinLocation(""), - "Uint8ClampedArray", - IDLBuiltinType.Types.Uint8ClampedArray, - ), - IDLBuiltinType.Types.Int16Array: IDLBuiltinType( - BuiltinLocation(""), "Int16Array", IDLBuiltinType.Types.Int16Array - ), - IDLBuiltinType.Types.Uint16Array: IDLBuiltinType( - BuiltinLocation(""), - "Uint16Array", - IDLBuiltinType.Types.Uint16Array, - ), - IDLBuiltinType.Types.Int32Array: IDLBuiltinType( - BuiltinLocation(""), "Int32Array", IDLBuiltinType.Types.Int32Array - ), - IDLBuiltinType.Types.Uint32Array: IDLBuiltinType( - BuiltinLocation(""), - "Uint32Array", - IDLBuiltinType.Types.Uint32Array, - ), - IDLBuiltinType.Types.Float32Array: IDLBuiltinType( - BuiltinLocation(""), - "Float32Array", - IDLBuiltinType.Types.Float32Array, - ), - IDLBuiltinType.Types.Float64Array: IDLBuiltinType( - BuiltinLocation(""), - "Float64Array", - IDLBuiltinType.Types.Float64Array, - ), - IDLBuiltinType.Types.ReadableStream: IDLBuiltinType( - BuiltinLocation(""), - "ReadableStream", - IDLBuiltinType.Types.ReadableStream, - ), -} - - -integerTypeSizes = { - IDLBuiltinType.Types.byte: (-128, 127), - IDLBuiltinType.Types.octet: (0, 255), - IDLBuiltinType.Types.short: (-32768, 32767), - IDLBuiltinType.Types.unsigned_short: (0, 65535), - IDLBuiltinType.Types.long: (-2147483648, 2147483647), - IDLBuiltinType.Types.unsigned_long: (0, 4294967295), - IDLBuiltinType.Types.long_long: (-9223372036854775808, 9223372036854775807), - IDLBuiltinType.Types.unsigned_long_long: (0, 18446744073709551615), -} - - -def matchIntegerValueToType(value): - for type, extremes in integerTypeSizes.items(): - (min, max) = extremes - if value <= max and value >= min: - return BuiltinTypes[type] - - return None - - -class NoCoercionFoundError(WebIDLError): - """ - A class we use to indicate generic coercion failures because none of the - types worked out in IDLValue.coerceToType. - """ - - -class IDLValue(IDLObject): - def __init__(self, location, type, value): - IDLObject.__init__(self, location) - self.type = type - assert isinstance(type, IDLType) - - self.value = value - - def coerceToType(self, type, location): - if type == self.type: - return self # Nothing to do - - # We first check for unions to ensure that even if the union is nullable - # we end up with the right flat member type, not the union's type. - if type.isUnion(): - # We use the flat member types here, because if we have a nullable - # member type, or a nested union, we want the type the value - # actually coerces to, not the nullable or nested union type. - for subtype in type.unroll().flatMemberTypes: - try: - coercedValue = self.coerceToType(subtype, location) - # Create a new IDLValue to make sure that we have the - # correct float/double type. This is necessary because we - # use the value's type when it is a default value of a - # union, and the union cares about the exact float type. - return IDLValue(self.location, subtype, coercedValue.value) - except Exception as e: - # Make sure to propagate out WebIDLErrors that are not the - # generic "hey, we could not coerce to this type at all" - # exception, because those are specific "coercion failed for - # reason X" exceptions. Note that we want to swallow - # non-WebIDLErrors here, because those can just happen if - # "type" is not something that can have a default value at - # all. - if isinstance(e, WebIDLError) and not isinstance( - e, NoCoercionFoundError - ): - raise e - - # If the type allows null, rerun this matching on the inner type, except - # nullable enums. We handle those specially, because we want our - # default string values to stay strings even when assigned to a nullable - # enum. - elif type.nullable() and not type.isEnum(): - innerValue = self.coerceToType(type.inner, location) - return IDLValue(self.location, type, innerValue.value) - - elif self.type.isInteger() and type.isInteger(): - # We're both integer types. See if we fit. - - (min, max) = integerTypeSizes[type._typeTag] - if self.value <= max and self.value >= min: - # Promote - return IDLValue(self.location, type, self.value) - else: - raise WebIDLError( - "Value %s is out of range for type %s." % (self.value, type), - [location], - ) - elif self.type.isInteger() and type.isFloat(): - # Convert an integer literal into float - if -(2 ** 24) <= self.value <= 2 ** 24: - return IDLValue(self.location, type, float(self.value)) - else: - raise WebIDLError( - "Converting value %s to %s will lose precision." - % (self.value, type), - [location], - ) - elif self.type.isString() and type.isEnum(): - # Just keep our string, but make sure it's a valid value for this enum - enum = type.unroll().inner - if self.value not in enum.values(): - raise WebIDLError( - "'%s' is not a valid default value for enum %s" - % (self.value, enum.identifier.name), - [location, enum.location], - ) - return self - elif self.type.isFloat() and type.isFloat(): - if not type.isUnrestricted() and ( - self.value == float("inf") - or self.value == float("-inf") - or math.isnan(self.value) - ): - raise WebIDLError( - "Trying to convert unrestricted value %s to non-unrestricted" - % self.value, - [location], - ) - return IDLValue(self.location, type, self.value) - elif self.type.isString() and type.isUSVString(): - # Allow USVStrings to use default value just like - # DOMString. No coercion is required in this case as Codegen.py - # treats USVString just like DOMString, but with an - # extra normalization step. - assert self.type.isDOMString() - return self - elif self.type.isString() and ( - type.isByteString() or type.isJSString() or type.isUTF8String() - ): - # Allow ByteStrings, UTF8String, and JSStrings to use a default - # value like DOMString. - # No coercion is required as Codegen.py will handle the - # extra steps. We want to make sure that our string contains - # only valid characters, so we check that here. - valid_ascii_lit = ( - " " + string.ascii_letters + string.digits + string.punctuation - ) - for idx, c in enumerate(self.value): - if c not in valid_ascii_lit: - raise WebIDLError( - "Coercing this string literal %s to a ByteString is not supported yet. " - "Coercion failed due to an unsupported byte %d at index %d." - % (self.value.__repr__(), ord(c), idx), - [location], - ) - - return IDLValue(self.location, type, self.value) - elif self.type.isDOMString() and type.legacyNullToEmptyString: - # LegacyNullToEmptyString is a different type for resolution reasons, - # however once you have a value it doesn't matter - return self - - raise NoCoercionFoundError( - "Cannot coerce type %s to type %s." % (self.type, type), [location] - ) - - def _getDependentObjects(self): - return set() - - -class IDLNullValue(IDLObject): - def __init__(self, location): - IDLObject.__init__(self, location) - self.type = None - self.value = None - - def coerceToType(self, type, location): - if ( - not isinstance(type, IDLNullableType) - and not (type.isUnion() and type.hasNullableType) - and not type.isAny() - ): - raise WebIDLError("Cannot coerce null value to type %s." % type, [location]) - - nullValue = IDLNullValue(self.location) - if type.isUnion() and not type.nullable() and type.hasDictionaryType(): - # We're actually a default value for the union's dictionary member. - # Use its type. - for t in type.flatMemberTypes: - if t.isDictionary(): - nullValue.type = t - return nullValue - nullValue.type = type - return nullValue - - def _getDependentObjects(self): - return set() - - -class IDLEmptySequenceValue(IDLObject): - def __init__(self, location): - IDLObject.__init__(self, location) - self.type = None - self.value = None - - def coerceToType(self, type, location): - if type.isUnion(): - # We use the flat member types here, because if we have a nullable - # member type, or a nested union, we want the type the value - # actually coerces to, not the nullable or nested union type. - for subtype in type.unroll().flatMemberTypes: - try: - return self.coerceToType(subtype, location) - except: - pass - - if not type.isSequence(): - raise WebIDLError( - "Cannot coerce empty sequence value to type %s." % type, [location] - ) - - emptySequenceValue = IDLEmptySequenceValue(self.location) - emptySequenceValue.type = type - return emptySequenceValue - - def _getDependentObjects(self): - return set() - - -class IDLDefaultDictionaryValue(IDLObject): - def __init__(self, location): - IDLObject.__init__(self, location) - self.type = None - self.value = None - - def coerceToType(self, type, location): - if type.isUnion(): - # We use the flat member types here, because if we have a nullable - # member type, or a nested union, we want the type the value - # actually coerces to, not the nullable or nested union type. - for subtype in type.unroll().flatMemberTypes: - try: - return self.coerceToType(subtype, location) - except: - pass - - if not type.isDictionary(): - raise WebIDLError( - "Cannot coerce default dictionary value to type %s." % type, [location] - ) - - defaultDictionaryValue = IDLDefaultDictionaryValue(self.location) - defaultDictionaryValue.type = type - return defaultDictionaryValue - - def _getDependentObjects(self): - return set() - - -class IDLUndefinedValue(IDLObject): - def __init__(self, location): - IDLObject.__init__(self, location) - self.type = None - self.value = None - - def coerceToType(self, type, location): - if not type.isAny(): - raise WebIDLError( - "Cannot coerce undefined value to type %s." % type, [location] - ) - - undefinedValue = IDLUndefinedValue(self.location) - undefinedValue.type = type - return undefinedValue - - def _getDependentObjects(self): - return set() - - -class IDLInterfaceMember(IDLObjectWithIdentifier, IDLExposureMixins): - - Tags = enum("Const", "Attr", "Method", "MaplikeOrSetlike", "Iterable") - - Special = enum("Static", "Stringifier") - - AffectsValues = ("Nothing", "Everything") - DependsOnValues = ("Nothing", "DOMState", "DeviceState", "Everything") - - def __init__(self, location, identifier, tag, extendedAttrDict=None): - IDLObjectWithIdentifier.__init__(self, location, None, identifier) - IDLExposureMixins.__init__(self, location) - self.tag = tag - if extendedAttrDict is None: - self._extendedAttrDict = {} - else: - self._extendedAttrDict = extendedAttrDict - - def isMethod(self): - return self.tag == IDLInterfaceMember.Tags.Method - - def isAttr(self): - return self.tag == IDLInterfaceMember.Tags.Attr - - def isConst(self): - return self.tag == IDLInterfaceMember.Tags.Const - - def isMaplikeOrSetlikeOrIterable(self): - return ( - self.tag == IDLInterfaceMember.Tags.MaplikeOrSetlike - or self.tag == IDLInterfaceMember.Tags.Iterable - ) - - def isMaplikeOrSetlike(self): - return self.tag == IDLInterfaceMember.Tags.MaplikeOrSetlike - - def addExtendedAttributes(self, attrs): - for attr in attrs: - self.handleExtendedAttribute(attr) - attrlist = attr.listValue() - self._extendedAttrDict[attr.identifier()] = ( - attrlist if len(attrlist) else True - ) - - def handleExtendedAttribute(self, attr): - pass - - def getExtendedAttribute(self, name): - return self._extendedAttrDict.get(name, None) - - def finish(self, scope): - IDLExposureMixins.finish(self, scope) - - def validate(self): - if self.isAttr() or self.isMethod(): - if self.affects == "Everything" and self.dependsOn != "Everything": - raise WebIDLError( - "Interface member is flagged as affecting " - "everything but not depending on everything. " - "That seems rather unlikely.", - [self.location], - ) - - if self.getExtendedAttribute("NewObject"): - if self.dependsOn == "Nothing" or self.dependsOn == "DOMState": - raise WebIDLError( - "A [NewObject] method is not idempotent, " - "so it has to depend on something other than DOM state.", - [self.location], - ) - if self.getExtendedAttribute("Cached") or self.getExtendedAttribute( - "StoreInSlot" - ): - raise WebIDLError( - "A [NewObject] attribute shouldnt be " - "[Cached] or [StoreInSlot], since the point " - "of those is to keep returning the same " - "thing across multiple calls, which is not " - "what [NewObject] does.", - [self.location], - ) - - def _setDependsOn(self, dependsOn): - if self.dependsOn != "Everything": - raise WebIDLError( - "Trying to specify multiple different DependsOn, " - "Pure, or Constant extended attributes for " - "attribute", - [self.location], - ) - if dependsOn not in IDLInterfaceMember.DependsOnValues: - raise WebIDLError( - "Invalid [DependsOn=%s] on attribute" % dependsOn, [self.location] - ) - self.dependsOn = dependsOn - - def _setAffects(self, affects): - if self.affects != "Everything": - raise WebIDLError( - "Trying to specify multiple different Affects, " - "Pure, or Constant extended attributes for " - "attribute", - [self.location], - ) - if affects not in IDLInterfaceMember.AffectsValues: - raise WebIDLError( - "Invalid [Affects=%s] on attribute" % dependsOn, [self.location] - ) - self.affects = affects - - def _addAlias(self, alias): - if alias in self.aliases: - raise WebIDLError( - "Duplicate [Alias=%s] on attribute" % alias, [self.location] - ) - self.aliases.append(alias) - - def _addBindingAlias(self, bindingAlias): - if bindingAlias in self.bindingAliases: - raise WebIDLError( - "Duplicate [BindingAlias=%s] on attribute" % bindingAlias, - [self.location], - ) - self.bindingAliases.append(bindingAlias) - - -class IDLMaplikeOrSetlikeOrIterableBase(IDLInterfaceMember): - def __init__(self, location, identifier, ifaceType, keyType, valueType, ifaceKind): - IDLInterfaceMember.__init__(self, location, identifier, ifaceKind) - if keyType is not None: - assert isinstance(keyType, IDLType) - else: - assert valueType is not None - assert ifaceType in ["maplike", "setlike", "iterable"] - if valueType is not None: - assert isinstance(valueType, IDLType) - self.keyType = keyType - self.valueType = valueType - self.maplikeOrSetlikeOrIterableType = ifaceType - self.disallowedMemberNames = [] - self.disallowedNonMethodNames = [] - - def isMaplike(self): - return self.maplikeOrSetlikeOrIterableType == "maplike" - - def isSetlike(self): - return self.maplikeOrSetlikeOrIterableType == "setlike" - - def isIterable(self): - return self.maplikeOrSetlikeOrIterableType == "iterable" - - def hasKeyType(self): - return self.keyType is not None - - def hasValueType(self): - return self.valueType is not None - - def checkCollisions(self, members, isAncestor): - for member in members: - # Check that there are no disallowed members - if member.identifier.name in self.disallowedMemberNames and not ( - (member.isMethod() and member.isMaplikeOrSetlikeOrIterableMethod()) - or (member.isAttr() and member.isMaplikeOrSetlikeAttr()) - ): - raise WebIDLError( - "Member '%s' conflicts " - "with reserved %s name." - % (member.identifier.name, self.maplikeOrSetlikeOrIterableType), - [self.location, member.location], - ) - # Check that there are no disallowed non-method members. - # Ancestor members are always disallowed here; own members - # are disallowed only if they're non-methods. - if ( - isAncestor or member.isAttr() or member.isConst() - ) and member.identifier.name in self.disallowedNonMethodNames: - raise WebIDLError( - "Member '%s' conflicts " - "with reserved %s method." - % (member.identifier.name, self.maplikeOrSetlikeOrIterableType), - [self.location, member.location], - ) - - def addMethod( - self, - name, - members, - allowExistingOperations, - returnType, - args=[], - chromeOnly=False, - isPure=False, - affectsNothing=False, - newObject=False, - isIteratorAlias=False, - ): - """ - Create an IDLMethod based on the parameters passed in. - - - members is the member list to add this function to, since this is - called during the member expansion portion of interface object - building. - - - chromeOnly is only True for read-only js implemented classes, to - implement underscore prefixed convenience functions which would - otherwise not be available, unlike the case of C++ bindings. - - - isPure is only True for idempotent functions, so it is not valid for - things like keys, values, etc. that return a new object every time. - - - affectsNothing means that nothing changes due to this method, which - affects JIT optimization behavior - - - newObject means the method creates and returns a new object. - - """ - # Only add name to lists for collision checks if it's not chrome - # only. - if chromeOnly: - name = "__" + name - else: - if not allowExistingOperations: - self.disallowedMemberNames.append(name) - else: - self.disallowedNonMethodNames.append(name) - # If allowExistingOperations is True, and another operation exists - # with the same name as the one we're trying to add, don't add the - # maplike/setlike operation. However, if the operation is static, - # then fail by way of creating the function, which will cause a - # naming conflict, per the spec. - if allowExistingOperations: - for m in members: - if m.identifier.name == name and m.isMethod() and not m.isStatic(): - return - method = IDLMethod( - self.location, - IDLUnresolvedIdentifier( - self.location, name, allowDoubleUnderscore=chromeOnly - ), - returnType, - args, - maplikeOrSetlikeOrIterable=self, - ) - # We need to be able to throw from declaration methods - method.addExtendedAttributes([IDLExtendedAttribute(self.location, ("Throws",))]) - if chromeOnly: - method.addExtendedAttributes( - [IDLExtendedAttribute(self.location, ("ChromeOnly",))] - ) - if isPure: - method.addExtendedAttributes( - [IDLExtendedAttribute(self.location, ("Pure",))] - ) - # Following attributes are used for keys/values/entries. Can't mark - # them pure, since they return a new object each time they are run. - if affectsNothing: - method.addExtendedAttributes( - [ - IDLExtendedAttribute(self.location, ("DependsOn", "Everything")), - IDLExtendedAttribute(self.location, ("Affects", "Nothing")), - ] - ) - if newObject: - method.addExtendedAttributes( - [IDLExtendedAttribute(self.location, ("NewObject",))] - ) - if isIteratorAlias: - method.addExtendedAttributes( - [IDLExtendedAttribute(self.location, ("Alias", "@@iterator"))] - ) - # Methods generated for iterables should be enumerable, but the ones for - # maplike/setlike should not be. - if not self.isIterable(): - method.addExtendedAttributes( - [IDLExtendedAttribute(self.location, ("NonEnumerable",))] - ) - members.append(method) - - def resolve(self, parentScope): - if self.keyType: - self.keyType.resolveType(parentScope) - if self.valueType: - self.valueType.resolveType(parentScope) - - def finish(self, scope): - IDLInterfaceMember.finish(self, scope) - if self.keyType and not self.keyType.isComplete(): - t = self.keyType.complete(scope) - - assert not isinstance(t, IDLUnresolvedType) - assert not isinstance(t, IDLTypedefType) - assert not isinstance(t.name, IDLUnresolvedIdentifier) - self.keyType = t - if self.valueType and not self.valueType.isComplete(): - t = self.valueType.complete(scope) - - assert not isinstance(t, IDLUnresolvedType) - assert not isinstance(t, IDLTypedefType) - assert not isinstance(t.name, IDLUnresolvedIdentifier) - self.valueType = t - - def validate(self): - IDLInterfaceMember.validate(self) - - def handleExtendedAttribute(self, attr): - IDLInterfaceMember.handleExtendedAttribute(self, attr) - - def _getDependentObjects(self): - deps = set() - if self.keyType: - deps.add(self.keyType) - if self.valueType: - deps.add(self.valueType) - return deps - - def getForEachArguments(self): - return [ - IDLArgument( - self.location, - IDLUnresolvedIdentifier( - BuiltinLocation(""), "callback" - ), - BuiltinTypes[IDLBuiltinType.Types.object], - ), - IDLArgument( - self.location, - IDLUnresolvedIdentifier( - BuiltinLocation(""), "thisArg" - ), - BuiltinTypes[IDLBuiltinType.Types.any], - optional=True, - ), - ] - - -# Iterable adds ES6 iterator style functions and traits -# (keys/values/entries/@@iterator) to an interface. -class IDLIterable(IDLMaplikeOrSetlikeOrIterableBase): - def __init__(self, location, identifier, keyType, valueType=None, scope=None): - IDLMaplikeOrSetlikeOrIterableBase.__init__( - self, - location, - identifier, - "iterable", - keyType, - valueType, - IDLInterfaceMember.Tags.Iterable, - ) - self.iteratorType = None - - def __str__(self): - return "declared iterable with key '%s' and value '%s'" % ( - self.keyType, - self.valueType, - ) - - def expand(self, members, isJSImplemented): - """ - In order to take advantage of all of the method machinery in Codegen, - we generate our functions as if they were part of the interface - specification during parsing. - """ - # We only need to add entries/keys/values here if we're a pair iterator. - # Value iterators just copy these from %ArrayPrototype% instead. - if not self.isPairIterator(): - return - - # object entries() - self.addMethod( - "entries", - members, - False, - self.iteratorType, - affectsNothing=True, - newObject=True, - isIteratorAlias=True, - ) - # object keys() - self.addMethod( - "keys", - members, - False, - self.iteratorType, - affectsNothing=True, - newObject=True, - ) - # object values() - self.addMethod( - "values", - members, - False, - self.iteratorType, - affectsNothing=True, - newObject=True, - ) - - # void forEach(callback(valueType, keyType), optional any thisArg) - self.addMethod( - "forEach", - members, - False, - BuiltinTypes[IDLBuiltinType.Types.void], - self.getForEachArguments(), - ) - - def isValueIterator(self): - return not self.isPairIterator() - - def isPairIterator(self): - return self.hasKeyType() - - -# MaplikeOrSetlike adds ES6 map-or-set-like traits to an interface. -class IDLMaplikeOrSetlike(IDLMaplikeOrSetlikeOrIterableBase): - def __init__( - self, location, identifier, maplikeOrSetlikeType, readonly, keyType, valueType - ): - IDLMaplikeOrSetlikeOrIterableBase.__init__( - self, - location, - identifier, - maplikeOrSetlikeType, - keyType, - valueType, - IDLInterfaceMember.Tags.MaplikeOrSetlike, - ) - self.readonly = readonly - self.slotIndices = None - - # When generating JSAPI access code, we need to know the backing object - # type prefix to create the correct function. Generate here for reuse. - if self.isMaplike(): - self.prefix = "Map" - elif self.isSetlike(): - self.prefix = "Set" - - def __str__(self): - return "declared '%s' with key '%s'" % ( - self.maplikeOrSetlikeOrIterableType, - self.keyType, - ) - - def expand(self, members, isJSImplemented): - """ - In order to take advantage of all of the method machinery in Codegen, - we generate our functions as if they were part of the interface - specification during parsing. - """ - # Both maplike and setlike have a size attribute - sizeAttr = IDLAttribute( - self.location, - IDLUnresolvedIdentifier( - BuiltinLocation(""), "size" - ), - BuiltinTypes[IDLBuiltinType.Types.unsigned_long], - True, - maplikeOrSetlike=self, - ) - # This should be non-enumerable. - sizeAttr.addExtendedAttributes( - [IDLExtendedAttribute(self.location, ("NonEnumerable",))] - ) - members.append(sizeAttr) - self.reserved_ro_names = ["size"] - self.disallowedMemberNames.append("size") - - # object entries() - self.addMethod( - "entries", - members, - False, - BuiltinTypes[IDLBuiltinType.Types.object], - affectsNothing=True, - isIteratorAlias=self.isMaplike(), - ) - # object keys() - self.addMethod( - "keys", - members, - False, - BuiltinTypes[IDLBuiltinType.Types.object], - affectsNothing=True, - ) - # object values() - self.addMethod( - "values", - members, - False, - BuiltinTypes[IDLBuiltinType.Types.object], - affectsNothing=True, - isIteratorAlias=self.isSetlike(), - ) - - # void forEach(callback(valueType, keyType), thisVal) - self.addMethod( - "forEach", - members, - False, - BuiltinTypes[IDLBuiltinType.Types.void], - self.getForEachArguments(), - ) - - def getKeyArg(): - return IDLArgument( - self.location, - IDLUnresolvedIdentifier(self.location, "key"), - self.keyType, - ) - - # boolean has(keyType key) - self.addMethod( - "has", - members, - False, - BuiltinTypes[IDLBuiltinType.Types.boolean], - [getKeyArg()], - isPure=True, - ) - - if not self.readonly: - # void clear() - self.addMethod( - "clear", members, True, BuiltinTypes[IDLBuiltinType.Types.void], [] - ) - # boolean delete(keyType key) - self.addMethod( - "delete", - members, - True, - BuiltinTypes[IDLBuiltinType.Types.boolean], - [getKeyArg()], - ) - - # Always generate underscored functions (e.g. __add, __clear) for js - # implemented interfaces as convenience functions. - if isJSImplemented: - # void clear() - self.addMethod( - "clear", - members, - True, - BuiltinTypes[IDLBuiltinType.Types.void], - [], - chromeOnly=True, - ) - # boolean delete(keyType key) - self.addMethod( - "delete", - members, - True, - BuiltinTypes[IDLBuiltinType.Types.boolean], - [getKeyArg()], - chromeOnly=True, - ) - - if self.isSetlike(): - if not self.readonly: - # Add returns the set object it just added to. - # object add(keyType key) - - self.addMethod( - "add", - members, - True, - BuiltinTypes[IDLBuiltinType.Types.object], - [getKeyArg()], - ) - if isJSImplemented: - self.addMethod( - "add", - members, - True, - BuiltinTypes[IDLBuiltinType.Types.object], - [getKeyArg()], - chromeOnly=True, - ) - return - - # If we get this far, we're a maplike declaration. - - # valueType get(keyType key) - # - # Note that instead of the value type, we're using any here. The - # validity checks should happen as things are inserted into the map, - # and using any as the return type makes code generation much simpler. - # - # TODO: Bug 1155340 may change this to use specific type to provide - # more info to JIT. - self.addMethod( - "get", - members, - False, - BuiltinTypes[IDLBuiltinType.Types.any], - [getKeyArg()], - isPure=True, - ) - - def getValueArg(): - return IDLArgument( - self.location, - IDLUnresolvedIdentifier(self.location, "value"), - self.valueType, - ) - - if not self.readonly: - self.addMethod( - "set", - members, - True, - BuiltinTypes[IDLBuiltinType.Types.object], - [getKeyArg(), getValueArg()], - ) - if isJSImplemented: - self.addMethod( - "set", - members, - True, - BuiltinTypes[IDLBuiltinType.Types.object], - [getKeyArg(), getValueArg()], - chromeOnly=True, - ) - - -class IDLConst(IDLInterfaceMember): - def __init__(self, location, identifier, type, value): - IDLInterfaceMember.__init__( - self, location, identifier, IDLInterfaceMember.Tags.Const - ) - - assert isinstance(type, IDLType) - if type.isDictionary(): - raise WebIDLError( - "A constant cannot be of a dictionary type", [self.location] - ) - if type.isRecord(): - raise WebIDLError("A constant cannot be of a record type", [self.location]) - self.type = type - self.value = value - - if identifier.name == "prototype": - raise WebIDLError( - "The identifier of a constant must not be 'prototype'", [location] - ) - - def __str__(self): - return "'%s' const '%s'" % (self.type, self.identifier) - - def finish(self, scope): - IDLInterfaceMember.finish(self, scope) - - if not self.type.isComplete(): - type = self.type.complete(scope) - if not type.isPrimitive() and not type.isString(): - locations = [self.type.location, type.location] - try: - locations.append(type.inner.location) - except: - pass - raise WebIDLError("Incorrect type for constant", locations) - self.type = type - - # The value might not match the type - coercedValue = self.value.coerceToType(self.type, self.location) - assert coercedValue - - self.value = coercedValue - - def validate(self): - IDLInterfaceMember.validate(self) - - def handleExtendedAttribute(self, attr): - identifier = attr.identifier() - if identifier == "Exposed": - convertExposedAttrToGlobalNameSet(attr, self._exposureGlobalNames) - elif ( - identifier == "Pref" - or identifier == "ChromeOnly" - or identifier == "Func" - or identifier == "SecureContext" - or identifier == "NonEnumerable" - ): - # Known attributes that we don't need to do anything with here - pass - else: - raise WebIDLError( - "Unknown extended attribute %s on constant" % identifier, - [attr.location], - ) - IDLInterfaceMember.handleExtendedAttribute(self, attr) - - def _getDependentObjects(self): - return set([self.type, self.value]) - - -class IDLAttribute(IDLInterfaceMember): - def __init__( - self, - location, - identifier, - type, - readonly, - inherit=False, - static=False, - stringifier=False, - maplikeOrSetlike=None, - extendedAttrDict=None, - ): - IDLInterfaceMember.__init__( - self, - location, - identifier, - IDLInterfaceMember.Tags.Attr, - extendedAttrDict=extendedAttrDict, - ) - - assert isinstance(type, IDLType) - self.type = type - self.readonly = readonly - self.inherit = inherit - self._static = static - self.legacyLenientThis = False - self._legacyUnforgeable = False - self.stringifier = stringifier - self.slotIndices = None - assert maplikeOrSetlike is None or isinstance( - maplikeOrSetlike, IDLMaplikeOrSetlike - ) - self.maplikeOrSetlike = maplikeOrSetlike - self.dependsOn = "Everything" - self.affects = "Everything" - self.bindingAliases = [] - - if static and identifier.name == "prototype": - raise WebIDLError( - "The identifier of a static attribute must not be 'prototype'", - [location], - ) - - if readonly and inherit: - raise WebIDLError( - "An attribute cannot be both 'readonly' and 'inherit'", [self.location] - ) - - def isStatic(self): - return self._static - - def forceStatic(self): - self._static = True - - def __str__(self): - return "'%s' attribute '%s'" % (self.type, self.identifier) - - def finish(self, scope): - IDLInterfaceMember.finish(self, scope) - - if not self.type.isComplete(): - t = self.type.complete(scope) - - assert not isinstance(t, IDLUnresolvedType) - assert not isinstance(t, IDLTypedefType) - assert not isinstance(t.name, IDLUnresolvedIdentifier) - self.type = t - - if self.readonly and ( - self.type.hasClamp() - or self.type.hasEnforceRange() - or self.type.hasAllowShared() - or self.type.legacyNullToEmptyString - ): - raise WebIDLError( - "A readonly attribute cannot be [Clamp] or [EnforceRange] or [AllowShared]", - [self.location], - ) - if self.type.isDictionary() and not self.getExtendedAttribute("Cached"): - raise WebIDLError( - "An attribute cannot be of a dictionary type", [self.location] - ) - if self.type.isSequence() and not self.getExtendedAttribute("Cached"): - raise WebIDLError( - "A non-cached attribute cannot be of a sequence " "type", - [self.location], - ) - if self.type.isRecord() and not self.getExtendedAttribute("Cached"): - raise WebIDLError( - "A non-cached attribute cannot be of a record " "type", [self.location] - ) - if self.type.isUnion(): - for f in self.type.unroll().flatMemberTypes: - if f.isDictionary(): - raise WebIDLError( - "An attribute cannot be of a union " - "type if one of its member types (or " - "one of its member types's member " - "types, and so on) is a dictionary " - "type", - [self.location, f.location], - ) - if f.isSequence(): - raise WebIDLError( - "An attribute cannot be of a union " - "type if one of its member types (or " - "one of its member types's member " - "types, and so on) is a sequence " - "type", - [self.location, f.location], - ) - if f.isRecord(): - raise WebIDLError( - "An attribute cannot be of a union " - "type if one of its member types (or " - "one of its member types's member " - "types, and so on) is a record " - "type", - [self.location, f.location], - ) - if not self.type.isInterface() and self.getExtendedAttribute("PutForwards"): - raise WebIDLError( - "An attribute with [PutForwards] must have an " - "interface type as its type", - [self.location], - ) - - if not self.type.isInterface() and self.getExtendedAttribute("SameObject"): - raise WebIDLError( - "An attribute with [SameObject] must have an " - "interface type as its type", - [self.location], - ) - - if self.type.isPromise() and not self.readonly: - raise WebIDLError( - "Promise-returning attributes must be readonly", [self.location] - ) - - def validate(self): - def typeContainsChromeOnlyDictionaryMember(type): - if type.nullable() or type.isSequence() or type.isRecord(): - return typeContainsChromeOnlyDictionaryMember(type.inner) - - if type.isUnion(): - for memberType in type.flatMemberTypes: - (contains, location) = typeContainsChromeOnlyDictionaryMember( - memberType - ) - if contains: - return (True, location) - - if type.isDictionary(): - dictionary = type.inner - while dictionary: - (contains, location) = dictionaryContainsChromeOnlyMember( - dictionary - ) - if contains: - return (True, location) - dictionary = dictionary.parent - - return (False, None) - - def dictionaryContainsChromeOnlyMember(dictionary): - for member in dictionary.members: - if member.getExtendedAttribute("ChromeOnly"): - return (True, member.location) - (contains, location) = typeContainsChromeOnlyDictionaryMember( - member.type - ) - if contains: - return (True, location) - return (False, None) - - IDLInterfaceMember.validate(self) - - if self.getExtendedAttribute("Cached") or self.getExtendedAttribute( - "StoreInSlot" - ): - if not self.affects == "Nothing": - raise WebIDLError( - "Cached attributes and attributes stored in " - "slots must be Constant or Pure or " - "Affects=Nothing, since the getter won't always " - "be called.", - [self.location], - ) - (contains, location) = typeContainsChromeOnlyDictionaryMember(self.type) - if contains: - raise WebIDLError( - "[Cached] and [StoreInSlot] must not be used " - "on an attribute whose type contains a " - "[ChromeOnly] dictionary member", - [self.location, location], - ) - if self.getExtendedAttribute("Frozen"): - if ( - not self.type.isSequence() - and not self.type.isDictionary() - and not self.type.isRecord() - ): - raise WebIDLError( - "[Frozen] is only allowed on " - "sequence-valued, dictionary-valued, and " - "record-valued attributes", - [self.location], - ) - if not self.type.unroll().isExposedInAllOf(self.exposureSet): - raise WebIDLError( - "Attribute returns a type that is not exposed " - "everywhere where the attribute is exposed", - [self.location], - ) - if self.getExtendedAttribute("CEReactions"): - if self.readonly: - raise WebIDLError( - "[CEReactions] is not allowed on " "readonly attributes", - [self.location], - ) - - def handleExtendedAttribute(self, attr): - identifier = attr.identifier() - if ( - identifier == "SetterThrows" - or identifier == "SetterCanOOM" - or identifier == "SetterNeedsSubjectPrincipal" - ) and self.readonly: - raise WebIDLError( - "Readonly attributes must not be flagged as " "[%s]" % identifier, - [self.location], - ) - elif identifier == "BindingAlias": - if not attr.hasValue(): - raise WebIDLError( - "[BindingAlias] takes an identifier or string", [attr.location] - ) - self._addBindingAlias(attr.value()) - elif ( - ( - identifier == "Throws" - or identifier == "GetterThrows" - or identifier == "CanOOM" - or identifier == "GetterCanOOM" - ) - and self.getExtendedAttribute("StoreInSlot") - ) or ( - identifier == "StoreInSlot" - and ( - self.getExtendedAttribute("Throws") - or self.getExtendedAttribute("GetterThrows") - or self.getExtendedAttribute("CanOOM") - or self.getExtendedAttribute("GetterCanOOM") - ) - ): - raise WebIDLError("Throwing things can't be [StoreInSlot]", [attr.location]) - elif identifier == "LegacyLenientThis": - if not attr.noArguments(): - raise WebIDLError( - "[LegacyLenientThis] must take no arguments", [attr.location] - ) - if self.isStatic(): - raise WebIDLError( - "[LegacyLenientThis] is only allowed on non-static " "attributes", - [attr.location, self.location], - ) - if self.getExtendedAttribute("CrossOriginReadable"): - raise WebIDLError( - "[LegacyLenientThis] is not allowed in combination " - "with [CrossOriginReadable]", - [attr.location, self.location], - ) - if self.getExtendedAttribute("CrossOriginWritable"): - raise WebIDLError( - "[LegacyLenientThis] is not allowed in combination " - "with [CrossOriginWritable]", - [attr.location, self.location], - ) - self.legacyLenientThis = True - elif identifier == "LegacyUnforgeable": - if self.isStatic(): - raise WebIDLError( - "[LegacyUnforgeable] is only allowed on non-static " "attributes", - [attr.location, self.location], - ) - self._legacyUnforgeable = True - elif identifier == "SameObject" and not self.readonly: - raise WebIDLError( - "[SameObject] only allowed on readonly attributes", - [attr.location, self.location], - ) - elif identifier == "Constant" and not self.readonly: - raise WebIDLError( - "[Constant] only allowed on readonly attributes", - [attr.location, self.location], - ) - elif identifier == "PutForwards": - if not self.readonly: - raise WebIDLError( - "[PutForwards] is only allowed on readonly " "attributes", - [attr.location, self.location], - ) - if self.type.isPromise(): - raise WebIDLError( - "[PutForwards] is not allowed on " "Promise-typed attributes", - [attr.location, self.location], - ) - if self.isStatic(): - raise WebIDLError( - "[PutForwards] is only allowed on non-static " "attributes", - [attr.location, self.location], - ) - if self.getExtendedAttribute("Replaceable") is not None: - raise WebIDLError( - "[PutForwards] and [Replaceable] can't both " - "appear on the same attribute", - [attr.location, self.location], - ) - if not attr.hasValue(): - raise WebIDLError( - "[PutForwards] takes an identifier", [attr.location, self.location] - ) - elif identifier == "Replaceable": - if not attr.noArguments(): - raise WebIDLError( - "[Replaceable] must take no arguments", [attr.location] - ) - if not self.readonly: - raise WebIDLError( - "[Replaceable] is only allowed on readonly " "attributes", - [attr.location, self.location], - ) - if self.type.isPromise(): - raise WebIDLError( - "[Replaceable] is not allowed on " "Promise-typed attributes", - [attr.location, self.location], - ) - if self.isStatic(): - raise WebIDLError( - "[Replaceable] is only allowed on non-static " "attributes", - [attr.location, self.location], - ) - if self.getExtendedAttribute("PutForwards") is not None: - raise WebIDLError( - "[PutForwards] and [Replaceable] can't both " - "appear on the same attribute", - [attr.location, self.location], - ) - elif identifier == "LegacyLenientSetter": - if not attr.noArguments(): - raise WebIDLError( - "[LegacyLenientSetter] must take no arguments", [attr.location] - ) - if not self.readonly: - raise WebIDLError( - "[LegacyLenientSetter] is only allowed on readonly " "attributes", - [attr.location, self.location], - ) - if self.type.isPromise(): - raise WebIDLError( - "[LegacyLenientSetter] is not allowed on " - "Promise-typed attributes", - [attr.location, self.location], - ) - if self.isStatic(): - raise WebIDLError( - "[LegacyLenientSetter] is only allowed on non-static " "attributes", - [attr.location, self.location], - ) - if self.getExtendedAttribute("PutForwards") is not None: - raise WebIDLError( - "[LegacyLenientSetter] and [PutForwards] can't both " - "appear on the same attribute", - [attr.location, self.location], - ) - if self.getExtendedAttribute("Replaceable") is not None: - raise WebIDLError( - "[LegacyLenientSetter] and [Replaceable] can't both " - "appear on the same attribute", - [attr.location, self.location], - ) - elif identifier == "LenientFloat": - if self.readonly: - raise WebIDLError( - "[LenientFloat] used on a readonly attribute", - [attr.location, self.location], - ) - if not self.type.includesRestrictedFloat(): - raise WebIDLError( - "[LenientFloat] used on an attribute with a " - "non-restricted-float type", - [attr.location, self.location], - ) - elif identifier == "StoreInSlot": - if self.getExtendedAttribute("Cached"): - raise WebIDLError( - "[StoreInSlot] and [Cached] must not be " - "specified on the same attribute", - [attr.location, self.location], - ) - elif identifier == "Cached": - if self.getExtendedAttribute("StoreInSlot"): - raise WebIDLError( - "[Cached] and [StoreInSlot] must not be " - "specified on the same attribute", - [attr.location, self.location], - ) - elif identifier == "CrossOriginReadable" or identifier == "CrossOriginWritable": - if not attr.noArguments(): - raise WebIDLError( - "[%s] must take no arguments" % identifier, [attr.location] - ) - if self.isStatic(): - raise WebIDLError( - "[%s] is only allowed on non-static " "attributes" % identifier, - [attr.location, self.location], - ) - if self.getExtendedAttribute("LegacyLenientThis"): - raise WebIDLError( - "[LegacyLenientThis] is not allowed in combination " - "with [%s]" % identifier, - [attr.location, self.location], - ) - elif identifier == "Exposed": - convertExposedAttrToGlobalNameSet(attr, self._exposureGlobalNames) - elif identifier == "Pure": - if not attr.noArguments(): - raise WebIDLError("[Pure] must take no arguments", [attr.location]) - self._setDependsOn("DOMState") - self._setAffects("Nothing") - elif identifier == "Constant" or identifier == "SameObject": - if not attr.noArguments(): - raise WebIDLError( - "[%s] must take no arguments" % identifier, [attr.location] - ) - self._setDependsOn("Nothing") - self._setAffects("Nothing") - elif identifier == "Affects": - if not attr.hasValue(): - raise WebIDLError("[Affects] takes an identifier", [attr.location]) - self._setAffects(attr.value()) - elif identifier == "DependsOn": - if not attr.hasValue(): - raise WebIDLError("[DependsOn] takes an identifier", [attr.location]) - if ( - attr.value() != "Everything" - and attr.value() != "DOMState" - and not self.readonly - ): - raise WebIDLError( - "[DependsOn=%s] only allowed on " - "readonly attributes" % attr.value(), - [attr.location, self.location], - ) - self._setDependsOn(attr.value()) - elif identifier == "UseCounter": - if self.stringifier: - raise WebIDLError( - "[UseCounter] must not be used on a " "stringifier attribute", - [attr.location, self.location], - ) - elif identifier == "Unscopable": - if not attr.noArguments(): - raise WebIDLError( - "[Unscopable] must take no arguments", [attr.location] - ) - if self.isStatic(): - raise WebIDLError( - "[Unscopable] is only allowed on non-static " - "attributes and operations", - [attr.location, self.location], - ) - elif identifier == "CEReactions": - if not attr.noArguments(): - raise WebIDLError( - "[CEReactions] must take no arguments", [attr.location] - ) - elif ( - identifier == "Pref" - or identifier == "Deprecated" - or identifier == "SetterThrows" - or identifier == "Throws" - or identifier == "GetterThrows" - or identifier == "SetterCanOOM" - or identifier == "CanOOM" - or identifier == "GetterCanOOM" - or identifier == "ChromeOnly" - or identifier == "Func" - or identifier == "SecureContext" - or identifier == "Frozen" - or identifier == "NewObject" - or identifier == "NeedsSubjectPrincipal" - or identifier == "SetterNeedsSubjectPrincipal" - or identifier == "GetterNeedsSubjectPrincipal" - or identifier == "NeedsCallerType" - or identifier == "ReturnValueNeedsContainsHack" - or identifier == "BinaryName" - or identifier == "NonEnumerable" - ): - # Known attributes that we don't need to do anything with here - pass - else: - raise WebIDLError( - "Unknown extended attribute %s on attribute" % identifier, - [attr.location], - ) - IDLInterfaceMember.handleExtendedAttribute(self, attr) - - def resolve(self, parentScope): - assert isinstance(parentScope, IDLScope) - self.type.resolveType(parentScope) - IDLObjectWithIdentifier.resolve(self, parentScope) - - def hasLegacyLenientThis(self): - return self.legacyLenientThis - - def isMaplikeOrSetlikeAttr(self): - """ - True if this attribute was generated from an interface with - maplike/setlike (e.g. this is the size attribute for - maplike/setlike) - """ - return self.maplikeOrSetlike is not None - - def isLegacyUnforgeable(self): - return self._legacyUnforgeable - - def _getDependentObjects(self): - return set([self.type]) - - def expand(self, members): - assert self.stringifier - if ( - not self.type.isDOMString() - and not self.type.isUSVString() - and not self.type.isUTF8String() - ): - raise WebIDLError( - "The type of a stringifer attribute must be " - "either DOMString, USVString or UTF8String", - [self.location], - ) - identifier = IDLUnresolvedIdentifier( - self.location, "__stringifier", allowDoubleUnderscore=True - ) - method = IDLMethod( - self.location, - identifier, - returnType=self.type, - arguments=[], - stringifier=True, - underlyingAttr=self, - ) - allowedExtAttrs = ["Throws", "NeedsSubjectPrincipal", "Pure"] - # Safe to ignore these as they are only meaningful for attributes - attributeOnlyExtAttrs = [ - "CEReactions", - "CrossOriginWritable", - "SetterThrows", - ] - for (key, value) in self._extendedAttrDict.items(): - if key in allowedExtAttrs: - if value is not True: - raise WebIDLError( - "[%s] with a value is currently " - "unsupported in stringifier attributes, " - "please file a bug to add support" % key, - [self.location], - ) - method.addExtendedAttributes( - [IDLExtendedAttribute(self.location, (key,))] - ) - elif not key in attributeOnlyExtAttrs: - raise WebIDLError( - "[%s] is currently unsupported in " - "stringifier attributes, please file a bug " - "to add support" % key, - [self.location], - ) - members.append(method) - - -class IDLArgument(IDLObjectWithIdentifier): - def __init__( - self, - location, - identifier, - type, - optional=False, - defaultValue=None, - variadic=False, - dictionaryMember=False, - allowTypeAttributes=False, - ): - IDLObjectWithIdentifier.__init__(self, location, None, identifier) - - assert isinstance(type, IDLType) - self.type = type - - self.optional = optional - self.defaultValue = defaultValue - self.variadic = variadic - self.dictionaryMember = dictionaryMember - self._isComplete = False - self._allowTreatNonCallableAsNull = False - self._extendedAttrDict = {} - self.allowTypeAttributes = allowTypeAttributes - - assert not variadic or optional - assert not variadic or not defaultValue - - def addExtendedAttributes(self, attrs): - for attribute in attrs: - identifier = attribute.identifier() - if self.allowTypeAttributes and ( - identifier == "EnforceRange" - or identifier == "Clamp" - or identifier == "LegacyNullToEmptyString" - or identifier == "AllowShared" - ): - self.type = self.type.withExtendedAttributes([attribute]) - elif identifier == "TreatNonCallableAsNull": - self._allowTreatNonCallableAsNull = True - elif self.dictionaryMember and ( - identifier == "ChromeOnly" - or identifier == "Func" - or identifier == "Pref" - ): - if not self.optional: - raise WebIDLError( - "[%s] must not be used on a required " - "dictionary member" % identifier, - [attribute.location], - ) - else: - raise WebIDLError( - "Unhandled extended attribute on %s" - % ( - "a dictionary member" - if self.dictionaryMember - else "an argument" - ), - [attribute.location], - ) - attrlist = attribute.listValue() - self._extendedAttrDict[identifier] = attrlist if len(attrlist) else True - - def getExtendedAttribute(self, name): - return self._extendedAttrDict.get(name, None) - - def isComplete(self): - return self._isComplete - - def complete(self, scope): - if self._isComplete: - return - - self._isComplete = True - - if not self.type.isComplete(): - type = self.type.complete(scope) - assert not isinstance(type, IDLUnresolvedType) - assert not isinstance(type, IDLTypedefType) - assert not isinstance(type.name, IDLUnresolvedIdentifier) - self.type = type - - if self.type.isAny(): - assert self.defaultValue is None or isinstance( - self.defaultValue, IDLNullValue - ) - # optional 'any' values always have a default value - if self.optional and not self.defaultValue and not self.variadic: - # Set the default value to undefined, for simplicity, so the - # codegen doesn't have to special-case this. - self.defaultValue = IDLUndefinedValue(self.location) - - if self.dictionaryMember and self.type.legacyNullToEmptyString: - raise WebIDLError( - "Dictionary members cannot be [LegacyNullToEmptyString]", - [self.location], - ) - # Now do the coercing thing; this needs to happen after the - # above creation of a default value. - if self.defaultValue: - self.defaultValue = self.defaultValue.coerceToType(self.type, self.location) - assert self.defaultValue - - def allowTreatNonCallableAsNull(self): - return self._allowTreatNonCallableAsNull - - def _getDependentObjects(self): - deps = set([self.type]) - if self.defaultValue: - deps.add(self.defaultValue) - return deps - - def canHaveMissingValue(self): - return self.optional and not self.defaultValue - - -class IDLCallback(IDLObjectWithScope): - def __init__( - self, location, parentScope, identifier, returnType, arguments, isConstructor - ): - assert isinstance(returnType, IDLType) - - self._returnType = returnType - # Clone the list - self._arguments = list(arguments) - - IDLObjectWithScope.__init__(self, location, parentScope, identifier) - - for (returnType, arguments) in self.signatures(): - for argument in arguments: - argument.resolve(self) - - self._treatNonCallableAsNull = False - self._treatNonObjectAsNull = False - self._isRunScriptBoundary = False - self._isConstructor = isConstructor - - def isCallback(self): - return True - - def isConstructor(self): - return self._isConstructor - - def signatures(self): - return [(self._returnType, self._arguments)] - - def finish(self, scope): - if not self._returnType.isComplete(): - type = self._returnType.complete(scope) - - assert not isinstance(type, IDLUnresolvedType) - assert not isinstance(type, IDLTypedefType) - assert not isinstance(type.name, IDLUnresolvedIdentifier) - self._returnType = type - - for argument in self._arguments: - if argument.type.isComplete(): - continue - - type = argument.type.complete(scope) - - assert not isinstance(type, IDLUnresolvedType) - assert not isinstance(type, IDLTypedefType) - assert not isinstance(type.name, IDLUnresolvedIdentifier) - argument.type = type - - def validate(self): - pass - - def addExtendedAttributes(self, attrs): - unhandledAttrs = [] - for attr in attrs: - if attr.identifier() == "TreatNonCallableAsNull": - self._treatNonCallableAsNull = True - elif attr.identifier() == "LegacyTreatNonObjectAsNull": - if self._isConstructor: - raise WebIDLError( - "[LegacyTreatNonObjectAsNull] is not supported " - "on constructors", - [self.location], - ) - self._treatNonObjectAsNull = True - elif attr.identifier() == "MOZ_CAN_RUN_SCRIPT_BOUNDARY": - if self._isConstructor: - raise WebIDLError( - "[MOZ_CAN_RUN_SCRIPT_BOUNDARY] is not " - "permitted on constructors", - [self.location], - ) - self._isRunScriptBoundary = True - else: - unhandledAttrs.append(attr) - if self._treatNonCallableAsNull and self._treatNonObjectAsNull: - raise WebIDLError( - "Cannot specify both [TreatNonCallableAsNull] " - "and [LegacyTreatNonObjectAsNull]", - [self.location], - ) - if len(unhandledAttrs) != 0: - IDLType.addExtendedAttributes(self, unhandledAttrs) - - def _getDependentObjects(self): - return set([self._returnType] + self._arguments) - - def isRunScriptBoundary(self): - return self._isRunScriptBoundary - - -class IDLCallbackType(IDLType): - def __init__(self, location, callback): - IDLType.__init__(self, location, callback.identifier.name) - self.callback = callback - - def isCallback(self): - return True - - def tag(self): - return IDLType.Tags.callback - - def isDistinguishableFrom(self, other): - if other.isPromise(): - return False - if other.isUnion(): - # Just forward to the union; it'll deal - return other.isDistinguishableFrom(self) - return ( - other.isPrimitive() - or other.isString() - or other.isEnum() - or other.isNonCallbackInterface() - or other.isSequence() - ) - - def _getDependentObjects(self): - return self.callback._getDependentObjects() - - -class IDLMethodOverload: - """ - A class that represents a single overload of a WebIDL method. This is not - quite the same as an element of the "effective overload set" in the spec, - because separate IDLMethodOverloads are not created based on arguments being - optional. Rather, when multiple methods have the same name, there is an - IDLMethodOverload for each one, all hanging off an IDLMethod representing - the full set of overloads. - """ - - def __init__(self, returnType, arguments, location): - self.returnType = returnType - # Clone the list of arguments, just in case - self.arguments = list(arguments) - self.location = location - - def _getDependentObjects(self): - deps = set(self.arguments) - deps.add(self.returnType) - return deps - - def includesRestrictedFloatArgument(self): - return any(arg.type.includesRestrictedFloat() for arg in self.arguments) - - -class IDLMethod(IDLInterfaceMember, IDLScope): - - Special = enum( - "Getter", "Setter", "Deleter", "LegacyCaller", base=IDLInterfaceMember.Special - ) - - NamedOrIndexed = enum("Neither", "Named", "Indexed") - - def __init__( - self, - location, - identifier, - returnType, - arguments, - static=False, - getter=False, - setter=False, - deleter=False, - specialType=NamedOrIndexed.Neither, - legacycaller=False, - stringifier=False, - maplikeOrSetlikeOrIterable=None, - underlyingAttr=None, - ): - # REVIEW: specialType is NamedOrIndexed -- wow, this is messed up. - IDLInterfaceMember.__init__( - self, location, identifier, IDLInterfaceMember.Tags.Method - ) - - self._hasOverloads = False - - assert isinstance(returnType, IDLType) - - # self._overloads is a list of IDLMethodOverloads - self._overloads = [IDLMethodOverload(returnType, arguments, location)] - - assert isinstance(static, bool) - self._static = static - assert isinstance(getter, bool) - self._getter = getter - assert isinstance(setter, bool) - self._setter = setter - assert isinstance(deleter, bool) - self._deleter = deleter - assert isinstance(legacycaller, bool) - self._legacycaller = legacycaller - assert isinstance(stringifier, bool) - self._stringifier = stringifier - assert maplikeOrSetlikeOrIterable is None or isinstance( - maplikeOrSetlikeOrIterable, IDLMaplikeOrSetlikeOrIterableBase - ) - self.maplikeOrSetlikeOrIterable = maplikeOrSetlikeOrIterable - self._htmlConstructor = False - self.underlyingAttr = underlyingAttr - self._specialType = specialType - self._legacyUnforgeable = False - self.dependsOn = "Everything" - self.affects = "Everything" - self.aliases = [] - - if static and identifier.name == "prototype": - raise WebIDLError( - "The identifier of a static operation must not be 'prototype'", - [location], - ) - - self.assertSignatureConstraints() - - def __str__(self): - return "Method '%s'" % self.identifier - - def assertSignatureConstraints(self): - if self._getter or self._deleter: - assert len(self._overloads) == 1 - overload = self._overloads[0] - arguments = overload.arguments - assert len(arguments) == 1 - assert ( - arguments[0].type == BuiltinTypes[IDLBuiltinType.Types.domstring] - or arguments[0].type == BuiltinTypes[IDLBuiltinType.Types.unsigned_long] - ) - assert not arguments[0].optional and not arguments[0].variadic - assert not self._getter or not overload.returnType.isVoid() - - if self._setter: - assert len(self._overloads) == 1 - arguments = self._overloads[0].arguments - assert len(arguments) == 2 - assert ( - arguments[0].type == BuiltinTypes[IDLBuiltinType.Types.domstring] - or arguments[0].type == BuiltinTypes[IDLBuiltinType.Types.unsigned_long] - ) - assert not arguments[0].optional and not arguments[0].variadic - assert not arguments[1].optional and not arguments[1].variadic - - if self._stringifier: - assert len(self._overloads) == 1 - overload = self._overloads[0] - assert len(overload.arguments) == 0 - if not self.underlyingAttr: - assert ( - overload.returnType == BuiltinTypes[IDLBuiltinType.Types.domstring] - ) - - def isStatic(self): - return self._static - - def forceStatic(self): - self._static = True - - def isGetter(self): - return self._getter - - def isSetter(self): - return self._setter - - def isDeleter(self): - return self._deleter - - def isNamed(self): - assert ( - self._specialType == IDLMethod.NamedOrIndexed.Named - or self._specialType == IDLMethod.NamedOrIndexed.Indexed - ) - return self._specialType == IDLMethod.NamedOrIndexed.Named - - def isIndexed(self): - assert ( - self._specialType == IDLMethod.NamedOrIndexed.Named - or self._specialType == IDLMethod.NamedOrIndexed.Indexed - ) - return self._specialType == IDLMethod.NamedOrIndexed.Indexed - - def isLegacycaller(self): - return self._legacycaller - - def isStringifier(self): - return self._stringifier - - def isToJSON(self): - return self.identifier.name == "toJSON" - - def isDefaultToJSON(self): - return self.isToJSON() and self.getExtendedAttribute("Default") - - def isMaplikeOrSetlikeOrIterableMethod(self): - """ - True if this method was generated as part of a - maplike/setlike/etc interface (e.g. has/get methods) - """ - return self.maplikeOrSetlikeOrIterable is not None - - def isSpecial(self): - return ( - self.isGetter() - or self.isSetter() - or self.isDeleter() - or self.isLegacycaller() - or self.isStringifier() - ) - - def isHTMLConstructor(self): - return self._htmlConstructor - - def hasOverloads(self): - return self._hasOverloads - - def isIdentifierLess(self): - """ - True if the method name started with __, and if the method is not a - maplike/setlike method. Interfaces with maplike/setlike will generate - methods starting with __ for chrome only backing object access in JS - implemented interfaces, so while these functions use what is considered - an non-identifier name, they actually DO have an identifier. - """ - return ( - self.identifier.name[:2] == "__" - and not self.isMaplikeOrSetlikeOrIterableMethod() - ) - - def resolve(self, parentScope): - assert isinstance(parentScope, IDLScope) - IDLObjectWithIdentifier.resolve(self, parentScope) - IDLScope.__init__(self, self.location, parentScope, self.identifier) - for (returnType, arguments) in self.signatures(): - for argument in arguments: - argument.resolve(self) - - def addOverload(self, method): - assert len(method._overloads) == 1 - - if self._extendedAttrDict != method._extendedAttrDict: - extendedAttrDiff = set(self._extendedAttrDict.keys()) ^ set( - method._extendedAttrDict.keys() - ) - - if extendedAttrDiff == {"LenientFloat"}: - if "LenientFloat" not in self._extendedAttrDict: - for overload in self._overloads: - if overload.includesRestrictedFloatArgument(): - raise WebIDLError( - "Restricted float behavior differs on different " - "overloads of %s" % method.identifier, - [overload.location, method.location], - ) - self._extendedAttrDict["LenientFloat"] = method._extendedAttrDict[ - "LenientFloat" - ] - elif method._overloads[0].includesRestrictedFloatArgument(): - raise WebIDLError( - "Restricted float behavior differs on different " - "overloads of %s" % method.identifier, - [self.location, method.location], - ) - else: - raise WebIDLError( - "Extended attributes differ on different " - "overloads of %s" % method.identifier, - [self.location, method.location], - ) - - self._overloads.extend(method._overloads) - - self._hasOverloads = True - - if self.isStatic() != method.isStatic(): - raise WebIDLError( - "Overloaded identifier %s appears with different values of the 'static' attribute" - % method.identifier, - [method.location], - ) - - if self.isLegacycaller() != method.isLegacycaller(): - raise WebIDLError( - "Overloaded identifier %s appears with different values of the 'legacycaller' attribute" - % method.identifier, - [method.location], - ) - - # Can't overload special things! - assert not self.isGetter() - assert not method.isGetter() - assert not self.isSetter() - assert not method.isSetter() - assert not self.isDeleter() - assert not method.isDeleter() - assert not self.isStringifier() - assert not method.isStringifier() - assert not self.isHTMLConstructor() - assert not method.isHTMLConstructor() - - return self - - def signatures(self): - return [ - (overload.returnType, overload.arguments) for overload in self._overloads - ] - - def finish(self, scope): - IDLInterfaceMember.finish(self, scope) - - for overload in self._overloads: - returnType = overload.returnType - if not returnType.isComplete(): - returnType = returnType.complete(scope) - assert not isinstance(returnType, IDLUnresolvedType) - assert not isinstance(returnType, IDLTypedefType) - assert not isinstance(returnType.name, IDLUnresolvedIdentifier) - overload.returnType = returnType - - for argument in overload.arguments: - if not argument.isComplete(): - argument.complete(scope) - assert argument.type.isComplete() - - # Now compute various information that will be used by the - # WebIDL overload resolution algorithm. - self.maxArgCount = max(len(s[1]) for s in self.signatures()) - self.allowedArgCounts = [ - i - for i in range(self.maxArgCount + 1) - if len(self.signaturesForArgCount(i)) != 0 - ] - - def validate(self): - IDLInterfaceMember.validate(self) - - # Make sure our overloads are properly distinguishable and don't have - # different argument types before the distinguishing args. - for argCount in self.allowedArgCounts: - possibleOverloads = self.overloadsForArgCount(argCount) - if len(possibleOverloads) == 1: - continue - distinguishingIndex = self.distinguishingIndexForArgCount(argCount) - for idx in range(distinguishingIndex): - firstSigType = possibleOverloads[0].arguments[idx].type - for overload in possibleOverloads[1:]: - if overload.arguments[idx].type != firstSigType: - raise WebIDLError( - "Signatures for method '%s' with %d arguments have " - "different types of arguments at index %d, which " - "is before distinguishing index %d" - % ( - self.identifier.name, - argCount, - idx, - distinguishingIndex, - ), - [self.location, overload.location], - ) - - overloadWithPromiseReturnType = None - overloadWithoutPromiseReturnType = None - for overload in self._overloads: - returnType = overload.returnType - if not returnType.unroll().isExposedInAllOf(self.exposureSet): - raise WebIDLError( - "Overload returns a type that is not exposed " - "everywhere where the method is exposed", - [overload.location], - ) - - variadicArgument = None - - arguments = overload.arguments - for (idx, argument) in enumerate(arguments): - assert argument.type.isComplete() - - if ( - argument.type.isDictionary() - and argument.type.unroll().inner.canBeEmpty() - ) or ( - argument.type.isUnion() - and argument.type.unroll().hasPossiblyEmptyDictionaryType() - ): - # Optional dictionaries and unions containing optional - # dictionaries at the end of the list or followed by - # optional arguments must be optional. - if not argument.optional and all( - arg.optional for arg in arguments[idx + 1 :] - ): - raise WebIDLError( - "Dictionary argument without any " - "required fields or union argument " - "containing such dictionary not " - "followed by a required argument " - "must be optional", - [argument.location], - ) - - if not argument.defaultValue and all( - arg.optional for arg in arguments[idx + 1 :] - ): - raise WebIDLError( - "Dictionary argument without any " - "required fields or union argument " - "containing such dictionary not " - "followed by a required argument " - "must have a default value", - [argument.location], - ) - - # An argument cannot be a nullable dictionary or a - # nullable union containing a dictionary. - if argument.type.nullable() and ( - argument.type.isDictionary() - or ( - argument.type.isUnion() - and argument.type.unroll().hasDictionaryType() - ) - ): - raise WebIDLError( - "An argument cannot be a nullable " - "dictionary or nullable union " - "containing a dictionary", - [argument.location], - ) - - # Only the last argument can be variadic - if variadicArgument: - raise WebIDLError( - "Variadic argument is not last argument", - [variadicArgument.location], - ) - if argument.variadic: - variadicArgument = argument - - if returnType.isPromise(): - overloadWithPromiseReturnType = overload - else: - overloadWithoutPromiseReturnType = overload - - # Make sure either all our overloads return Promises or none do - if overloadWithPromiseReturnType and overloadWithoutPromiseReturnType: - raise WebIDLError( - "We have overloads with both Promise and " "non-Promise return types", - [ - overloadWithPromiseReturnType.location, - overloadWithoutPromiseReturnType.location, - ], - ) - - if overloadWithPromiseReturnType and self._legacycaller: - raise WebIDLError( - "May not have a Promise return type for a " "legacycaller.", - [overloadWithPromiseReturnType.location], - ) - - if self.getExtendedAttribute("StaticClassOverride") and not ( - self.identifier.scope.isJSImplemented() and self.isStatic() - ): - raise WebIDLError( - "StaticClassOverride can be applied to static" - " methods on JS-implemented classes only.", - [self.location], - ) - - # Ensure that toJSON methods satisfy the spec constraints on them. - if self.identifier.name == "toJSON": - if len(self.signatures()) != 1: - raise WebIDLError( - "toJSON method has multiple overloads", - [self._overloads[0].location, self._overloads[1].location], - ) - if len(self.signatures()[0][1]) != 0: - raise WebIDLError("toJSON method has arguments", [self.location]) - if not self.signatures()[0][0].isJSONType(): - raise WebIDLError( - "toJSON method has non-JSON return type", [self.location] - ) - - def overloadsForArgCount(self, argc): - return [ - overload - for overload in self._overloads - if len(overload.arguments) == argc - or ( - len(overload.arguments) > argc - and all(arg.optional for arg in overload.arguments[argc:]) - ) - or ( - len(overload.arguments) < argc - and len(overload.arguments) > 0 - and overload.arguments[-1].variadic - ) - ] - - def signaturesForArgCount(self, argc): - return [ - (overload.returnType, overload.arguments) - for overload in self.overloadsForArgCount(argc) - ] - - def locationsForArgCount(self, argc): - return [overload.location for overload in self.overloadsForArgCount(argc)] - - def distinguishingIndexForArgCount(self, argc): - def isValidDistinguishingIndex(idx, signatures): - for (firstSigIndex, (firstRetval, firstArgs)) in enumerate(signatures[:-1]): - for (secondRetval, secondArgs) in signatures[firstSigIndex + 1 :]: - if idx < len(firstArgs): - firstType = firstArgs[idx].type - else: - assert firstArgs[-1].variadic - firstType = firstArgs[-1].type - if idx < len(secondArgs): - secondType = secondArgs[idx].type - else: - assert secondArgs[-1].variadic - secondType = secondArgs[-1].type - if not firstType.isDistinguishableFrom(secondType): - return False - return True - - signatures = self.signaturesForArgCount(argc) - for idx in range(argc): - if isValidDistinguishingIndex(idx, signatures): - return idx - # No valid distinguishing index. Time to throw - locations = self.locationsForArgCount(argc) - raise WebIDLError( - "Signatures with %d arguments for method '%s' are not " - "distinguishable" % (argc, self.identifier.name), - locations, - ) - - def handleExtendedAttribute(self, attr): - identifier = attr.identifier() - if ( - identifier == "GetterThrows" - or identifier == "SetterThrows" - or identifier == "GetterCanOOM" - or identifier == "SetterCanOOM" - or identifier == "SetterNeedsSubjectPrincipal" - or identifier == "GetterNeedsSubjectPrincipal" - ): - raise WebIDLError( - "Methods must not be flagged as " "[%s]" % identifier, - [attr.location, self.location], - ) - elif identifier == "LegacyUnforgeable": - if self.isStatic(): - raise WebIDLError( - "[LegacyUnforgeable] is only allowed on non-static " "methods", - [attr.location, self.location], - ) - self._legacyUnforgeable = True - elif identifier == "SameObject": - raise WebIDLError( - "Methods must not be flagged as [SameObject]", - [attr.location, self.location], - ) - elif identifier == "Constant": - raise WebIDLError( - "Methods must not be flagged as [Constant]", - [attr.location, self.location], - ) - elif identifier == "PutForwards": - raise WebIDLError( - "Only attributes support [PutForwards]", [attr.location, self.location] - ) - elif identifier == "LegacyLenientSetter": - raise WebIDLError( - "Only attributes support [LegacyLenientSetter]", - [attr.location, self.location], - ) - elif identifier == "LenientFloat": - # This is called before we've done overload resolution - overloads = self._overloads - assert len(overloads) == 1 - if not overloads[0].returnType.isVoid(): - raise WebIDLError( - "[LenientFloat] used on a non-void method", - [attr.location, self.location], - ) - if not overloads[0].includesRestrictedFloatArgument(): - raise WebIDLError( - "[LenientFloat] used on an operation with no " - "restricted float type arguments", - [attr.location, self.location], - ) - elif identifier == "Exposed": - convertExposedAttrToGlobalNameSet(attr, self._exposureGlobalNames) - elif ( - identifier == "CrossOriginCallable" - or identifier == "WebGLHandlesContextLoss" - ): - # Known no-argument attributes. - if not attr.noArguments(): - raise WebIDLError( - "[%s] must take no arguments" % identifier, [attr.location] - ) - if identifier == "CrossOriginCallable" and self.isStatic(): - raise WebIDLError( - "[CrossOriginCallable] is only allowed on non-static " "attributes", - [attr.location, self.location], - ) - elif identifier == "Pure": - if not attr.noArguments(): - raise WebIDLError("[Pure] must take no arguments", [attr.location]) - self._setDependsOn("DOMState") - self._setAffects("Nothing") - elif identifier == "Affects": - if not attr.hasValue(): - raise WebIDLError("[Affects] takes an identifier", [attr.location]) - self._setAffects(attr.value()) - elif identifier == "DependsOn": - if not attr.hasValue(): - raise WebIDLError("[DependsOn] takes an identifier", [attr.location]) - self._setDependsOn(attr.value()) - elif identifier == "Alias": - if not attr.hasValue(): - raise WebIDLError( - "[Alias] takes an identifier or string", [attr.location] - ) - self._addAlias(attr.value()) - elif identifier == "UseCounter": - if self.isSpecial(): - raise WebIDLError( - "[UseCounter] must not be used on a special " "operation", - [attr.location, self.location], - ) - elif identifier == "Unscopable": - if not attr.noArguments(): - raise WebIDLError( - "[Unscopable] must take no arguments", [attr.location] - ) - if self.isStatic(): - raise WebIDLError( - "[Unscopable] is only allowed on non-static " - "attributes and operations", - [attr.location, self.location], - ) - elif identifier == "CEReactions": - if not attr.noArguments(): - raise WebIDLError( - "[CEReactions] must take no arguments", [attr.location] - ) - - if self.isSpecial() and not self.isSetter() and not self.isDeleter(): - raise WebIDLError( - "[CEReactions] is only allowed on operation, " - "attribute, setter, and deleter", - [attr.location, self.location], - ) - elif identifier == "Default": - if not attr.noArguments(): - raise WebIDLError("[Default] must take no arguments", [attr.location]) - - if not self.isToJSON(): - raise WebIDLError( - "[Default] is only allowed on toJSON operations", - [attr.location, self.location], - ) - - if self.signatures()[0][0] != BuiltinTypes[IDLBuiltinType.Types.object]: - raise WebIDLError( - "The return type of the default toJSON " - "operation must be 'object'", - [attr.location, self.location], - ) - elif ( - identifier == "Throws" - or identifier == "CanOOM" - or identifier == "NewObject" - or identifier == "ChromeOnly" - or identifier == "Pref" - or identifier == "Deprecated" - or identifier == "Func" - or identifier == "SecureContext" - or identifier == "BinaryName" - or identifier == "NeedsSubjectPrincipal" - or identifier == "NeedsCallerType" - or identifier == "StaticClassOverride" - or identifier == "NonEnumerable" - or identifier == "Unexposed" - ): - # Known attributes that we don't need to do anything with here - pass - else: - raise WebIDLError( - "Unknown extended attribute %s on method" % identifier, [attr.location] - ) - IDLInterfaceMember.handleExtendedAttribute(self, attr) - - def returnsPromise(self): - return self._overloads[0].returnType.isPromise() - - def isLegacyUnforgeable(self): - return self._legacyUnforgeable - - def _getDependentObjects(self): - deps = set() - for overload in self._overloads: - deps.update(overload._getDependentObjects()) - return deps - - -class IDLConstructor(IDLMethod): - def __init__(self, location, args, name): - # We can't actually init our IDLMethod yet, because we do not know the - # return type yet. Just save the info we have for now and we will init - # it later. - self._initLocation = location - self._initArgs = args - self._initName = name - self._inited = False - self._initExtendedAttrs = [] - - def addExtendedAttributes(self, attrs): - if self._inited: - return IDLMethod.addExtendedAttributes(self, attrs) - self._initExtendedAttrs.extend(attrs) - - def handleExtendedAttribute(self, attr): - identifier = attr.identifier() - if ( - identifier == "BinaryName" - or identifier == "ChromeOnly" - or identifier == "NewObject" - or identifier == "SecureContext" - or identifier == "Throws" - or identifier == "Func" - or identifier == "Pref" - ): - IDLMethod.handleExtendedAttribute(self, attr) - elif identifier == "HTMLConstructor": - if not attr.noArguments(): - raise WebIDLError( - "[HTMLConstructor] must take no arguments", [attr.location] - ) - # We shouldn't end up here for legacy factory functions. - assert self.identifier.name == "constructor" - - if any(len(sig[1]) != 0 for sig in self.signatures()): - raise WebIDLError( - "[HTMLConstructor] must not be applied to a " - "constructor operation that has arguments.", - [attr.location], - ) - self._htmlConstructor = True - else: - raise WebIDLError( - "Unknown extended attribute %s on method" % identifier, [attr.location] - ) - - def reallyInit(self, parentInterface): - name = self._initName - location = self._initLocation - identifier = IDLUnresolvedIdentifier(location, name, allowForbidden=True) - retType = IDLWrapperType(parentInterface.location, parentInterface) - IDLMethod.__init__( - self, location, identifier, retType, self._initArgs, static=True - ) - self._inited = True - # Propagate through whatever extended attributes we already had - self.addExtendedAttributes(self._initExtendedAttrs) - self._initExtendedAttrs = [] - # Constructors are always NewObject. Whether they throw or not is - # indicated by [Throws] annotations in the usual way. - self.addExtendedAttributes( - [IDLExtendedAttribute(self.location, ("NewObject",))] - ) - - -class IDLIncludesStatement(IDLObject): - def __init__(self, location, interface, mixin): - IDLObject.__init__(self, location) - self.interface = interface - self.mixin = mixin - self._finished = False - - def finish(self, scope): - if self._finished: - return - self._finished = True - assert isinstance(self.interface, IDLIdentifierPlaceholder) - assert isinstance(self.mixin, IDLIdentifierPlaceholder) - interface = self.interface.finish(scope) - mixin = self.mixin.finish(scope) - # NOTE: we depend on not setting self.interface and - # self.mixin here to keep track of the original - # locations. - if not isinstance(interface, IDLInterface): - raise WebIDLError( - "Left-hand side of 'includes' is not an " "interface", - [self.interface.location, interface.location], - ) - if interface.isCallback(): - raise WebIDLError( - "Left-hand side of 'includes' is a callback " "interface", - [self.interface.location, interface.location], - ) - if not isinstance(mixin, IDLInterfaceMixin): - raise WebIDLError( - "Right-hand side of 'includes' is not an " "interface mixin", - [self.mixin.location, mixin.location], - ) - - mixin.actualExposureGlobalNames.update(interface._exposureGlobalNames) - - interface.addIncludedMixin(mixin) - self.interface = interface - self.mixin = mixin - - def validate(self): - pass - - def addExtendedAttributes(self, attrs): - if len(attrs) != 0: - raise WebIDLError( - "There are no extended attributes that are " - "allowed on includes statements", - [attrs[0].location, self.location], - ) - - -class IDLExtendedAttribute(IDLObject): - """ - A class to represent IDL extended attributes so we can give them locations - """ - - def __init__(self, location, tuple): - IDLObject.__init__(self, location) - self._tuple = tuple - - def identifier(self): - return self._tuple[0] - - def noArguments(self): - return len(self._tuple) == 1 - - def hasValue(self): - return len(self._tuple) >= 2 and isinstance(self._tuple[1], str) - - def value(self): - assert self.hasValue() - return self._tuple[1] - - def hasArgs(self): - return ( - len(self._tuple) == 2 - and isinstance(self._tuple[1], list) - or len(self._tuple) == 3 - ) - - def args(self): - assert self.hasArgs() - # Our args are our last element - return self._tuple[-1] - - def listValue(self): - """ - Backdoor for storing random data in _extendedAttrDict - """ - return list(self._tuple)[1:] - - -# Parser - - -class Tokenizer(object): - tokens = ["INTEGER", "FLOATLITERAL", "IDENTIFIER", "STRING", "WHITESPACE", "OTHER"] - - def t_FLOATLITERAL(self, t): - r"(-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+|Infinity))|NaN" - t.value = float(t.value) - return t - - def t_INTEGER(self, t): - r"-?(0([0-7]+|[Xx][0-9A-Fa-f]+)?|[1-9][0-9]*)" - try: - # Can't use int(), because that doesn't handle octal properly. - t.value = parseInt(t.value) - except: - raise WebIDLError( - "Invalid integer literal", - [ - Location( - lexer=self.lexer, - lineno=self.lexer.lineno, - lexpos=self.lexer.lexpos, - filename=self._filename, - ) - ], - ) - return t - - def t_IDENTIFIER(self, t): - r"[_-]?[A-Za-z][0-9A-Z_a-z-]*" - t.type = self.keywords.get(t.value, "IDENTIFIER") - return t - - def t_STRING(self, t): - r'"[^"]*"' - t.value = t.value[1:-1] - return t - - def t_WHITESPACE(self, t): - r"[\t\n\r ]+|[\t\n\r ]*((//[^\n]*|/\*.*?\*/)[\t\n\r ]*)+" - pass - - def t_ELLIPSIS(self, t): - r"\.\.\." - t.type = self.keywords.get(t.value) - return t - - def t_OTHER(self, t): - r"[^\t\n\r 0-9A-Z_a-z]" - t.type = self.keywords.get(t.value, "OTHER") - return t - - keywords = { - "interface": "INTERFACE", - "partial": "PARTIAL", - "mixin": "MIXIN", - "dictionary": "DICTIONARY", - "exception": "EXCEPTION", - "enum": "ENUM", - "callback": "CALLBACK", - "typedef": "TYPEDEF", - "includes": "INCLUDES", - "const": "CONST", - "null": "NULL", - "true": "TRUE", - "false": "FALSE", - "serializer": "SERIALIZER", - "stringifier": "STRINGIFIER", - "unrestricted": "UNRESTRICTED", - "attribute": "ATTRIBUTE", - "readonly": "READONLY", - "inherit": "INHERIT", - "static": "STATIC", - "getter": "GETTER", - "setter": "SETTER", - "deleter": "DELETER", - "legacycaller": "LEGACYCALLER", - "optional": "OPTIONAL", - "...": "ELLIPSIS", - "::": "SCOPE", - "DOMString": "DOMSTRING", - "ByteString": "BYTESTRING", - "USVString": "USVSTRING", - "JSString": "JSSTRING", - "UTF8String": "UTF8STRING", - "any": "ANY", - "boolean": "BOOLEAN", - "byte": "BYTE", - "double": "DOUBLE", - "float": "FLOAT", - "long": "LONG", - "object": "OBJECT", - "octet": "OCTET", - "Promise": "PROMISE", - "required": "REQUIRED", - "sequence": "SEQUENCE", - "record": "RECORD", - "short": "SHORT", - "unsigned": "UNSIGNED", - "void": "VOID", - ":": "COLON", - ";": "SEMICOLON", - "{": "LBRACE", - "}": "RBRACE", - "(": "LPAREN", - ")": "RPAREN", - "[": "LBRACKET", - "]": "RBRACKET", - "?": "QUESTIONMARK", - ",": "COMMA", - "=": "EQUALS", - "<": "LT", - ">": "GT", - "ArrayBuffer": "ARRAYBUFFER", - "or": "OR", - "maplike": "MAPLIKE", - "setlike": "SETLIKE", - "iterable": "ITERABLE", - "namespace": "NAMESPACE", - "ReadableStream": "READABLESTREAM", - "constructor": "CONSTRUCTOR", - "symbol": "SYMBOL", - "async": "ASYNC", - } - - tokens.extend(keywords.values()) - - def t_error(self, t): - raise WebIDLError( - "Unrecognized Input", - [ - Location( - lexer=self.lexer, - lineno=self.lexer.lineno, - lexpos=self.lexer.lexpos, - filename=self.filename, - ) - ], - ) - - def __init__(self, outputdir, lexer=None): - if lexer: - self.lexer = lexer - else: - self.lexer = lex.lex(object=self, reflags=re.DOTALL) - - -class SqueakyCleanLogger(object): - errorWhitelist = [ - # Web IDL defines the WHITESPACE token, but doesn't actually - # use it ... so far. - "Token 'WHITESPACE' defined, but not used", - # And that means we have an unused token - "There is 1 unused token", - # Web IDL defines a OtherOrComma rule that's only used in - # ExtendedAttributeInner, which we don't use yet. - "Rule 'OtherOrComma' defined, but not used", - # And an unused rule - "There is 1 unused rule", - # And the OtherOrComma grammar symbol is unreachable. - "Symbol 'OtherOrComma' is unreachable", - # Which means the Other symbol is unreachable. - "Symbol 'Other' is unreachable", - ] - - def __init__(self): - self.errors = [] - - def debug(self, msg, *args, **kwargs): - pass - - info = debug - - def warning(self, msg, *args, **kwargs): - if ( - msg == "%s:%d: Rule %r defined, but not used" - or msg == "%s:%d: Rule '%s' defined, but not used" - ): - # Munge things so we don't have to hardcode filenames and - # line numbers in our whitelist. - whitelistmsg = "Rule %r defined, but not used" - whitelistargs = args[2:] - else: - whitelistmsg = msg - whitelistargs = args - if (whitelistmsg % whitelistargs) not in SqueakyCleanLogger.errorWhitelist: - self.errors.append(msg % args) - - error = warning - - def reportGrammarErrors(self): - if self.errors: - raise WebIDLError("\n".join(self.errors), []) - - -class Parser(Tokenizer): - def getLocation(self, p, i): - return Location(self.lexer, p.lineno(i), p.lexpos(i), self._filename) - - def globalScope(self): - return self._globalScope - - # The p_Foo functions here must match the WebIDL spec's grammar. - # It's acceptable to split things at '|' boundaries. - def p_Definitions(self, p): - """ - Definitions : ExtendedAttributeList Definition Definitions - """ - if p[2]: - p[0] = [p[2]] - p[2].addExtendedAttributes(p[1]) - else: - assert not p[1] - p[0] = [] - - p[0].extend(p[3]) - - def p_DefinitionsEmpty(self, p): - """ - Definitions : - """ - p[0] = [] - - def p_Definition(self, p): - """ - Definition : CallbackOrInterfaceOrMixin - | Namespace - | Partial - | Dictionary - | Exception - | Enum - | Typedef - | IncludesStatement - """ - p[0] = p[1] - assert p[1] # We might not have implemented something ... - - def p_CallbackOrInterfaceOrMixinCallback(self, p): - """ - CallbackOrInterfaceOrMixin : CALLBACK CallbackRestOrInterface - """ - if p[2].isInterface(): - assert isinstance(p[2], IDLInterface) - p[2].setCallback(True) - - p[0] = p[2] - - def p_CallbackOrInterfaceOrMixinInterfaceOrMixin(self, p): - """ - CallbackOrInterfaceOrMixin : INTERFACE InterfaceOrMixin - """ - p[0] = p[2] - - def p_CallbackRestOrInterface(self, p): - """ - CallbackRestOrInterface : CallbackRest - | CallbackConstructorRest - | CallbackInterface - """ - assert p[1] - p[0] = p[1] - - def handleNonPartialObject( - self, location, identifier, constructor, constructorArgs, nonPartialArgs - ): - """ - This handles non-partial objects (interfaces, namespaces and - dictionaries) by checking for an existing partial object, and promoting - it to non-partial as needed. The return value is the non-partial - object. - - constructorArgs are all the args for the constructor except the last - one: isKnownNonPartial. - - nonPartialArgs are the args for the setNonPartial call. - """ - # The name of the class starts with "IDL", so strip that off. - # Also, starts with a capital letter after that, so nix that - # as well. - prettyname = constructor.__name__[3:].lower() - - try: - existingObj = self.globalScope()._lookupIdentifier(identifier) - if existingObj: - if not isinstance(existingObj, constructor): - raise WebIDLError( - "%s has the same name as " - "non-%s object" % (prettyname.capitalize(), prettyname), - [location, existingObj.location], - ) - existingObj.setNonPartial(*nonPartialArgs) - return existingObj - except Exception as ex: - if isinstance(ex, WebIDLError): - raise ex - pass - - # True for isKnownNonPartial - return constructor(*(constructorArgs + [True])) - - def p_InterfaceOrMixin(self, p): - """ - InterfaceOrMixin : InterfaceRest - | MixinRest - """ - p[0] = p[1] - - def p_CallbackInterface(self, p): - """ - CallbackInterface : INTERFACE InterfaceRest - """ - p[0] = p[2] - - def p_InterfaceRest(self, p): - """ - InterfaceRest : IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(location, p[1]) - members = p[4] - parent = p[2] - - p[0] = self.handleNonPartialObject( - location, - identifier, - IDLInterface, - [location, self.globalScope(), identifier, parent, members], - [location, parent, members], - ) - - def p_InterfaceForwardDecl(self, p): - """ - InterfaceRest : IDENTIFIER SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(location, p[1]) - - try: - if self.globalScope()._lookupIdentifier(identifier): - p[0] = self.globalScope()._lookupIdentifier(identifier) - if not isinstance(p[0], IDLExternalInterface): - raise WebIDLError( - "Name collision between external " - "interface declaration for identifier " - "%s and %s" % (identifier.name, p[0]), - [location, p[0].location], - ) - return - except Exception as ex: - if isinstance(ex, WebIDLError): - raise ex - pass - - p[0] = IDLExternalInterface(location, self.globalScope(), identifier) - - def p_MixinRest(self, p): - """ - MixinRest : MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - members = p[4] - - p[0] = self.handleNonPartialObject( - location, - identifier, - IDLInterfaceMixin, - [location, self.globalScope(), identifier, members], - [location, members], - ) - - def p_Namespace(self, p): - """ - Namespace : NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - members = p[4] - - p[0] = self.handleNonPartialObject( - location, - identifier, - IDLNamespace, - [location, self.globalScope(), identifier, members], - [location, None, members], - ) - - def p_Partial(self, p): - """ - Partial : PARTIAL PartialDefinition - """ - p[0] = p[2] - - def p_PartialDefinitionInterface(self, p): - """ - PartialDefinition : INTERFACE PartialInterfaceOrPartialMixin - """ - p[0] = p[2] - - def p_PartialDefinition(self, p): - """ - PartialDefinition : PartialNamespace - | PartialDictionary - """ - p[0] = p[1] - - def handlePartialObject( - self, - location, - identifier, - nonPartialConstructor, - nonPartialConstructorArgs, - partialConstructorArgs, - ): - """ - This handles partial objects (interfaces, namespaces and dictionaries) - by checking for an existing non-partial object, and adding ourselves to - it as needed. The return value is our partial object. We use - IDLPartialInterfaceOrNamespace for partial interfaces or namespaces, - and IDLPartialDictionary for partial dictionaries. - - nonPartialConstructorArgs are all the args for the non-partial - constructor except the last two: members and isKnownNonPartial. - - partialConstructorArgs are the arguments for the partial object - constructor, except the last one (the non-partial object). - """ - # The name of the class starts with "IDL", so strip that off. - # Also, starts with a capital letter after that, so nix that - # as well. - prettyname = nonPartialConstructor.__name__[3:].lower() - - nonPartialObject = None - try: - nonPartialObject = self.globalScope()._lookupIdentifier(identifier) - if nonPartialObject: - if not isinstance(nonPartialObject, nonPartialConstructor): - raise WebIDLError( - "Partial %s has the same name as " - "non-%s object" % (prettyname, prettyname), - [location, nonPartialObject.location], - ) - except Exception as ex: - if isinstance(ex, WebIDLError): - raise ex - pass - - if not nonPartialObject: - nonPartialObject = nonPartialConstructor( - # No members, False for isKnownNonPartial - *(nonPartialConstructorArgs), - members=[], - isKnownNonPartial=False - ) - - partialObject = None - if isinstance(nonPartialObject, IDLDictionary): - partialObject = IDLPartialDictionary( - *(partialConstructorArgs + [nonPartialObject]) - ) - elif isinstance( - nonPartialObject, (IDLInterface, IDLInterfaceMixin, IDLNamespace) - ): - partialObject = IDLPartialInterfaceOrNamespace( - *(partialConstructorArgs + [nonPartialObject]) - ) - else: - raise WebIDLError( - "Unknown partial object type %s" % type(partialObject), [location] - ) - - return partialObject - - def p_PartialInterfaceOrPartialMixin(self, p): - """ - PartialInterfaceOrPartialMixin : PartialInterfaceRest - | PartialMixinRest - """ - p[0] = p[1] - - def p_PartialInterfaceRest(self, p): - """ - PartialInterfaceRest : IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(location, p[1]) - members = p[3] - - p[0] = self.handlePartialObject( - location, - identifier, - IDLInterface, - [location, self.globalScope(), identifier, None], - [location, identifier, members], - ) - - def p_PartialMixinRest(self, p): - """ - PartialMixinRest : MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - members = p[4] - - p[0] = self.handlePartialObject( - location, - identifier, - IDLInterfaceMixin, - [location, self.globalScope(), identifier], - [location, identifier, members], - ) - - def p_PartialNamespace(self, p): - """ - PartialNamespace : NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - members = p[4] - - p[0] = self.handlePartialObject( - location, - identifier, - IDLNamespace, - [location, self.globalScope(), identifier], - [location, identifier, members], - ) - - def p_PartialDictionary(self, p): - """ - PartialDictionary : DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - members = p[4] - - p[0] = self.handlePartialObject( - location, - identifier, - IDLDictionary, - [location, self.globalScope(), identifier], - [location, identifier, members], - ) - - def p_Inheritance(self, p): - """ - Inheritance : COLON ScopedName - """ - p[0] = IDLIdentifierPlaceholder(self.getLocation(p, 2), p[2]) - - def p_InheritanceEmpty(self, p): - """ - Inheritance : - """ - pass - - def p_InterfaceMembers(self, p): - """ - InterfaceMembers : ExtendedAttributeList InterfaceMember InterfaceMembers - """ - p[0] = [p[2]] - - assert not p[1] or p[2] - p[2].addExtendedAttributes(p[1]) - - p[0].extend(p[3]) - - def p_InterfaceMembersEmpty(self, p): - """ - InterfaceMembers : - """ - p[0] = [] - - def p_InterfaceMember(self, p): - """ - InterfaceMember : PartialInterfaceMember - | Constructor - """ - p[0] = p[1] - - def p_Constructor(self, p): - """ - Constructor : CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON - """ - p[0] = IDLConstructor(self.getLocation(p, 1), p[3], "constructor") - - def p_PartialInterfaceMembers(self, p): - """ - PartialInterfaceMembers : ExtendedAttributeList PartialInterfaceMember PartialInterfaceMembers - """ - p[0] = [p[2]] - - assert not p[1] or p[2] - p[2].addExtendedAttributes(p[1]) - - p[0].extend(p[3]) - - def p_PartialInterfaceMembersEmpty(self, p): - """ - PartialInterfaceMembers : - """ - p[0] = [] - - def p_PartialInterfaceMember(self, p): - """ - PartialInterfaceMember : Const - | AttributeOrOperationOrMaplikeOrSetlikeOrIterable - """ - p[0] = p[1] - - def p_MixinMembersEmpty(self, p): - """ - MixinMembers : - """ - p[0] = [] - - def p_MixinMembers(self, p): - """ - MixinMembers : ExtendedAttributeList MixinMember MixinMembers - """ - p[0] = [p[2]] - - assert not p[1] or p[2] - p[2].addExtendedAttributes(p[1]) - - p[0].extend(p[3]) - - def p_MixinMember(self, p): - """ - MixinMember : Const - | Attribute - | Operation - """ - p[0] = p[1] - - def p_Dictionary(self, p): - """ - Dictionary : DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - members = p[5] - p[0] = IDLDictionary(location, self.globalScope(), identifier, p[3], members) - - def p_DictionaryMembers(self, p): - """ - DictionaryMembers : ExtendedAttributeList DictionaryMember DictionaryMembers - | - """ - if len(p) == 1: - # We're at the end of the list - p[0] = [] - return - p[2].addExtendedAttributes(p[1]) - p[0] = [p[2]] - p[0].extend(p[3]) - - def p_DictionaryMemberRequired(self, p): - """ - DictionaryMember : REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON - """ - # These quack a lot like required arguments, so just treat them that way. - t = p[2] - assert isinstance(t, IDLType) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 3), p[3]) - - p[0] = IDLArgument( - self.getLocation(p, 3), - identifier, - t, - optional=False, - defaultValue=None, - variadic=False, - dictionaryMember=True, - ) - - def p_DictionaryMember(self, p): - """ - DictionaryMember : Type IDENTIFIER Default SEMICOLON - """ - # These quack a lot like optional arguments, so just treat them that way. - t = p[1] - assert isinstance(t, IDLType) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - defaultValue = p[3] - - # Any attributes that precede this may apply to the type, so - # we configure the argument to forward type attributes down instead of producing - # a parse error - p[0] = IDLArgument( - self.getLocation(p, 2), - identifier, - t, - optional=True, - defaultValue=defaultValue, - variadic=False, - dictionaryMember=True, - allowTypeAttributes=True, - ) - - def p_Default(self, p): - """ - Default : EQUALS DefaultValue - | - """ - if len(p) > 1: - p[0] = p[2] - else: - p[0] = None - - def p_DefaultValue(self, p): - """ - DefaultValue : ConstValue - | LBRACKET RBRACKET - | LBRACE RBRACE - """ - if len(p) == 2: - p[0] = p[1] - else: - assert len(p) == 3 # Must be [] or {} - if p[1] == "[": - p[0] = IDLEmptySequenceValue(self.getLocation(p, 1)) - else: - assert p[1] == "{" - p[0] = IDLDefaultDictionaryValue(self.getLocation(p, 1)) - - def p_DefaultValueNull(self, p): - """ - DefaultValue : NULL - """ - p[0] = IDLNullValue(self.getLocation(p, 1)) - - def p_Exception(self, p): - """ - Exception : EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON - """ - pass - - def p_Enum(self, p): - """ - Enum : ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON - """ - location = self.getLocation(p, 1) - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - - values = p[4] - assert values - p[0] = IDLEnum(location, self.globalScope(), identifier, values) - - def p_EnumValueList(self, p): - """ - EnumValueList : STRING EnumValueListComma - """ - p[0] = [p[1]] - p[0].extend(p[2]) - - def p_EnumValueListComma(self, p): - """ - EnumValueListComma : COMMA EnumValueListString - """ - p[0] = p[2] - - def p_EnumValueListCommaEmpty(self, p): - """ - EnumValueListComma : - """ - p[0] = [] - - def p_EnumValueListString(self, p): - """ - EnumValueListString : STRING EnumValueListComma - """ - p[0] = [p[1]] - p[0].extend(p[2]) - - def p_EnumValueListStringEmpty(self, p): - """ - EnumValueListString : - """ - p[0] = [] - - def p_CallbackRest(self, p): - """ - CallbackRest : IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON - """ - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 1), p[1]) - p[0] = IDLCallback( - self.getLocation(p, 1), - self.globalScope(), - identifier, - p[3], - p[5], - isConstructor=False, - ) - - def p_CallbackConstructorRest(self, p): - """ - CallbackConstructorRest : CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON - """ - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2]) - p[0] = IDLCallback( - self.getLocation(p, 2), - self.globalScope(), - identifier, - p[4], - p[6], - isConstructor=True, - ) - - def p_ExceptionMembers(self, p): - """ - ExceptionMembers : ExtendedAttributeList ExceptionMember ExceptionMembers - | - """ - pass - - def p_Typedef(self, p): - """ - Typedef : TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON - """ - typedef = IDLTypedef(self.getLocation(p, 1), self.globalScope(), p[2], p[3]) - p[0] = typedef - - def p_IncludesStatement(self, p): - """ - IncludesStatement : ScopedName INCLUDES ScopedName SEMICOLON - """ - assert p[2] == "includes" - interface = IDLIdentifierPlaceholder(self.getLocation(p, 1), p[1]) - mixin = IDLIdentifierPlaceholder(self.getLocation(p, 3), p[3]) - p[0] = IDLIncludesStatement(self.getLocation(p, 1), interface, mixin) - - def p_Const(self, p): - """ - Const : CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON - """ - location = self.getLocation(p, 1) - type = p[2] - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 3), p[3]) - value = p[5] - p[0] = IDLConst(location, identifier, type, value) - - def p_ConstValueBoolean(self, p): - """ - ConstValue : BooleanLiteral - """ - location = self.getLocation(p, 1) - booleanType = BuiltinTypes[IDLBuiltinType.Types.boolean] - p[0] = IDLValue(location, booleanType, p[1]) - - def p_ConstValueInteger(self, p): - """ - ConstValue : INTEGER - """ - location = self.getLocation(p, 1) - - # We don't know ahead of time what type the integer literal is. - # Determine the smallest type it could possibly fit in and use that. - integerType = matchIntegerValueToType(p[1]) - if integerType is None: - raise WebIDLError("Integer literal out of range", [location]) - - p[0] = IDLValue(location, integerType, p[1]) - - def p_ConstValueFloat(self, p): - """ - ConstValue : FLOATLITERAL - """ - location = self.getLocation(p, 1) - p[0] = IDLValue( - location, BuiltinTypes[IDLBuiltinType.Types.unrestricted_float], p[1] - ) - - def p_ConstValueString(self, p): - """ - ConstValue : STRING - """ - location = self.getLocation(p, 1) - stringType = BuiltinTypes[IDLBuiltinType.Types.domstring] - p[0] = IDLValue(location, stringType, p[1]) - - def p_BooleanLiteralTrue(self, p): - """ - BooleanLiteral : TRUE - """ - p[0] = True - - def p_BooleanLiteralFalse(self, p): - """ - BooleanLiteral : FALSE - """ - p[0] = False - - def p_AttributeOrOperationOrMaplikeOrSetlikeOrIterable(self, p): - """ - AttributeOrOperationOrMaplikeOrSetlikeOrIterable : Attribute - | Maplike - | Setlike - | Iterable - | Operation - """ - p[0] = p[1] - - def p_Iterable(self, p): - """ - Iterable : ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON - | ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - """ - location = self.getLocation(p, 2) - identifier = IDLUnresolvedIdentifier( - location, "__iterable", allowDoubleUnderscore=True - ) - if len(p) > 6: - keyType = p[3] - valueType = p[5] - else: - keyType = None - valueType = p[3] - - p[0] = IDLIterable(location, identifier, keyType, valueType, self.globalScope()) - - def p_Setlike(self, p): - """ - Setlike : ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON - """ - readonly = p[1] - maplikeOrSetlikeType = p[2] - location = self.getLocation(p, 2) - identifier = IDLUnresolvedIdentifier( - location, "__setlike", allowDoubleUnderscore=True - ) - keyType = p[4] - valueType = keyType - p[0] = IDLMaplikeOrSetlike( - location, identifier, maplikeOrSetlikeType, readonly, keyType, valueType - ) - - def p_Maplike(self, p): - """ - Maplike : ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - """ - readonly = p[1] - maplikeOrSetlikeType = p[2] - location = self.getLocation(p, 2) - identifier = IDLUnresolvedIdentifier( - location, "__maplike", allowDoubleUnderscore=True - ) - keyType = p[4] - valueType = p[6] - p[0] = IDLMaplikeOrSetlike( - location, identifier, maplikeOrSetlikeType, readonly, keyType, valueType - ) - - def p_AttributeWithQualifier(self, p): - """ - Attribute : Qualifier AttributeRest - """ - static = IDLInterfaceMember.Special.Static in p[1] - stringifier = IDLInterfaceMember.Special.Stringifier in p[1] - (location, identifier, type, readonly) = p[2] - p[0] = IDLAttribute( - location, identifier, type, readonly, static=static, stringifier=stringifier - ) - - def p_AttributeInherited(self, p): - """ - Attribute : INHERIT AttributeRest - """ - (location, identifier, type, readonly) = p[2] - p[0] = IDLAttribute(location, identifier, type, readonly, inherit=True) - - def p_Attribute(self, p): - """ - Attribute : AttributeRest - """ - (location, identifier, type, readonly) = p[1] - p[0] = IDLAttribute(location, identifier, type, readonly, inherit=False) - - def p_AttributeRest(self, p): - """ - AttributeRest : ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON - """ - location = self.getLocation(p, 2) - readonly = p[1] - t = p[3] - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 4), p[4]) - p[0] = (location, identifier, t, readonly) - - def p_ReadOnly(self, p): - """ - ReadOnly : READONLY - """ - p[0] = True - - def p_ReadOnlyEmpty(self, p): - """ - ReadOnly : - """ - p[0] = False - - def p_Operation(self, p): - """ - Operation : Qualifiers OperationRest - """ - qualifiers = p[1] - - # Disallow duplicates in the qualifier set - if not len(set(qualifiers)) == len(qualifiers): - raise WebIDLError( - "Duplicate qualifiers are not allowed", [self.getLocation(p, 1)] - ) - - static = IDLInterfaceMember.Special.Static in p[1] - # If static is there that's all that's allowed. This is disallowed - # by the parser, so we can assert here. - assert not static or len(qualifiers) == 1 - - stringifier = IDLInterfaceMember.Special.Stringifier in p[1] - # If stringifier is there that's all that's allowed. This is disallowed - # by the parser, so we can assert here. - assert not stringifier or len(qualifiers) == 1 - - getter = True if IDLMethod.Special.Getter in p[1] else False - setter = True if IDLMethod.Special.Setter in p[1] else False - deleter = True if IDLMethod.Special.Deleter in p[1] else False - legacycaller = True if IDLMethod.Special.LegacyCaller in p[1] else False - - if getter or deleter: - if setter: - raise WebIDLError( - "getter and deleter are incompatible with setter", - [self.getLocation(p, 1)], - ) - - (returnType, identifier, arguments) = p[2] - - assert isinstance(returnType, IDLType) - - specialType = IDLMethod.NamedOrIndexed.Neither - - if getter or deleter: - if len(arguments) != 1: - raise WebIDLError( - "%s has wrong number of arguments" - % ("getter" if getter else "deleter"), - [self.getLocation(p, 2)], - ) - argType = arguments[0].type - if argType == BuiltinTypes[IDLBuiltinType.Types.domstring]: - specialType = IDLMethod.NamedOrIndexed.Named - elif argType == BuiltinTypes[IDLBuiltinType.Types.unsigned_long]: - specialType = IDLMethod.NamedOrIndexed.Indexed - if deleter: - raise WebIDLError( - "There is no such thing as an indexed deleter.", - [self.getLocation(p, 1)], - ) - else: - raise WebIDLError( - "%s has wrong argument type (must be DOMString or UnsignedLong)" - % ("getter" if getter else "deleter"), - [arguments[0].location], - ) - if arguments[0].optional or arguments[0].variadic: - raise WebIDLError( - "%s cannot have %s argument" - % ( - "getter" if getter else "deleter", - "optional" if arguments[0].optional else "variadic", - ), - [arguments[0].location], - ) - if getter: - if returnType.isVoid(): - raise WebIDLError( - "getter cannot have void return type", [self.getLocation(p, 2)] - ) - if setter: - if len(arguments) != 2: - raise WebIDLError( - "setter has wrong number of arguments", [self.getLocation(p, 2)] - ) - argType = arguments[0].type - if argType == BuiltinTypes[IDLBuiltinType.Types.domstring]: - specialType = IDLMethod.NamedOrIndexed.Named - elif argType == BuiltinTypes[IDLBuiltinType.Types.unsigned_long]: - specialType = IDLMethod.NamedOrIndexed.Indexed - else: - raise WebIDLError( - "settter has wrong argument type (must be DOMString or UnsignedLong)", - [arguments[0].location], - ) - if arguments[0].optional or arguments[0].variadic: - raise WebIDLError( - "setter cannot have %s argument" - % ("optional" if arguments[0].optional else "variadic"), - [arguments[0].location], - ) - if arguments[1].optional or arguments[1].variadic: - raise WebIDLError( - "setter cannot have %s argument" - % ("optional" if arguments[1].optional else "variadic"), - [arguments[1].location], - ) - - if stringifier: - if len(arguments) != 0: - raise WebIDLError( - "stringifier has wrong number of arguments", - [self.getLocation(p, 2)], - ) - if not returnType.isDOMString(): - raise WebIDLError( - "stringifier must have DOMString return type", - [self.getLocation(p, 2)], - ) - - # identifier might be None. This is only permitted for special methods. - if not identifier: - if ( - not getter - and not setter - and not deleter - and not legacycaller - and not stringifier - ): - raise WebIDLError( - "Identifier required for non-special methods", - [self.getLocation(p, 2)], - ) - - location = BuiltinLocation("") - identifier = IDLUnresolvedIdentifier( - location, - "__%s%s%s%s%s%s" - % ( - "named" - if specialType == IDLMethod.NamedOrIndexed.Named - else "indexed" - if specialType == IDLMethod.NamedOrIndexed.Indexed - else "", - "getter" if getter else "", - "setter" if setter else "", - "deleter" if deleter else "", - "legacycaller" if legacycaller else "", - "stringifier" if stringifier else "", - ), - allowDoubleUnderscore=True, - ) - - method = IDLMethod( - self.getLocation(p, 2), - identifier, - returnType, - arguments, - static=static, - getter=getter, - setter=setter, - deleter=deleter, - specialType=specialType, - legacycaller=legacycaller, - stringifier=stringifier, - ) - p[0] = method - - def p_Stringifier(self, p): - """ - Operation : STRINGIFIER SEMICOLON - """ - identifier = IDLUnresolvedIdentifier( - BuiltinLocation(""), - "__stringifier", - allowDoubleUnderscore=True, - ) - method = IDLMethod( - self.getLocation(p, 1), - identifier, - returnType=BuiltinTypes[IDLBuiltinType.Types.domstring], - arguments=[], - stringifier=True, - ) - p[0] = method - - def p_QualifierStatic(self, p): - """ - Qualifier : STATIC - """ - p[0] = [IDLInterfaceMember.Special.Static] - - def p_QualifierStringifier(self, p): - """ - Qualifier : STRINGIFIER - """ - p[0] = [IDLInterfaceMember.Special.Stringifier] - - def p_Qualifiers(self, p): - """ - Qualifiers : Qualifier - | Specials - """ - p[0] = p[1] - - def p_Specials(self, p): - """ - Specials : Special Specials - """ - p[0] = [p[1]] - p[0].extend(p[2]) - - def p_SpecialsEmpty(self, p): - """ - Specials : - """ - p[0] = [] - - def p_SpecialGetter(self, p): - """ - Special : GETTER - """ - p[0] = IDLMethod.Special.Getter - - def p_SpecialSetter(self, p): - """ - Special : SETTER - """ - p[0] = IDLMethod.Special.Setter - - def p_SpecialDeleter(self, p): - """ - Special : DELETER - """ - p[0] = IDLMethod.Special.Deleter - - def p_SpecialLegacyCaller(self, p): - """ - Special : LEGACYCALLER - """ - p[0] = IDLMethod.Special.LegacyCaller - - def p_OperationRest(self, p): - """ - OperationRest : ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON - """ - p[0] = (p[1], p[2], p[4]) - - def p_OptionalIdentifier(self, p): - """ - OptionalIdentifier : IDENTIFIER - """ - p[0] = IDLUnresolvedIdentifier(self.getLocation(p, 1), p[1]) - - def p_OptionalIdentifierEmpty(self, p): - """ - OptionalIdentifier : - """ - pass - - def p_ArgumentList(self, p): - """ - ArgumentList : Argument Arguments - """ - p[0] = [p[1]] if p[1] else [] - p[0].extend(p[2]) - - def p_ArgumentListEmpty(self, p): - """ - ArgumentList : - """ - p[0] = [] - - def p_Arguments(self, p): - """ - Arguments : COMMA Argument Arguments - """ - p[0] = [p[2]] if p[2] else [] - p[0].extend(p[3]) - - def p_ArgumentsEmpty(self, p): - """ - Arguments : - """ - p[0] = [] - - def p_Argument(self, p): - """ - Argument : ExtendedAttributeList ArgumentRest - """ - p[0] = p[2] - p[0].addExtendedAttributes(p[1]) - - def p_ArgumentRestOptional(self, p): - """ - ArgumentRest : OPTIONAL TypeWithExtendedAttributes ArgumentName Default - """ - t = p[2] - assert isinstance(t, IDLType) - # Arg names can be reserved identifiers - identifier = IDLUnresolvedIdentifier( - self.getLocation(p, 3), p[3], allowForbidden=True - ) - - defaultValue = p[4] - - # We can't test t.isAny() here and give it a default value as needed, - # since at this point t is not a fully resolved type yet (e.g. it might - # be a typedef). We'll handle the 'any' case in IDLArgument.complete. - - p[0] = IDLArgument( - self.getLocation(p, 3), identifier, t, True, defaultValue, False - ) - - def p_ArgumentRest(self, p): - """ - ArgumentRest : Type Ellipsis ArgumentName - """ - t = p[1] - assert isinstance(t, IDLType) - # Arg names can be reserved identifiers - identifier = IDLUnresolvedIdentifier( - self.getLocation(p, 3), p[3], allowForbidden=True - ) - - variadic = p[2] - - # We can't test t.isAny() here and give it a default value as needed, - # since at this point t is not a fully resolved type yet (e.g. it might - # be a typedef). We'll handle the 'any' case in IDLArgument.complete. - - # variadic implies optional - # Any attributes that precede this may apply to the type, so - # we configure the argument to forward type attributes down instead of producing - # a parse error - p[0] = IDLArgument( - self.getLocation(p, 3), - identifier, - t, - variadic, - None, - variadic, - allowTypeAttributes=True, - ) - - def p_ArgumentName(self, p): - """ - ArgumentName : IDENTIFIER - | ArgumentNameKeyword - """ - p[0] = p[1] - - def p_ArgumentNameKeyword(self, p): - """ - ArgumentNameKeyword : ASYNC - | ATTRIBUTE - | CALLBACK - | CONST - | CONSTRUCTOR - | DELETER - | DICTIONARY - | ENUM - | EXCEPTION - | GETTER - | INCLUDES - | INHERIT - | INTERFACE - | ITERABLE - | LEGACYCALLER - | MAPLIKE - | MIXIN - | NAMESPACE - | PARTIAL - | READONLY - | REQUIRED - | SERIALIZER - | SETLIKE - | SETTER - | STATIC - | STRINGIFIER - | TYPEDEF - | UNRESTRICTED - """ - p[0] = p[1] - - def p_AttributeName(self, p): - """ - AttributeName : IDENTIFIER - | AttributeNameKeyword - """ - p[0] = p[1] - - def p_AttributeNameKeyword(self, p): - """ - AttributeNameKeyword : ASYNC - | REQUIRED - """ - p[0] = p[1] - - def p_Ellipsis(self, p): - """ - Ellipsis : ELLIPSIS - """ - p[0] = True - - def p_EllipsisEmpty(self, p): - """ - Ellipsis : - """ - p[0] = False - - def p_ExceptionMember(self, p): - """ - ExceptionMember : Const - | ExceptionField - """ - pass - - def p_ExceptionField(self, p): - """ - ExceptionField : Type IDENTIFIER SEMICOLON - """ - pass - - def p_ExtendedAttributeList(self, p): - """ - ExtendedAttributeList : LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - """ - p[0] = [p[2]] - if p[3]: - p[0].extend(p[3]) - - def p_ExtendedAttributeListEmpty(self, p): - """ - ExtendedAttributeList : - """ - p[0] = [] - - def p_ExtendedAttribute(self, p): - """ - ExtendedAttribute : ExtendedAttributeNoArgs - | ExtendedAttributeArgList - | ExtendedAttributeIdent - | ExtendedAttributeNamedArgList - | ExtendedAttributeIdentList - """ - p[0] = IDLExtendedAttribute(self.getLocation(p, 1), p[1]) - - def p_ExtendedAttributeEmpty(self, p): - """ - ExtendedAttribute : - """ - pass - - def p_ExtendedAttributes(self, p): - """ - ExtendedAttributes : COMMA ExtendedAttribute ExtendedAttributes - """ - p[0] = [p[2]] if p[2] else [] - p[0].extend(p[3]) - - def p_ExtendedAttributesEmpty(self, p): - """ - ExtendedAttributes : - """ - p[0] = [] - - def p_Other(self, p): - """ - Other : INTEGER - | FLOATLITERAL - | IDENTIFIER - | STRING - | OTHER - | ELLIPSIS - | COLON - | SCOPE - | SEMICOLON - | LT - | EQUALS - | GT - | QUESTIONMARK - | DOMSTRING - | BYTESTRING - | USVSTRING - | UTF8STRING - | JSSTRING - | PROMISE - | ANY - | BOOLEAN - | BYTE - | DOUBLE - | FALSE - | FLOAT - | LONG - | NULL - | OBJECT - | OCTET - | OR - | OPTIONAL - | RECORD - | SEQUENCE - | SHORT - | SYMBOL - | TRUE - | UNSIGNED - | VOID - | ArgumentNameKeyword - """ - pass - - def p_OtherOrComma(self, p): - """ - OtherOrComma : Other - | COMMA - """ - pass - - def p_TypeSingleType(self, p): - """ - Type : SingleType - """ - p[0] = p[1] - - def p_TypeUnionType(self, p): - """ - Type : UnionType Null - """ - p[0] = self.handleNullable(p[1], p[2]) - - def p_TypeWithExtendedAttributes(self, p): - """ - TypeWithExtendedAttributes : ExtendedAttributeList Type - """ - p[0] = p[2].withExtendedAttributes(p[1]) - - def p_SingleTypeDistinguishableType(self, p): - """ - SingleType : DistinguishableType - """ - p[0] = p[1] - - def p_SingleTypeAnyType(self, p): - """ - SingleType : ANY - """ - p[0] = BuiltinTypes[IDLBuiltinType.Types.any] - - # Note: Promise is allowed, so we want to parametrize on ReturnType, - # not Type. Promise types can't be null, hence no "Null" in there. - def p_SingleTypePromiseType(self, p): - """ - SingleType : PROMISE LT ReturnType GT - """ - p[0] = IDLPromiseType(self.getLocation(p, 1), p[3]) - - def p_UnionType(self, p): - """ - UnionType : LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - """ - types = [p[2], p[4]] - types.extend(p[5]) - p[0] = IDLUnionType(self.getLocation(p, 1), types) - - def p_UnionMemberTypeDistinguishableType(self, p): - """ - UnionMemberType : ExtendedAttributeList DistinguishableType - """ - p[0] = p[2].withExtendedAttributes(p[1]) - - def p_UnionMemberType(self, p): - """ - UnionMemberType : UnionType Null - """ - p[0] = self.handleNullable(p[1], p[2]) - - def p_UnionMemberTypes(self, p): - """ - UnionMemberTypes : OR UnionMemberType UnionMemberTypes - """ - p[0] = [p[2]] - p[0].extend(p[3]) - - def p_UnionMemberTypesEmpty(self, p): - """ - UnionMemberTypes : - """ - p[0] = [] - - def p_DistinguishableType(self, p): - """ - DistinguishableType : PrimitiveType Null - | ARRAYBUFFER Null - | READABLESTREAM Null - | OBJECT Null - """ - if p[1] == "object": - type = BuiltinTypes[IDLBuiltinType.Types.object] - elif p[1] == "ArrayBuffer": - type = BuiltinTypes[IDLBuiltinType.Types.ArrayBuffer] - elif p[1] == "ReadableStream": - type = BuiltinTypes[IDLBuiltinType.Types.ReadableStream] - else: - type = BuiltinTypes[p[1]] - - p[0] = self.handleNullable(type, p[2]) - - def p_DistinguishableTypeStringType(self, p): - """ - DistinguishableType : StringType Null - """ - p[0] = self.handleNullable(p[1], p[2]) - - def p_DistinguishableTypeSequenceType(self, p): - """ - DistinguishableType : SEQUENCE LT TypeWithExtendedAttributes GT Null - """ - innerType = p[3] - type = IDLSequenceType(self.getLocation(p, 1), innerType) - p[0] = self.handleNullable(type, p[5]) - - def p_DistinguishableTypeRecordType(self, p): - """ - DistinguishableType : RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - """ - keyType = p[3] - valueType = p[5] - type = IDLRecordType(self.getLocation(p, 1), keyType, valueType) - p[0] = self.handleNullable(type, p[7]) - - def p_DistinguishableTypeScopedName(self, p): - """ - DistinguishableType : ScopedName Null - """ - assert isinstance(p[1], IDLUnresolvedIdentifier) - - if p[1].name == "Promise": - raise WebIDLError( - "Promise used without saying what it's " "parametrized over", - [self.getLocation(p, 1)], - ) - - type = None - - try: - if self.globalScope()._lookupIdentifier(p[1]): - obj = self.globalScope()._lookupIdentifier(p[1]) - assert not obj.isType() - if obj.isTypedef(): - type = IDLTypedefType( - self.getLocation(p, 1), obj.innerType, obj.identifier.name - ) - elif obj.isCallback() and not obj.isInterface(): - type = IDLCallbackType(self.getLocation(p, 1), obj) - else: - type = IDLWrapperType(self.getLocation(p, 1), p[1]) - p[0] = self.handleNullable(type, p[2]) - return - except: - pass - - type = IDLUnresolvedType(self.getLocation(p, 1), p[1]) - p[0] = self.handleNullable(type, p[2]) - - def p_ConstType(self, p): - """ - ConstType : PrimitiveType - """ - p[0] = BuiltinTypes[p[1]] - - def p_ConstTypeIdentifier(self, p): - """ - ConstType : IDENTIFIER - """ - identifier = IDLUnresolvedIdentifier(self.getLocation(p, 1), p[1]) - - p[0] = IDLUnresolvedType(self.getLocation(p, 1), identifier) - - def p_PrimitiveTypeUint(self, p): - """ - PrimitiveType : UnsignedIntegerType - """ - p[0] = p[1] - - def p_PrimitiveTypeBoolean(self, p): - """ - PrimitiveType : BOOLEAN - """ - p[0] = IDLBuiltinType.Types.boolean - - def p_PrimitiveTypeByte(self, p): - """ - PrimitiveType : BYTE - """ - p[0] = IDLBuiltinType.Types.byte - - def p_PrimitiveTypeOctet(self, p): - """ - PrimitiveType : OCTET - """ - p[0] = IDLBuiltinType.Types.octet - - def p_PrimitiveTypeFloat(self, p): - """ - PrimitiveType : FLOAT - """ - p[0] = IDLBuiltinType.Types.float - - def p_PrimitiveTypeUnrestictedFloat(self, p): - """ - PrimitiveType : UNRESTRICTED FLOAT - """ - p[0] = IDLBuiltinType.Types.unrestricted_float - - def p_PrimitiveTypeDouble(self, p): - """ - PrimitiveType : DOUBLE - """ - p[0] = IDLBuiltinType.Types.double - - def p_PrimitiveTypeUnrestictedDouble(self, p): - """ - PrimitiveType : UNRESTRICTED DOUBLE - """ - p[0] = IDLBuiltinType.Types.unrestricted_double - - def p_StringType(self, p): - """ - StringType : BuiltinStringType - """ - p[0] = BuiltinTypes[p[1]] - - def p_BuiltinStringTypeDOMString(self, p): - """ - BuiltinStringType : DOMSTRING - """ - p[0] = IDLBuiltinType.Types.domstring - - def p_BuiltinStringTypeBytestring(self, p): - """ - BuiltinStringType : BYTESTRING - """ - p[0] = IDLBuiltinType.Types.bytestring - - def p_BuiltinStringTypeUSVString(self, p): - """ - BuiltinStringType : USVSTRING - """ - p[0] = IDLBuiltinType.Types.usvstring - - def p_BuiltinStringTypeUTF8String(self, p): - """ - BuiltinStringType : UTF8STRING - """ - p[0] = IDLBuiltinType.Types.utf8string - - def p_BuiltinStringTypeJSString(self, p): - """ - BuiltinStringType : JSSTRING - """ - p[0] = IDLBuiltinType.Types.jsstring - - def p_UnsignedIntegerTypeUnsigned(self, p): - """ - UnsignedIntegerType : UNSIGNED IntegerType - """ - # Adding one to a given signed integer type gets you the unsigned type: - p[0] = p[2] + 1 - - def p_UnsignedIntegerType(self, p): - """ - UnsignedIntegerType : IntegerType - """ - p[0] = p[1] - - def p_IntegerTypeShort(self, p): - """ - IntegerType : SHORT - """ - p[0] = IDLBuiltinType.Types.short - - def p_IntegerTypeLong(self, p): - """ - IntegerType : LONG OptionalLong - """ - if p[2]: - p[0] = IDLBuiltinType.Types.long_long - else: - p[0] = IDLBuiltinType.Types.long - - def p_OptionalLong(self, p): - """ - OptionalLong : LONG - """ - p[0] = True - - def p_OptionalLongEmpty(self, p): - """ - OptionalLong : - """ - p[0] = False - - def p_Null(self, p): - """ - Null : QUESTIONMARK - | - """ - if len(p) > 1: - p[0] = self.getLocation(p, 1) - else: - p[0] = None - - def p_ReturnTypeType(self, p): - """ - ReturnType : Type - """ - p[0] = p[1] - - def p_ReturnTypeVoid(self, p): - """ - ReturnType : VOID - """ - p[0] = BuiltinTypes[IDLBuiltinType.Types.void] - - def p_ScopedName(self, p): - """ - ScopedName : AbsoluteScopedName - | RelativeScopedName - """ - p[0] = p[1] - - def p_AbsoluteScopedName(self, p): - """ - AbsoluteScopedName : SCOPE IDENTIFIER ScopedNameParts - """ - assert False - pass - - def p_RelativeScopedName(self, p): - """ - RelativeScopedName : IDENTIFIER ScopedNameParts - """ - assert not p[2] # Not implemented! - - p[0] = IDLUnresolvedIdentifier(self.getLocation(p, 1), p[1]) - - def p_ScopedNameParts(self, p): - """ - ScopedNameParts : SCOPE IDENTIFIER ScopedNameParts - """ - assert False - pass - - def p_ScopedNamePartsEmpty(self, p): - """ - ScopedNameParts : - """ - p[0] = None - - def p_ExtendedAttributeNoArgs(self, p): - """ - ExtendedAttributeNoArgs : IDENTIFIER - """ - p[0] = (p[1],) - - def p_ExtendedAttributeArgList(self, p): - """ - ExtendedAttributeArgList : IDENTIFIER LPAREN ArgumentList RPAREN - """ - p[0] = (p[1], p[3]) - - def p_ExtendedAttributeIdent(self, p): - """ - ExtendedAttributeIdent : IDENTIFIER EQUALS STRING - | IDENTIFIER EQUALS IDENTIFIER - """ - p[0] = (p[1], p[3]) - - def p_ExtendedAttributeNamedArgList(self, p): - """ - ExtendedAttributeNamedArgList : IDENTIFIER EQUALS IDENTIFIER LPAREN ArgumentList RPAREN - """ - p[0] = (p[1], p[3], p[5]) - - def p_ExtendedAttributeIdentList(self, p): - """ - ExtendedAttributeIdentList : IDENTIFIER EQUALS LPAREN IdentifierList RPAREN - """ - p[0] = (p[1], p[4]) - - def p_IdentifierList(self, p): - """ - IdentifierList : IDENTIFIER Identifiers - """ - idents = list(p[2]) - # This is only used for identifier-list-valued extended attributes, and if - # we're going to restrict to IDENTIFIER here we should at least allow - # escaping with leading '_' as usual for identifiers. - ident = p[1] - if ident[0] == "_": - ident = ident[1:] - idents.insert(0, ident) - p[0] = idents - - def p_IdentifiersList(self, p): - """ - Identifiers : COMMA IDENTIFIER Identifiers - """ - idents = list(p[3]) - # This is only used for identifier-list-valued extended attributes, and if - # we're going to restrict to IDENTIFIER here we should at least allow - # escaping with leading '_' as usual for identifiers. - ident = p[2] - if ident[0] == "_": - ident = ident[1:] - idents.insert(0, ident) - p[0] = idents - - def p_IdentifiersEmpty(self, p): - """ - Identifiers : - """ - p[0] = [] - - def p_error(self, p): - if not p: - raise WebIDLError( - "Syntax Error at end of file. Possibly due to missing semicolon(;), braces(}) or both", - [self._filename], - ) - else: - raise WebIDLError( - "invalid syntax", - [Location(self.lexer, p.lineno, p.lexpos, self._filename)], - ) - - def __init__(self, outputdir="", lexer=None): - Tokenizer.__init__(self, outputdir, lexer) - - logger = SqueakyCleanLogger() - try: - self.parser = yacc.yacc( - module=self, - outputdir=outputdir, - errorlog=logger, - write_tables=False, - # Pickling the grammar is a speedup in - # some cases (older Python?) but a - # significant slowdown in others. - # We're not pickling for now, until it - # becomes a speedup again. - # , picklefile='WebIDLGrammar.pkl' - ) - finally: - logger.reportGrammarErrors() - - self._globalScope = IDLScope(BuiltinLocation(""), None, None) - - self._installBuiltins(self._globalScope) - self._productions = [] - - self._filename = "" - self.lexer.input(Parser._builtins) - self._filename = None - - self.parser.parse(lexer=self.lexer, tracking=True) - - def _installBuiltins(self, scope): - assert isinstance(scope, IDLScope) - - # range omits the last value. - for x in range( - IDLBuiltinType.Types.ArrayBuffer, IDLBuiltinType.Types.Float64Array + 1 - ): - builtin = BuiltinTypes[x] - name = builtin.name - typedef = IDLTypedef( - BuiltinLocation(""), scope, builtin, name - ) - - @staticmethod - def handleNullable(type, questionMarkLocation): - if questionMarkLocation is not None: - type = IDLNullableType(questionMarkLocation, type) - - return type - - def parse(self, t, filename=None): - self.lexer.input(t) - - # for tok in iter(self.lexer.token, None): - # print tok - - self._filename = filename - self._productions.extend(self.parser.parse(lexer=self.lexer, tracking=True)) - self._filename = None - - def finish(self): - # If we have interfaces that are iterable, create their - # iterator interfaces and add them to the productions array. - interfaceStatements = [] - for p in self._productions: - if isinstance(p, IDLInterface): - interfaceStatements.append(p) - - iterableIteratorIface = None - for iface in interfaceStatements: - iterable = None - # We haven't run finish() on the interface yet, so we don't know - # whether our interface is maplike/setlike/iterable or not. This - # means we have to loop through the members to see if we have an - # iterable member. - for m in iface.members: - if isinstance(m, IDLIterable): - iterable = m - break - if iterable and iterable.isPairIterator(): - - def simpleExtendedAttr(str): - return IDLExtendedAttribute(iface.location, (str,)) - - nextMethod = IDLMethod( - iface.location, - IDLUnresolvedIdentifier(iface.location, "next"), - BuiltinTypes[IDLBuiltinType.Types.object], - [], - ) - nextMethod.addExtendedAttributes([simpleExtendedAttr("Throws")]) - itr_ident = IDLUnresolvedIdentifier( - iface.location, iface.identifier.name + "Iterator" - ) - classNameOverride = iface.identifier.name + " Iterator" - itr_iface = IDLInterface( - iface.location, - self.globalScope(), - itr_ident, - None, - [nextMethod], - isKnownNonPartial=True, - classNameOverride=classNameOverride, - ) - itr_iface.addExtendedAttributes( - [simpleExtendedAttr("LegacyNoInterfaceObject")] - ) - # Make sure the exposure set for the iterator interface is the - # same as the exposure set for the iterable interface, because - # we're going to generate methods on the iterable that return - # instances of the iterator. - itr_iface._exposureGlobalNames = set(iface._exposureGlobalNames) - # Always append generated iterable interfaces after the - # interface they're a member of, otherwise nativeType generation - # won't work correctly. - itr_iface.iterableInterface = iface - self._productions.append(itr_iface) - iterable.iteratorType = IDLWrapperType(iface.location, itr_iface) - - # Make sure we finish IDLIncludesStatements before we finish the - # IDLInterfaces. - # XXX khuey hates this bit and wants to nuke it from orbit. - includesStatements = [ - p for p in self._productions if isinstance(p, IDLIncludesStatement) - ] - otherStatements = [ - p for p in self._productions if not isinstance(p, IDLIncludesStatement) - ] - for production in includesStatements: - production.finish(self.globalScope()) - for production in otherStatements: - production.finish(self.globalScope()) - - # Do any post-finish validation we need to do - for production in self._productions: - production.validate() - - # De-duplicate self._productions, without modifying its order. - seen = set() - result = [] - for p in self._productions: - if p not in seen: - seen.add(p) - result.append(p) - return result - - def reset(self): - return Parser(lexer=self.lexer) - - # Builtin IDL defined by WebIDL - _builtins = """ - typedef unsigned long long DOMTimeStamp; - typedef (ArrayBufferView or ArrayBuffer) BufferSource; - """ - - -def main(): - # Parse arguments. - from optparse import OptionParser - - usageString = "usage: %prog [options] files" - o = OptionParser(usage=usageString) - o.add_option( - "--cachedir", - dest="cachedir", - default=None, - help="Directory in which to cache lex/parse tables.", - ) - o.add_option( - "--verbose-errors", - action="store_true", - default=False, - help="When an error happens, display the Python traceback.", - ) - (options, args) = o.parse_args() - - if len(args) < 1: - o.error(usageString) - - fileList = args - baseDir = os.getcwd() - - # Parse the WebIDL. - parser = Parser(options.cachedir) - try: - for filename in fileList: - fullPath = os.path.normpath(os.path.join(baseDir, filename)) - f = open(fullPath, "rb") - lines = f.readlines() - f.close() - print(fullPath) - parser.parse("".join(lines), fullPath) - parser.finish() - except WebIDLError as e: - if options.verbose_errors: - traceback.print_exc() - else: - print(e) - - -if __name__ == "__main__": - main() diff --git a/idl/common.idl b/idl/common.idl deleted file mode 100644 index b36c615..0000000 --- a/idl/common.idl +++ /dev/null @@ -1,9 +0,0 @@ -interface ImageBitmap {}; -interface ImageData {}; -interface HTMLImageElement {}; -interface HTMLCanvasElement {}; -interface HTMLVideoElement {}; -interface OffscreenCanvas {}; -interface undefined {}; -interface Event {}; -dictionary EventInit {}; \ No newline at end of file diff --git a/idl/parser.out b/idl/parser.out deleted file mode 100644 index e666544..0000000 --- a/idl/parser.out +++ /dev/null @@ -1,9787 +0,0 @@ -Created by PLY version 3.4 (http://www.dabeaz.com/ply) - -Unused terminals: - - WHITESPACE - -Grammar - -Rule 0 S' -> Definitions -Rule 1 Definitions -> ExtendedAttributeList Definition Definitions -Rule 2 Definitions -> -Rule 3 Definition -> CallbackOrInterfaceOrMixin -Rule 4 Definition -> Namespace -Rule 5 Definition -> Partial -Rule 6 Definition -> Dictionary -Rule 7 Definition -> Exception -Rule 8 Definition -> Enum -Rule 9 Definition -> Typedef -Rule 10 Definition -> IncludesStatement -Rule 11 CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface -Rule 12 CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin -Rule 13 CallbackRestOrInterface -> CallbackRest -Rule 14 CallbackRestOrInterface -> CallbackConstructorRest -Rule 15 CallbackRestOrInterface -> CallbackInterface -Rule 16 InterfaceOrMixin -> InterfaceRest -Rule 17 InterfaceOrMixin -> MixinRest -Rule 18 CallbackInterface -> INTERFACE InterfaceRest -Rule 19 InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON -Rule 20 InterfaceRest -> IDENTIFIER SEMICOLON -Rule 21 MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON -Rule 22 Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON -Rule 23 Partial -> PARTIAL PartialDefinition -Rule 24 PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin -Rule 25 PartialDefinition -> PartialNamespace -Rule 26 PartialDefinition -> PartialDictionary -Rule 27 PartialInterfaceOrPartialMixin -> PartialInterfaceRest -Rule 28 PartialInterfaceOrPartialMixin -> PartialMixinRest -Rule 29 PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON -Rule 30 PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON -Rule 31 PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON -Rule 32 PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON -Rule 33 Inheritance -> COLON ScopedName -Rule 34 Inheritance -> -Rule 35 InterfaceMembers -> ExtendedAttributeList InterfaceMember InterfaceMembers -Rule 36 InterfaceMembers -> -Rule 37 InterfaceMember -> PartialInterfaceMember -Rule 38 InterfaceMember -> Constructor -Rule 39 Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON -Rule 40 PartialInterfaceMembers -> ExtendedAttributeList PartialInterfaceMember PartialInterfaceMembers -Rule 41 PartialInterfaceMembers -> -Rule 42 PartialInterfaceMember -> Const -Rule 43 PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable -Rule 44 MixinMembers -> -Rule 45 MixinMembers -> ExtendedAttributeList MixinMember MixinMembers -Rule 46 MixinMember -> Const -Rule 47 MixinMember -> Attribute -Rule 48 MixinMember -> Operation -Rule 49 Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON -Rule 50 DictionaryMembers -> ExtendedAttributeList DictionaryMember DictionaryMembers -Rule 51 DictionaryMembers -> -Rule 52 DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON -Rule 53 DictionaryMember -> Type IDENTIFIER Default SEMICOLON -Rule 54 Default -> EQUALS DefaultValue -Rule 55 Default -> -Rule 56 DefaultValue -> ConstValue -Rule 57 DefaultValue -> LBRACKET RBRACKET -Rule 58 DefaultValue -> LBRACE RBRACE -Rule 59 DefaultValue -> NULL -Rule 60 Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON -Rule 61 Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON -Rule 62 EnumValueList -> STRING EnumValueListComma -Rule 63 EnumValueListComma -> COMMA EnumValueListString -Rule 64 EnumValueListComma -> -Rule 65 EnumValueListString -> STRING EnumValueListComma -Rule 66 EnumValueListString -> -Rule 67 CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON -Rule 68 CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON -Rule 69 ExceptionMembers -> ExtendedAttributeList ExceptionMember ExceptionMembers -Rule 70 ExceptionMembers -> -Rule 71 Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON -Rule 72 IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON -Rule 73 Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON -Rule 74 ConstValue -> BooleanLiteral -Rule 75 ConstValue -> INTEGER -Rule 76 ConstValue -> FLOATLITERAL -Rule 77 ConstValue -> STRING -Rule 78 BooleanLiteral -> TRUE -Rule 79 BooleanLiteral -> FALSE -Rule 80 AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute -Rule 81 AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike -Rule 82 AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike -Rule 83 AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable -Rule 84 AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation -Rule 85 Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON -Rule 86 Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON -Rule 87 Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON -Rule 88 Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON -Rule 89 Attribute -> Qualifier AttributeRest -Rule 90 Attribute -> INHERIT AttributeRest -Rule 91 Attribute -> AttributeRest -Rule 92 AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON -Rule 93 ReadOnly -> READONLY -Rule 94 ReadOnly -> -Rule 95 Operation -> Qualifiers OperationRest -Rule 96 Operation -> STRINGIFIER SEMICOLON -Rule 97 Qualifier -> STATIC -Rule 98 Qualifier -> STRINGIFIER -Rule 99 Qualifiers -> Qualifier -Rule 100 Qualifiers -> Specials -Rule 101 Specials -> Special Specials -Rule 102 Specials -> -Rule 103 Special -> GETTER -Rule 104 Special -> SETTER -Rule 105 Special -> DELETER -Rule 106 Special -> LEGACYCALLER -Rule 107 OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON -Rule 108 OptionalIdentifier -> IDENTIFIER -Rule 109 OptionalIdentifier -> -Rule 110 ArgumentList -> Argument Arguments -Rule 111 ArgumentList -> -Rule 112 Arguments -> COMMA Argument Arguments -Rule 113 Arguments -> -Rule 114 Argument -> ExtendedAttributeList ArgumentRest -Rule 115 ArgumentRest -> OPTIONAL TypeWithExtendedAttributes ArgumentName Default -Rule 116 ArgumentRest -> Type Ellipsis ArgumentName -Rule 117 ArgumentName -> IDENTIFIER -Rule 118 ArgumentName -> ArgumentNameKeyword -Rule 119 ArgumentNameKeyword -> ASYNC -Rule 120 ArgumentNameKeyword -> ATTRIBUTE -Rule 121 ArgumentNameKeyword -> CALLBACK -Rule 122 ArgumentNameKeyword -> CONST -Rule 123 ArgumentNameKeyword -> CONSTRUCTOR -Rule 124 ArgumentNameKeyword -> DELETER -Rule 125 ArgumentNameKeyword -> DICTIONARY -Rule 126 ArgumentNameKeyword -> ENUM -Rule 127 ArgumentNameKeyword -> EXCEPTION -Rule 128 ArgumentNameKeyword -> GETTER -Rule 129 ArgumentNameKeyword -> INCLUDES -Rule 130 ArgumentNameKeyword -> INHERIT -Rule 131 ArgumentNameKeyword -> INTERFACE -Rule 132 ArgumentNameKeyword -> ITERABLE -Rule 133 ArgumentNameKeyword -> LEGACYCALLER -Rule 134 ArgumentNameKeyword -> MAPLIKE -Rule 135 ArgumentNameKeyword -> MIXIN -Rule 136 ArgumentNameKeyword -> NAMESPACE -Rule 137 ArgumentNameKeyword -> PARTIAL -Rule 138 ArgumentNameKeyword -> READONLY -Rule 139 ArgumentNameKeyword -> REQUIRED -Rule 140 ArgumentNameKeyword -> SERIALIZER -Rule 141 ArgumentNameKeyword -> SETLIKE -Rule 142 ArgumentNameKeyword -> SETTER -Rule 143 ArgumentNameKeyword -> STATIC -Rule 144 ArgumentNameKeyword -> STRINGIFIER -Rule 145 ArgumentNameKeyword -> TYPEDEF -Rule 146 ArgumentNameKeyword -> UNRESTRICTED -Rule 147 AttributeName -> IDENTIFIER -Rule 148 AttributeName -> AttributeNameKeyword -Rule 149 AttributeNameKeyword -> ASYNC -Rule 150 AttributeNameKeyword -> REQUIRED -Rule 151 Ellipsis -> ELLIPSIS -Rule 152 Ellipsis -> -Rule 153 ExceptionMember -> Const -Rule 154 ExceptionMember -> ExceptionField -Rule 155 ExceptionField -> Type IDENTIFIER SEMICOLON -Rule 156 ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET -Rule 157 ExtendedAttributeList -> -Rule 158 ExtendedAttribute -> ExtendedAttributeNoArgs -Rule 159 ExtendedAttribute -> ExtendedAttributeArgList -Rule 160 ExtendedAttribute -> ExtendedAttributeIdent -Rule 161 ExtendedAttribute -> ExtendedAttributeNamedArgList -Rule 162 ExtendedAttribute -> ExtendedAttributeIdentList -Rule 163 ExtendedAttribute -> -Rule 164 ExtendedAttributes -> COMMA ExtendedAttribute ExtendedAttributes -Rule 165 ExtendedAttributes -> -Rule 166 Other -> INTEGER -Rule 167 Other -> FLOATLITERAL -Rule 168 Other -> IDENTIFIER -Rule 169 Other -> STRING -Rule 170 Other -> OTHER -Rule 171 Other -> ELLIPSIS -Rule 172 Other -> COLON -Rule 173 Other -> SCOPE -Rule 174 Other -> SEMICOLON -Rule 175 Other -> LT -Rule 176 Other -> EQUALS -Rule 177 Other -> GT -Rule 178 Other -> QUESTIONMARK -Rule 179 Other -> DOMSTRING -Rule 180 Other -> BYTESTRING -Rule 181 Other -> USVSTRING -Rule 182 Other -> UTF8STRING -Rule 183 Other -> JSSTRING -Rule 184 Other -> PROMISE -Rule 185 Other -> ANY -Rule 186 Other -> BOOLEAN -Rule 187 Other -> BYTE -Rule 188 Other -> DOUBLE -Rule 189 Other -> FALSE -Rule 190 Other -> FLOAT -Rule 191 Other -> LONG -Rule 192 Other -> NULL -Rule 193 Other -> OBJECT -Rule 194 Other -> OCTET -Rule 195 Other -> OR -Rule 196 Other -> OPTIONAL -Rule 197 Other -> RECORD -Rule 198 Other -> SEQUENCE -Rule 199 Other -> SHORT -Rule 200 Other -> SYMBOL -Rule 201 Other -> TRUE -Rule 202 Other -> UNSIGNED -Rule 203 Other -> VOID -Rule 204 Other -> ArgumentNameKeyword -Rule 205 OtherOrComma -> Other -Rule 206 OtherOrComma -> COMMA -Rule 207 Type -> SingleType -Rule 208 Type -> UnionType Null -Rule 209 TypeWithExtendedAttributes -> ExtendedAttributeList Type -Rule 210 SingleType -> DistinguishableType -Rule 211 SingleType -> ANY -Rule 212 SingleType -> PROMISE LT ReturnType GT -Rule 213 UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN -Rule 214 UnionMemberType -> ExtendedAttributeList DistinguishableType -Rule 215 UnionMemberType -> UnionType Null -Rule 216 UnionMemberTypes -> OR UnionMemberType UnionMemberTypes -Rule 217 UnionMemberTypes -> -Rule 218 DistinguishableType -> PrimitiveType Null -Rule 219 DistinguishableType -> ARRAYBUFFER Null -Rule 220 DistinguishableType -> READABLESTREAM Null -Rule 221 DistinguishableType -> OBJECT Null -Rule 222 DistinguishableType -> StringType Null -Rule 223 DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null -Rule 224 DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null -Rule 225 DistinguishableType -> ScopedName Null -Rule 226 ConstType -> PrimitiveType -Rule 227 ConstType -> IDENTIFIER -Rule 228 PrimitiveType -> UnsignedIntegerType -Rule 229 PrimitiveType -> BOOLEAN -Rule 230 PrimitiveType -> BYTE -Rule 231 PrimitiveType -> OCTET -Rule 232 PrimitiveType -> FLOAT -Rule 233 PrimitiveType -> UNRESTRICTED FLOAT -Rule 234 PrimitiveType -> DOUBLE -Rule 235 PrimitiveType -> UNRESTRICTED DOUBLE -Rule 236 StringType -> BuiltinStringType -Rule 237 BuiltinStringType -> DOMSTRING -Rule 238 BuiltinStringType -> BYTESTRING -Rule 239 BuiltinStringType -> USVSTRING -Rule 240 BuiltinStringType -> UTF8STRING -Rule 241 BuiltinStringType -> JSSTRING -Rule 242 UnsignedIntegerType -> UNSIGNED IntegerType -Rule 243 UnsignedIntegerType -> IntegerType -Rule 244 IntegerType -> SHORT -Rule 245 IntegerType -> LONG OptionalLong -Rule 246 OptionalLong -> LONG -Rule 247 OptionalLong -> -Rule 248 Null -> QUESTIONMARK -Rule 249 Null -> -Rule 250 ReturnType -> Type -Rule 251 ReturnType -> VOID -Rule 252 ScopedName -> AbsoluteScopedName -Rule 253 ScopedName -> RelativeScopedName -Rule 254 AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts -Rule 255 RelativeScopedName -> IDENTIFIER ScopedNameParts -Rule 256 ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts -Rule 257 ScopedNameParts -> -Rule 258 ExtendedAttributeNoArgs -> IDENTIFIER -Rule 259 ExtendedAttributeArgList -> IDENTIFIER LPAREN ArgumentList RPAREN -Rule 260 ExtendedAttributeIdent -> IDENTIFIER EQUALS STRING -Rule 261 ExtendedAttributeIdent -> IDENTIFIER EQUALS IDENTIFIER -Rule 262 ExtendedAttributeNamedArgList -> IDENTIFIER EQUALS IDENTIFIER LPAREN ArgumentList RPAREN -Rule 263 ExtendedAttributeIdentList -> IDENTIFIER EQUALS LPAREN IdentifierList RPAREN -Rule 264 IdentifierList -> IDENTIFIER Identifiers -Rule 265 Identifiers -> COMMA IDENTIFIER Identifiers -Rule 266 Identifiers -> - -Terminals, with rules where they appear - -ANY : 185 211 -ARRAYBUFFER : 219 -ASYNC : 119 149 -ATTRIBUTE : 92 120 -BOOLEAN : 186 229 -BYTE : 187 230 -BYTESTRING : 180 238 -CALLBACK : 11 121 -COLON : 33 172 -COMMA : 63 86 88 112 164 206 224 265 -CONST : 73 122 -CONSTRUCTOR : 39 68 123 -DELETER : 105 124 -DICTIONARY : 32 49 125 -DOMSTRING : 179 237 -DOUBLE : 188 234 235 -ELLIPSIS : 151 171 -ENUM : 61 126 -EQUALS : 54 67 68 73 176 260 261 262 263 -EXCEPTION : 60 127 -FALSE : 79 189 -FLOAT : 190 232 233 -FLOATLITERAL : 76 167 -GETTER : 103 128 -GT : 85 86 87 88 177 212 223 224 -IDENTIFIER : 19 20 21 22 29 30 31 32 49 52 53 60 61 67 68 71 73 108 117 147 155 168 227 254 255 256 258 259 260 261 261 262 262 263 264 265 -INCLUDES : 72 129 -INHERIT : 90 130 -INTEGER : 75 166 -INTERFACE : 12 18 24 131 -ITERABLE : 85 86 132 -JSSTRING : 183 241 -LBRACE : 19 21 22 29 30 31 32 49 58 60 61 -LBRACKET : 57 156 -LEGACYCALLER : 106 133 -LONG : 191 245 246 -LPAREN : 39 67 68 107 213 259 262 263 -LT : 85 86 87 88 175 212 223 224 -MAPLIKE : 88 134 -MIXIN : 21 30 135 -NAMESPACE : 22 31 136 -NULL : 59 192 -OBJECT : 193 221 -OCTET : 194 231 -OPTIONAL : 115 196 -OR : 195 213 216 -OTHER : 170 -PARTIAL : 23 137 -PROMISE : 184 212 -QUESTIONMARK : 178 248 -RBRACE : 19 21 22 29 30 31 32 49 58 60 61 -RBRACKET : 57 156 -READABLESTREAM : 220 -READONLY : 93 138 -RECORD : 197 224 -REQUIRED : 52 139 150 -RPAREN : 39 67 68 107 213 259 262 263 -SCOPE : 173 254 256 -SEMICOLON : 19 20 21 22 29 30 31 32 39 49 52 53 60 61 67 68 71 72 73 85 86 87 88 92 96 107 155 174 -SEQUENCE : 198 223 -SERIALIZER : 140 -SETLIKE : 87 141 -SETTER : 104 142 -SHORT : 199 244 -STATIC : 97 143 -STRING : 62 65 77 169 260 -STRINGIFIER : 96 98 144 -SYMBOL : 200 -TRUE : 78 201 -TYPEDEF : 71 145 -UNRESTRICTED : 146 233 235 -UNSIGNED : 202 242 -USVSTRING : 181 239 -UTF8STRING : 182 240 -VOID : 203 251 -WHITESPACE : -error : - -Nonterminals, with rules where they appear - -AbsoluteScopedName : 252 -Argument : 110 112 -ArgumentList : 39 67 68 107 259 262 -ArgumentName : 115 116 -ArgumentNameKeyword : 118 204 -ArgumentRest : 114 -Arguments : 110 112 -Attribute : 47 80 -AttributeName : 92 -AttributeNameKeyword : 148 -AttributeOrOperationOrMaplikeOrSetlikeOrIterable : 43 -AttributeRest : 89 90 91 -BooleanLiteral : 74 -BuiltinStringType : 236 -CallbackConstructorRest : 14 -CallbackInterface : 15 -CallbackOrInterfaceOrMixin : 3 -CallbackRest : 13 -CallbackRestOrInterface : 11 -Const : 42 46 153 -ConstType : 73 -ConstValue : 56 73 -Constructor : 38 -Default : 53 115 -DefaultValue : 54 -Definition : 1 -Definitions : 1 0 -Dictionary : 6 -DictionaryMember : 50 -DictionaryMembers : 32 49 50 -DistinguishableType : 210 214 -Ellipsis : 116 -Enum : 8 -EnumValueList : 61 -EnumValueListComma : 62 65 -EnumValueListString : 63 -Exception : 7 -ExceptionField : 154 -ExceptionMember : 69 -ExceptionMembers : 60 69 -ExtendedAttribute : 156 164 -ExtendedAttributeArgList : 159 -ExtendedAttributeIdent : 160 -ExtendedAttributeIdentList : 162 -ExtendedAttributeList : 1 35 40 45 50 69 114 209 214 -ExtendedAttributeNamedArgList : 161 -ExtendedAttributeNoArgs : 158 -ExtendedAttributes : 156 164 -IdentifierList : 263 -Identifiers : 264 265 -IncludesStatement : 10 -Inheritance : 19 49 60 -IntegerType : 242 243 -InterfaceMember : 35 -InterfaceMembers : 19 22 31 35 -InterfaceOrMixin : 12 -InterfaceRest : 16 18 -Iterable : 83 -Maplike : 81 -MixinMember : 45 -MixinMembers : 21 30 45 -MixinRest : 17 -Namespace : 4 -Null : 208 215 218 219 220 221 222 223 224 225 -Operation : 48 84 -OperationRest : 95 -OptionalIdentifier : 107 -OptionalLong : 245 -Other : 205 -OtherOrComma : -Partial : 5 -PartialDefinition : 23 -PartialDictionary : 26 -PartialInterfaceMember : 37 40 -PartialInterfaceMembers : 29 40 -PartialInterfaceOrPartialMixin : 24 -PartialInterfaceRest : 27 -PartialMixinRest : 28 -PartialNamespace : 25 -PrimitiveType : 218 226 -Qualifier : 89 99 -Qualifiers : 95 -ReadOnly : 87 88 92 -RelativeScopedName : 253 -ReturnType : 67 68 107 212 -ScopedName : 33 72 72 225 -ScopedNameParts : 254 255 256 -Setlike : 82 -SingleType : 207 -Special : 101 -Specials : 100 101 -StringType : 222 224 -Type : 53 116 155 209 250 -TypeWithExtendedAttributes : 52 71 85 86 86 87 88 88 92 115 223 224 -Typedef : 9 -UnionMemberType : 213 213 216 -UnionMemberTypes : 213 216 -UnionType : 208 215 -UnsignedIntegerType : 228 - -Parsing method: LALR - -state 0 - - (0) S' -> . Definitions - (1) Definitions -> . ExtendedAttributeList Definition Definitions - (2) Definitions -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - $end reduce using rule 2 (Definitions -> .) - LBRACKET shift and go to state 3 - CALLBACK reduce using rule 157 (ExtendedAttributeList -> .) - INTERFACE reduce using rule 157 (ExtendedAttributeList -> .) - NAMESPACE reduce using rule 157 (ExtendedAttributeList -> .) - PARTIAL reduce using rule 157 (ExtendedAttributeList -> .) - DICTIONARY reduce using rule 157 (ExtendedAttributeList -> .) - EXCEPTION reduce using rule 157 (ExtendedAttributeList -> .) - ENUM reduce using rule 157 (ExtendedAttributeList -> .) - TYPEDEF reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - - Definitions shift and go to state 1 - ExtendedAttributeList shift and go to state 2 - -state 1 - - (0) S' -> Definitions . - - - -state 2 - - (1) Definitions -> ExtendedAttributeList . Definition Definitions - (3) Definition -> . CallbackOrInterfaceOrMixin - (4) Definition -> . Namespace - (5) Definition -> . Partial - (6) Definition -> . Dictionary - (7) Definition -> . Exception - (8) Definition -> . Enum - (9) Definition -> . Typedef - (10) Definition -> . IncludesStatement - (11) CallbackOrInterfaceOrMixin -> . CALLBACK CallbackRestOrInterface - (12) CallbackOrInterfaceOrMixin -> . INTERFACE InterfaceOrMixin - (22) Namespace -> . NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON - (23) Partial -> . PARTIAL PartialDefinition - (49) Dictionary -> . DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON - (60) Exception -> . EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON - (61) Enum -> . ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON - (71) Typedef -> . TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON - (72) IncludesStatement -> . ScopedName INCLUDES ScopedName SEMICOLON - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - - CALLBACK shift and go to state 13 - INTERFACE shift and go to state 14 - NAMESPACE shift and go to state 15 - PARTIAL shift and go to state 17 - DICTIONARY shift and go to state 18 - EXCEPTION shift and go to state 19 - ENUM shift and go to state 20 - TYPEDEF shift and go to state 21 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - - Definition shift and go to state 4 - CallbackOrInterfaceOrMixin shift and go to state 5 - Namespace shift and go to state 6 - Partial shift and go to state 7 - Dictionary shift and go to state 8 - Exception shift and go to state 9 - Enum shift and go to state 10 - Typedef shift and go to state 11 - IncludesStatement shift and go to state 12 - ScopedName shift and go to state 22 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - -state 3 - - (156) ExtendedAttributeList -> LBRACKET . ExtendedAttribute ExtendedAttributes RBRACKET - (158) ExtendedAttribute -> . ExtendedAttributeNoArgs - (159) ExtendedAttribute -> . ExtendedAttributeArgList - (160) ExtendedAttribute -> . ExtendedAttributeIdent - (161) ExtendedAttribute -> . ExtendedAttributeNamedArgList - (162) ExtendedAttribute -> . ExtendedAttributeIdentList - (163) ExtendedAttribute -> . - (258) ExtendedAttributeNoArgs -> . IDENTIFIER - (259) ExtendedAttributeArgList -> . IDENTIFIER LPAREN ArgumentList RPAREN - (260) ExtendedAttributeIdent -> . IDENTIFIER EQUALS STRING - (261) ExtendedAttributeIdent -> . IDENTIFIER EQUALS IDENTIFIER - (262) ExtendedAttributeNamedArgList -> . IDENTIFIER EQUALS IDENTIFIER LPAREN ArgumentList RPAREN - (263) ExtendedAttributeIdentList -> . IDENTIFIER EQUALS LPAREN IdentifierList RPAREN - - COMMA reduce using rule 163 (ExtendedAttribute -> .) - RBRACKET reduce using rule 163 (ExtendedAttribute -> .) - IDENTIFIER shift and go to state 32 - - ExtendedAttribute shift and go to state 26 - ExtendedAttributeNoArgs shift and go to state 27 - ExtendedAttributeArgList shift and go to state 28 - ExtendedAttributeIdent shift and go to state 29 - ExtendedAttributeNamedArgList shift and go to state 30 - ExtendedAttributeIdentList shift and go to state 31 - -state 4 - - (1) Definitions -> ExtendedAttributeList Definition . Definitions - (1) Definitions -> . ExtendedAttributeList Definition Definitions - (2) Definitions -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - $end reduce using rule 2 (Definitions -> .) - LBRACKET shift and go to state 3 - CALLBACK reduce using rule 157 (ExtendedAttributeList -> .) - INTERFACE reduce using rule 157 (ExtendedAttributeList -> .) - NAMESPACE reduce using rule 157 (ExtendedAttributeList -> .) - PARTIAL reduce using rule 157 (ExtendedAttributeList -> .) - DICTIONARY reduce using rule 157 (ExtendedAttributeList -> .) - EXCEPTION reduce using rule 157 (ExtendedAttributeList -> .) - ENUM reduce using rule 157 (ExtendedAttributeList -> .) - TYPEDEF reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - - ExtendedAttributeList shift and go to state 2 - Definitions shift and go to state 33 - -state 5 - - (3) Definition -> CallbackOrInterfaceOrMixin . - - LBRACKET reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - CALLBACK reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - INTERFACE reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - NAMESPACE reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - PARTIAL reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - DICTIONARY reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - EXCEPTION reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - ENUM reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - TYPEDEF reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - SCOPE reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - IDENTIFIER reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - $end reduce using rule 3 (Definition -> CallbackOrInterfaceOrMixin .) - - -state 6 - - (4) Definition -> Namespace . - - LBRACKET reduce using rule 4 (Definition -> Namespace .) - CALLBACK reduce using rule 4 (Definition -> Namespace .) - INTERFACE reduce using rule 4 (Definition -> Namespace .) - NAMESPACE reduce using rule 4 (Definition -> Namespace .) - PARTIAL reduce using rule 4 (Definition -> Namespace .) - DICTIONARY reduce using rule 4 (Definition -> Namespace .) - EXCEPTION reduce using rule 4 (Definition -> Namespace .) - ENUM reduce using rule 4 (Definition -> Namespace .) - TYPEDEF reduce using rule 4 (Definition -> Namespace .) - SCOPE reduce using rule 4 (Definition -> Namespace .) - IDENTIFIER reduce using rule 4 (Definition -> Namespace .) - $end reduce using rule 4 (Definition -> Namespace .) - - -state 7 - - (5) Definition -> Partial . - - LBRACKET reduce using rule 5 (Definition -> Partial .) - CALLBACK reduce using rule 5 (Definition -> Partial .) - INTERFACE reduce using rule 5 (Definition -> Partial .) - NAMESPACE reduce using rule 5 (Definition -> Partial .) - PARTIAL reduce using rule 5 (Definition -> Partial .) - DICTIONARY reduce using rule 5 (Definition -> Partial .) - EXCEPTION reduce using rule 5 (Definition -> Partial .) - ENUM reduce using rule 5 (Definition -> Partial .) - TYPEDEF reduce using rule 5 (Definition -> Partial .) - SCOPE reduce using rule 5 (Definition -> Partial .) - IDENTIFIER reduce using rule 5 (Definition -> Partial .) - $end reduce using rule 5 (Definition -> Partial .) - - -state 8 - - (6) Definition -> Dictionary . - - LBRACKET reduce using rule 6 (Definition -> Dictionary .) - CALLBACK reduce using rule 6 (Definition -> Dictionary .) - INTERFACE reduce using rule 6 (Definition -> Dictionary .) - NAMESPACE reduce using rule 6 (Definition -> Dictionary .) - PARTIAL reduce using rule 6 (Definition -> Dictionary .) - DICTIONARY reduce using rule 6 (Definition -> Dictionary .) - EXCEPTION reduce using rule 6 (Definition -> Dictionary .) - ENUM reduce using rule 6 (Definition -> Dictionary .) - TYPEDEF reduce using rule 6 (Definition -> Dictionary .) - SCOPE reduce using rule 6 (Definition -> Dictionary .) - IDENTIFIER reduce using rule 6 (Definition -> Dictionary .) - $end reduce using rule 6 (Definition -> Dictionary .) - - -state 9 - - (7) Definition -> Exception . - - LBRACKET reduce using rule 7 (Definition -> Exception .) - CALLBACK reduce using rule 7 (Definition -> Exception .) - INTERFACE reduce using rule 7 (Definition -> Exception .) - NAMESPACE reduce using rule 7 (Definition -> Exception .) - PARTIAL reduce using rule 7 (Definition -> Exception .) - DICTIONARY reduce using rule 7 (Definition -> Exception .) - EXCEPTION reduce using rule 7 (Definition -> Exception .) - ENUM reduce using rule 7 (Definition -> Exception .) - TYPEDEF reduce using rule 7 (Definition -> Exception .) - SCOPE reduce using rule 7 (Definition -> Exception .) - IDENTIFIER reduce using rule 7 (Definition -> Exception .) - $end reduce using rule 7 (Definition -> Exception .) - - -state 10 - - (8) Definition -> Enum . - - LBRACKET reduce using rule 8 (Definition -> Enum .) - CALLBACK reduce using rule 8 (Definition -> Enum .) - INTERFACE reduce using rule 8 (Definition -> Enum .) - NAMESPACE reduce using rule 8 (Definition -> Enum .) - PARTIAL reduce using rule 8 (Definition -> Enum .) - DICTIONARY reduce using rule 8 (Definition -> Enum .) - EXCEPTION reduce using rule 8 (Definition -> Enum .) - ENUM reduce using rule 8 (Definition -> Enum .) - TYPEDEF reduce using rule 8 (Definition -> Enum .) - SCOPE reduce using rule 8 (Definition -> Enum .) - IDENTIFIER reduce using rule 8 (Definition -> Enum .) - $end reduce using rule 8 (Definition -> Enum .) - - -state 11 - - (9) Definition -> Typedef . - - LBRACKET reduce using rule 9 (Definition -> Typedef .) - CALLBACK reduce using rule 9 (Definition -> Typedef .) - INTERFACE reduce using rule 9 (Definition -> Typedef .) - NAMESPACE reduce using rule 9 (Definition -> Typedef .) - PARTIAL reduce using rule 9 (Definition -> Typedef .) - DICTIONARY reduce using rule 9 (Definition -> Typedef .) - EXCEPTION reduce using rule 9 (Definition -> Typedef .) - ENUM reduce using rule 9 (Definition -> Typedef .) - TYPEDEF reduce using rule 9 (Definition -> Typedef .) - SCOPE reduce using rule 9 (Definition -> Typedef .) - IDENTIFIER reduce using rule 9 (Definition -> Typedef .) - $end reduce using rule 9 (Definition -> Typedef .) - - -state 12 - - (10) Definition -> IncludesStatement . - - LBRACKET reduce using rule 10 (Definition -> IncludesStatement .) - CALLBACK reduce using rule 10 (Definition -> IncludesStatement .) - INTERFACE reduce using rule 10 (Definition -> IncludesStatement .) - NAMESPACE reduce using rule 10 (Definition -> IncludesStatement .) - PARTIAL reduce using rule 10 (Definition -> IncludesStatement .) - DICTIONARY reduce using rule 10 (Definition -> IncludesStatement .) - EXCEPTION reduce using rule 10 (Definition -> IncludesStatement .) - ENUM reduce using rule 10 (Definition -> IncludesStatement .) - TYPEDEF reduce using rule 10 (Definition -> IncludesStatement .) - SCOPE reduce using rule 10 (Definition -> IncludesStatement .) - IDENTIFIER reduce using rule 10 (Definition -> IncludesStatement .) - $end reduce using rule 10 (Definition -> IncludesStatement .) - - -state 13 - - (11) CallbackOrInterfaceOrMixin -> CALLBACK . CallbackRestOrInterface - (13) CallbackRestOrInterface -> . CallbackRest - (14) CallbackRestOrInterface -> . CallbackConstructorRest - (15) CallbackRestOrInterface -> . CallbackInterface - (67) CallbackRest -> . IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON - (68) CallbackConstructorRest -> . CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON - (18) CallbackInterface -> . INTERFACE InterfaceRest - - IDENTIFIER shift and go to state 38 - CONSTRUCTOR shift and go to state 39 - INTERFACE shift and go to state 40 - - CallbackRestOrInterface shift and go to state 34 - CallbackRest shift and go to state 35 - CallbackConstructorRest shift and go to state 36 - CallbackInterface shift and go to state 37 - -state 14 - - (12) CallbackOrInterfaceOrMixin -> INTERFACE . InterfaceOrMixin - (16) InterfaceOrMixin -> . InterfaceRest - (17) InterfaceOrMixin -> . MixinRest - (19) InterfaceRest -> . IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON - (20) InterfaceRest -> . IDENTIFIER SEMICOLON - (21) MixinRest -> . MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 44 - MIXIN shift and go to state 45 - - InterfaceOrMixin shift and go to state 41 - InterfaceRest shift and go to state 42 - MixinRest shift and go to state 43 - -state 15 - - (22) Namespace -> NAMESPACE . IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 46 - - -state 16 - - (255) RelativeScopedName -> IDENTIFIER . ScopedNameParts - (256) ScopedNameParts -> . SCOPE IDENTIFIER ScopedNameParts - (257) ScopedNameParts -> . - - SCOPE shift and go to state 48 - INCLUDES reduce using rule 257 (ScopedNameParts -> .) - QUESTIONMARK reduce using rule 257 (ScopedNameParts -> .) - IDENTIFIER reduce using rule 257 (ScopedNameParts -> .) - GT reduce using rule 257 (ScopedNameParts -> .) - ASYNC reduce using rule 257 (ScopedNameParts -> .) - ATTRIBUTE reduce using rule 257 (ScopedNameParts -> .) - CALLBACK reduce using rule 257 (ScopedNameParts -> .) - CONST reduce using rule 257 (ScopedNameParts -> .) - CONSTRUCTOR reduce using rule 257 (ScopedNameParts -> .) - DELETER reduce using rule 257 (ScopedNameParts -> .) - DICTIONARY reduce using rule 257 (ScopedNameParts -> .) - ENUM reduce using rule 257 (ScopedNameParts -> .) - EXCEPTION reduce using rule 257 (ScopedNameParts -> .) - GETTER reduce using rule 257 (ScopedNameParts -> .) - INHERIT reduce using rule 257 (ScopedNameParts -> .) - INTERFACE reduce using rule 257 (ScopedNameParts -> .) - ITERABLE reduce using rule 257 (ScopedNameParts -> .) - LEGACYCALLER reduce using rule 257 (ScopedNameParts -> .) - MAPLIKE reduce using rule 257 (ScopedNameParts -> .) - MIXIN reduce using rule 257 (ScopedNameParts -> .) - NAMESPACE reduce using rule 257 (ScopedNameParts -> .) - PARTIAL reduce using rule 257 (ScopedNameParts -> .) - READONLY reduce using rule 257 (ScopedNameParts -> .) - REQUIRED reduce using rule 257 (ScopedNameParts -> .) - SERIALIZER reduce using rule 257 (ScopedNameParts -> .) - SETLIKE reduce using rule 257 (ScopedNameParts -> .) - SETTER reduce using rule 257 (ScopedNameParts -> .) - STATIC reduce using rule 257 (ScopedNameParts -> .) - STRINGIFIER reduce using rule 257 (ScopedNameParts -> .) - TYPEDEF reduce using rule 257 (ScopedNameParts -> .) - UNRESTRICTED reduce using rule 257 (ScopedNameParts -> .) - COMMA reduce using rule 257 (ScopedNameParts -> .) - SEMICOLON reduce using rule 257 (ScopedNameParts -> .) - LPAREN reduce using rule 257 (ScopedNameParts -> .) - LBRACE reduce using rule 257 (ScopedNameParts -> .) - ELLIPSIS reduce using rule 257 (ScopedNameParts -> .) - OR reduce using rule 257 (ScopedNameParts -> .) - RPAREN reduce using rule 257 (ScopedNameParts -> .) - - ScopedNameParts shift and go to state 47 - -state 17 - - (23) Partial -> PARTIAL . PartialDefinition - (24) PartialDefinition -> . INTERFACE PartialInterfaceOrPartialMixin - (25) PartialDefinition -> . PartialNamespace - (26) PartialDefinition -> . PartialDictionary - (31) PartialNamespace -> . NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON - (32) PartialDictionary -> . DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON - - INTERFACE shift and go to state 50 - NAMESPACE shift and go to state 53 - DICTIONARY shift and go to state 54 - - PartialDefinition shift and go to state 49 - PartialNamespace shift and go to state 51 - PartialDictionary shift and go to state 52 - -state 18 - - (49) Dictionary -> DICTIONARY . IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 55 - - -state 19 - - (60) Exception -> EXCEPTION . IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 56 - - -state 20 - - (61) Enum -> ENUM . IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON - - IDENTIFIER shift and go to state 57 - - -state 21 - - (71) Typedef -> TYPEDEF . TypeWithExtendedAttributes IDENTIFIER SEMICOLON - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 58 - ExtendedAttributeList shift and go to state 59 - -state 22 - - (72) IncludesStatement -> ScopedName . INCLUDES ScopedName SEMICOLON - - INCLUDES shift and go to state 60 - - -state 23 - - (252) ScopedName -> AbsoluteScopedName . - - INCLUDES reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - QUESTIONMARK reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - IDENTIFIER reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - GT reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - ASYNC reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - ATTRIBUTE reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - CALLBACK reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - CONST reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - CONSTRUCTOR reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - DELETER reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - DICTIONARY reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - ENUM reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - EXCEPTION reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - GETTER reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - INHERIT reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - INTERFACE reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - ITERABLE reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - LEGACYCALLER reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - MAPLIKE reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - MIXIN reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - NAMESPACE reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - PARTIAL reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - READONLY reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - REQUIRED reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - SERIALIZER reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - SETLIKE reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - SETTER reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - STATIC reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - STRINGIFIER reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - TYPEDEF reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - UNRESTRICTED reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - COMMA reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - SEMICOLON reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - LPAREN reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - LBRACE reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - ELLIPSIS reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - OR reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - RPAREN reduce using rule 252 (ScopedName -> AbsoluteScopedName .) - - -state 24 - - (253) ScopedName -> RelativeScopedName . - - INCLUDES reduce using rule 253 (ScopedName -> RelativeScopedName .) - QUESTIONMARK reduce using rule 253 (ScopedName -> RelativeScopedName .) - IDENTIFIER reduce using rule 253 (ScopedName -> RelativeScopedName .) - GT reduce using rule 253 (ScopedName -> RelativeScopedName .) - ASYNC reduce using rule 253 (ScopedName -> RelativeScopedName .) - ATTRIBUTE reduce using rule 253 (ScopedName -> RelativeScopedName .) - CALLBACK reduce using rule 253 (ScopedName -> RelativeScopedName .) - CONST reduce using rule 253 (ScopedName -> RelativeScopedName .) - CONSTRUCTOR reduce using rule 253 (ScopedName -> RelativeScopedName .) - DELETER reduce using rule 253 (ScopedName -> RelativeScopedName .) - DICTIONARY reduce using rule 253 (ScopedName -> RelativeScopedName .) - ENUM reduce using rule 253 (ScopedName -> RelativeScopedName .) - EXCEPTION reduce using rule 253 (ScopedName -> RelativeScopedName .) - GETTER reduce using rule 253 (ScopedName -> RelativeScopedName .) - INHERIT reduce using rule 253 (ScopedName -> RelativeScopedName .) - INTERFACE reduce using rule 253 (ScopedName -> RelativeScopedName .) - ITERABLE reduce using rule 253 (ScopedName -> RelativeScopedName .) - LEGACYCALLER reduce using rule 253 (ScopedName -> RelativeScopedName .) - MAPLIKE reduce using rule 253 (ScopedName -> RelativeScopedName .) - MIXIN reduce using rule 253 (ScopedName -> RelativeScopedName .) - NAMESPACE reduce using rule 253 (ScopedName -> RelativeScopedName .) - PARTIAL reduce using rule 253 (ScopedName -> RelativeScopedName .) - READONLY reduce using rule 253 (ScopedName -> RelativeScopedName .) - REQUIRED reduce using rule 253 (ScopedName -> RelativeScopedName .) - SERIALIZER reduce using rule 253 (ScopedName -> RelativeScopedName .) - SETLIKE reduce using rule 253 (ScopedName -> RelativeScopedName .) - SETTER reduce using rule 253 (ScopedName -> RelativeScopedName .) - STATIC reduce using rule 253 (ScopedName -> RelativeScopedName .) - STRINGIFIER reduce using rule 253 (ScopedName -> RelativeScopedName .) - TYPEDEF reduce using rule 253 (ScopedName -> RelativeScopedName .) - UNRESTRICTED reduce using rule 253 (ScopedName -> RelativeScopedName .) - COMMA reduce using rule 253 (ScopedName -> RelativeScopedName .) - SEMICOLON reduce using rule 253 (ScopedName -> RelativeScopedName .) - LPAREN reduce using rule 253 (ScopedName -> RelativeScopedName .) - LBRACE reduce using rule 253 (ScopedName -> RelativeScopedName .) - ELLIPSIS reduce using rule 253 (ScopedName -> RelativeScopedName .) - OR reduce using rule 253 (ScopedName -> RelativeScopedName .) - RPAREN reduce using rule 253 (ScopedName -> RelativeScopedName .) - - -state 25 - - (254) AbsoluteScopedName -> SCOPE . IDENTIFIER ScopedNameParts - - IDENTIFIER shift and go to state 61 - - -state 26 - - (156) ExtendedAttributeList -> LBRACKET ExtendedAttribute . ExtendedAttributes RBRACKET - (164) ExtendedAttributes -> . COMMA ExtendedAttribute ExtendedAttributes - (165) ExtendedAttributes -> . - - COMMA shift and go to state 63 - RBRACKET reduce using rule 165 (ExtendedAttributes -> .) - - ExtendedAttributes shift and go to state 62 - -state 27 - - (158) ExtendedAttribute -> ExtendedAttributeNoArgs . - - COMMA reduce using rule 158 (ExtendedAttribute -> ExtendedAttributeNoArgs .) - RBRACKET reduce using rule 158 (ExtendedAttribute -> ExtendedAttributeNoArgs .) - - -state 28 - - (159) ExtendedAttribute -> ExtendedAttributeArgList . - - COMMA reduce using rule 159 (ExtendedAttribute -> ExtendedAttributeArgList .) - RBRACKET reduce using rule 159 (ExtendedAttribute -> ExtendedAttributeArgList .) - - -state 29 - - (160) ExtendedAttribute -> ExtendedAttributeIdent . - - COMMA reduce using rule 160 (ExtendedAttribute -> ExtendedAttributeIdent .) - RBRACKET reduce using rule 160 (ExtendedAttribute -> ExtendedAttributeIdent .) - - -state 30 - - (161) ExtendedAttribute -> ExtendedAttributeNamedArgList . - - COMMA reduce using rule 161 (ExtendedAttribute -> ExtendedAttributeNamedArgList .) - RBRACKET reduce using rule 161 (ExtendedAttribute -> ExtendedAttributeNamedArgList .) - - -state 31 - - (162) ExtendedAttribute -> ExtendedAttributeIdentList . - - COMMA reduce using rule 162 (ExtendedAttribute -> ExtendedAttributeIdentList .) - RBRACKET reduce using rule 162 (ExtendedAttribute -> ExtendedAttributeIdentList .) - - -state 32 - - (258) ExtendedAttributeNoArgs -> IDENTIFIER . - (259) ExtendedAttributeArgList -> IDENTIFIER . LPAREN ArgumentList RPAREN - (260) ExtendedAttributeIdent -> IDENTIFIER . EQUALS STRING - (261) ExtendedAttributeIdent -> IDENTIFIER . EQUALS IDENTIFIER - (262) ExtendedAttributeNamedArgList -> IDENTIFIER . EQUALS IDENTIFIER LPAREN ArgumentList RPAREN - (263) ExtendedAttributeIdentList -> IDENTIFIER . EQUALS LPAREN IdentifierList RPAREN - - COMMA reduce using rule 258 (ExtendedAttributeNoArgs -> IDENTIFIER .) - RBRACKET reduce using rule 258 (ExtendedAttributeNoArgs -> IDENTIFIER .) - LPAREN shift and go to state 64 - EQUALS shift and go to state 65 - - -state 33 - - (1) Definitions -> ExtendedAttributeList Definition Definitions . - - $end reduce using rule 1 (Definitions -> ExtendedAttributeList Definition Definitions .) - - -state 34 - - (11) CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface . - - LBRACKET reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - CALLBACK reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - INTERFACE reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - NAMESPACE reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - PARTIAL reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - DICTIONARY reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - EXCEPTION reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - ENUM reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - TYPEDEF reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - SCOPE reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - IDENTIFIER reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - $end reduce using rule 11 (CallbackOrInterfaceOrMixin -> CALLBACK CallbackRestOrInterface .) - - -state 35 - - (13) CallbackRestOrInterface -> CallbackRest . - - LBRACKET reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - CALLBACK reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - INTERFACE reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - NAMESPACE reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - PARTIAL reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - DICTIONARY reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - EXCEPTION reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - ENUM reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - TYPEDEF reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - SCOPE reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - IDENTIFIER reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - $end reduce using rule 13 (CallbackRestOrInterface -> CallbackRest .) - - -state 36 - - (14) CallbackRestOrInterface -> CallbackConstructorRest . - - LBRACKET reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - CALLBACK reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - INTERFACE reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - NAMESPACE reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - PARTIAL reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - DICTIONARY reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - EXCEPTION reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - ENUM reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - TYPEDEF reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - SCOPE reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - IDENTIFIER reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - $end reduce using rule 14 (CallbackRestOrInterface -> CallbackConstructorRest .) - - -state 37 - - (15) CallbackRestOrInterface -> CallbackInterface . - - LBRACKET reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - CALLBACK reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - INTERFACE reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - NAMESPACE reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - PARTIAL reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - DICTIONARY reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - EXCEPTION reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - ENUM reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - TYPEDEF reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - SCOPE reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - IDENTIFIER reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - $end reduce using rule 15 (CallbackRestOrInterface -> CallbackInterface .) - - -state 38 - - (67) CallbackRest -> IDENTIFIER . EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON - - EQUALS shift and go to state 66 - - -state 39 - - (68) CallbackConstructorRest -> CONSTRUCTOR . IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON - - IDENTIFIER shift and go to state 67 - - -state 40 - - (18) CallbackInterface -> INTERFACE . InterfaceRest - (19) InterfaceRest -> . IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON - (20) InterfaceRest -> . IDENTIFIER SEMICOLON - - IDENTIFIER shift and go to state 44 - - InterfaceRest shift and go to state 68 - -state 41 - - (12) CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin . - - LBRACKET reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - CALLBACK reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - INTERFACE reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - NAMESPACE reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - PARTIAL reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - DICTIONARY reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - EXCEPTION reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - ENUM reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - TYPEDEF reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - SCOPE reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - IDENTIFIER reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - $end reduce using rule 12 (CallbackOrInterfaceOrMixin -> INTERFACE InterfaceOrMixin .) - - -state 42 - - (16) InterfaceOrMixin -> InterfaceRest . - - LBRACKET reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - CALLBACK reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - INTERFACE reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - NAMESPACE reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - PARTIAL reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - DICTIONARY reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - EXCEPTION reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - ENUM reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - TYPEDEF reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - SCOPE reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - IDENTIFIER reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - $end reduce using rule 16 (InterfaceOrMixin -> InterfaceRest .) - - -state 43 - - (17) InterfaceOrMixin -> MixinRest . - - LBRACKET reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - CALLBACK reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - INTERFACE reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - NAMESPACE reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - PARTIAL reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - DICTIONARY reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - EXCEPTION reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - ENUM reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - TYPEDEF reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - SCOPE reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - IDENTIFIER reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - $end reduce using rule 17 (InterfaceOrMixin -> MixinRest .) - - -state 44 - - (19) InterfaceRest -> IDENTIFIER . Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON - (20) InterfaceRest -> IDENTIFIER . SEMICOLON - (33) Inheritance -> . COLON ScopedName - (34) Inheritance -> . - - SEMICOLON shift and go to state 70 - COLON shift and go to state 71 - LBRACE reduce using rule 34 (Inheritance -> .) - - Inheritance shift and go to state 69 - -state 45 - - (21) MixinRest -> MIXIN . IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 72 - - -state 46 - - (22) Namespace -> NAMESPACE IDENTIFIER . LBRACE InterfaceMembers RBRACE SEMICOLON - - LBRACE shift and go to state 73 - - -state 47 - - (255) RelativeScopedName -> IDENTIFIER ScopedNameParts . - - INCLUDES reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - QUESTIONMARK reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - IDENTIFIER reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - GT reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - ASYNC reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - ATTRIBUTE reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - CALLBACK reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - CONST reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - CONSTRUCTOR reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - DELETER reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - DICTIONARY reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - ENUM reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - EXCEPTION reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - GETTER reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - INHERIT reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - INTERFACE reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - ITERABLE reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - LEGACYCALLER reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - MAPLIKE reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - MIXIN reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - NAMESPACE reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - PARTIAL reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - READONLY reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - REQUIRED reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - SERIALIZER reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - SETLIKE reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - SETTER reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - STATIC reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - STRINGIFIER reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - TYPEDEF reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - UNRESTRICTED reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - COMMA reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - SEMICOLON reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - LPAREN reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - LBRACE reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - ELLIPSIS reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - OR reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - RPAREN reduce using rule 255 (RelativeScopedName -> IDENTIFIER ScopedNameParts .) - - -state 48 - - (256) ScopedNameParts -> SCOPE . IDENTIFIER ScopedNameParts - - IDENTIFIER shift and go to state 74 - - -state 49 - - (23) Partial -> PARTIAL PartialDefinition . - - LBRACKET reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - CALLBACK reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - INTERFACE reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - NAMESPACE reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - PARTIAL reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - DICTIONARY reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - EXCEPTION reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - ENUM reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - TYPEDEF reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - SCOPE reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - IDENTIFIER reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - $end reduce using rule 23 (Partial -> PARTIAL PartialDefinition .) - - -state 50 - - (24) PartialDefinition -> INTERFACE . PartialInterfaceOrPartialMixin - (27) PartialInterfaceOrPartialMixin -> . PartialInterfaceRest - (28) PartialInterfaceOrPartialMixin -> . PartialMixinRest - (29) PartialInterfaceRest -> . IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON - (30) PartialMixinRest -> . MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 78 - MIXIN shift and go to state 79 - - PartialInterfaceOrPartialMixin shift and go to state 75 - PartialInterfaceRest shift and go to state 76 - PartialMixinRest shift and go to state 77 - -state 51 - - (25) PartialDefinition -> PartialNamespace . - - LBRACKET reduce using rule 25 (PartialDefinition -> PartialNamespace .) - CALLBACK reduce using rule 25 (PartialDefinition -> PartialNamespace .) - INTERFACE reduce using rule 25 (PartialDefinition -> PartialNamespace .) - NAMESPACE reduce using rule 25 (PartialDefinition -> PartialNamespace .) - PARTIAL reduce using rule 25 (PartialDefinition -> PartialNamespace .) - DICTIONARY reduce using rule 25 (PartialDefinition -> PartialNamespace .) - EXCEPTION reduce using rule 25 (PartialDefinition -> PartialNamespace .) - ENUM reduce using rule 25 (PartialDefinition -> PartialNamespace .) - TYPEDEF reduce using rule 25 (PartialDefinition -> PartialNamespace .) - SCOPE reduce using rule 25 (PartialDefinition -> PartialNamespace .) - IDENTIFIER reduce using rule 25 (PartialDefinition -> PartialNamespace .) - $end reduce using rule 25 (PartialDefinition -> PartialNamespace .) - - -state 52 - - (26) PartialDefinition -> PartialDictionary . - - LBRACKET reduce using rule 26 (PartialDefinition -> PartialDictionary .) - CALLBACK reduce using rule 26 (PartialDefinition -> PartialDictionary .) - INTERFACE reduce using rule 26 (PartialDefinition -> PartialDictionary .) - NAMESPACE reduce using rule 26 (PartialDefinition -> PartialDictionary .) - PARTIAL reduce using rule 26 (PartialDefinition -> PartialDictionary .) - DICTIONARY reduce using rule 26 (PartialDefinition -> PartialDictionary .) - EXCEPTION reduce using rule 26 (PartialDefinition -> PartialDictionary .) - ENUM reduce using rule 26 (PartialDefinition -> PartialDictionary .) - TYPEDEF reduce using rule 26 (PartialDefinition -> PartialDictionary .) - SCOPE reduce using rule 26 (PartialDefinition -> PartialDictionary .) - IDENTIFIER reduce using rule 26 (PartialDefinition -> PartialDictionary .) - $end reduce using rule 26 (PartialDefinition -> PartialDictionary .) - - -state 53 - - (31) PartialNamespace -> NAMESPACE . IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 80 - - -state 54 - - (32) PartialDictionary -> DICTIONARY . IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 81 - - -state 55 - - (49) Dictionary -> DICTIONARY IDENTIFIER . Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON - (33) Inheritance -> . COLON ScopedName - (34) Inheritance -> . - - COLON shift and go to state 71 - LBRACE reduce using rule 34 (Inheritance -> .) - - Inheritance shift and go to state 82 - -state 56 - - (60) Exception -> EXCEPTION IDENTIFIER . Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON - (33) Inheritance -> . COLON ScopedName - (34) Inheritance -> . - - COLON shift and go to state 71 - LBRACE reduce using rule 34 (Inheritance -> .) - - Inheritance shift and go to state 83 - -state 57 - - (61) Enum -> ENUM IDENTIFIER . LBRACE EnumValueList RBRACE SEMICOLON - - LBRACE shift and go to state 84 - - -state 58 - - (71) Typedef -> TYPEDEF TypeWithExtendedAttributes . IDENTIFIER SEMICOLON - - IDENTIFIER shift and go to state 85 - - -state 59 - - (209) TypeWithExtendedAttributes -> ExtendedAttributeList . Type - (207) Type -> . SingleType - (208) Type -> . UnionType Null - (210) SingleType -> . DistinguishableType - (211) SingleType -> . ANY - (212) SingleType -> . PROMISE LT ReturnType GT - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - ANY shift and go to state 90 - PROMISE shift and go to state 91 - LPAREN shift and go to state 92 - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - Type shift and go to state 86 - SingleType shift and go to state 87 - UnionType shift and go to state 88 - DistinguishableType shift and go to state 89 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 60 - - (72) IncludesStatement -> ScopedName INCLUDES . ScopedName SEMICOLON - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - - ScopedName shift and go to state 118 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - -state 61 - - (254) AbsoluteScopedName -> SCOPE IDENTIFIER . ScopedNameParts - (256) ScopedNameParts -> . SCOPE IDENTIFIER ScopedNameParts - (257) ScopedNameParts -> . - - SCOPE shift and go to state 48 - INCLUDES reduce using rule 257 (ScopedNameParts -> .) - QUESTIONMARK reduce using rule 257 (ScopedNameParts -> .) - IDENTIFIER reduce using rule 257 (ScopedNameParts -> .) - GT reduce using rule 257 (ScopedNameParts -> .) - ASYNC reduce using rule 257 (ScopedNameParts -> .) - ATTRIBUTE reduce using rule 257 (ScopedNameParts -> .) - CALLBACK reduce using rule 257 (ScopedNameParts -> .) - CONST reduce using rule 257 (ScopedNameParts -> .) - CONSTRUCTOR reduce using rule 257 (ScopedNameParts -> .) - DELETER reduce using rule 257 (ScopedNameParts -> .) - DICTIONARY reduce using rule 257 (ScopedNameParts -> .) - ENUM reduce using rule 257 (ScopedNameParts -> .) - EXCEPTION reduce using rule 257 (ScopedNameParts -> .) - GETTER reduce using rule 257 (ScopedNameParts -> .) - INHERIT reduce using rule 257 (ScopedNameParts -> .) - INTERFACE reduce using rule 257 (ScopedNameParts -> .) - ITERABLE reduce using rule 257 (ScopedNameParts -> .) - LEGACYCALLER reduce using rule 257 (ScopedNameParts -> .) - MAPLIKE reduce using rule 257 (ScopedNameParts -> .) - MIXIN reduce using rule 257 (ScopedNameParts -> .) - NAMESPACE reduce using rule 257 (ScopedNameParts -> .) - PARTIAL reduce using rule 257 (ScopedNameParts -> .) - READONLY reduce using rule 257 (ScopedNameParts -> .) - REQUIRED reduce using rule 257 (ScopedNameParts -> .) - SERIALIZER reduce using rule 257 (ScopedNameParts -> .) - SETLIKE reduce using rule 257 (ScopedNameParts -> .) - SETTER reduce using rule 257 (ScopedNameParts -> .) - STATIC reduce using rule 257 (ScopedNameParts -> .) - STRINGIFIER reduce using rule 257 (ScopedNameParts -> .) - TYPEDEF reduce using rule 257 (ScopedNameParts -> .) - UNRESTRICTED reduce using rule 257 (ScopedNameParts -> .) - COMMA reduce using rule 257 (ScopedNameParts -> .) - SEMICOLON reduce using rule 257 (ScopedNameParts -> .) - LPAREN reduce using rule 257 (ScopedNameParts -> .) - LBRACE reduce using rule 257 (ScopedNameParts -> .) - ELLIPSIS reduce using rule 257 (ScopedNameParts -> .) - OR reduce using rule 257 (ScopedNameParts -> .) - RPAREN reduce using rule 257 (ScopedNameParts -> .) - - ScopedNameParts shift and go to state 119 - -state 62 - - (156) ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes . RBRACKET - - RBRACKET shift and go to state 120 - - -state 63 - - (164) ExtendedAttributes -> COMMA . ExtendedAttribute ExtendedAttributes - (158) ExtendedAttribute -> . ExtendedAttributeNoArgs - (159) ExtendedAttribute -> . ExtendedAttributeArgList - (160) ExtendedAttribute -> . ExtendedAttributeIdent - (161) ExtendedAttribute -> . ExtendedAttributeNamedArgList - (162) ExtendedAttribute -> . ExtendedAttributeIdentList - (163) ExtendedAttribute -> . - (258) ExtendedAttributeNoArgs -> . IDENTIFIER - (259) ExtendedAttributeArgList -> . IDENTIFIER LPAREN ArgumentList RPAREN - (260) ExtendedAttributeIdent -> . IDENTIFIER EQUALS STRING - (261) ExtendedAttributeIdent -> . IDENTIFIER EQUALS IDENTIFIER - (262) ExtendedAttributeNamedArgList -> . IDENTIFIER EQUALS IDENTIFIER LPAREN ArgumentList RPAREN - (263) ExtendedAttributeIdentList -> . IDENTIFIER EQUALS LPAREN IdentifierList RPAREN - - COMMA reduce using rule 163 (ExtendedAttribute -> .) - RBRACKET reduce using rule 163 (ExtendedAttribute -> .) - IDENTIFIER shift and go to state 32 - - ExtendedAttribute shift and go to state 121 - ExtendedAttributeNoArgs shift and go to state 27 - ExtendedAttributeArgList shift and go to state 28 - ExtendedAttributeIdent shift and go to state 29 - ExtendedAttributeNamedArgList shift and go to state 30 - ExtendedAttributeIdentList shift and go to state 31 - -state 64 - - (259) ExtendedAttributeArgList -> IDENTIFIER LPAREN . ArgumentList RPAREN - (110) ArgumentList -> . Argument Arguments - (111) ArgumentList -> . - (114) Argument -> . ExtendedAttributeList ArgumentRest - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RPAREN reduce using rule 111 (ArgumentList -> .) - LBRACKET shift and go to state 3 - OPTIONAL reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ArgumentList shift and go to state 122 - Argument shift and go to state 123 - ExtendedAttributeList shift and go to state 124 - -state 65 - - (260) ExtendedAttributeIdent -> IDENTIFIER EQUALS . STRING - (261) ExtendedAttributeIdent -> IDENTIFIER EQUALS . IDENTIFIER - (262) ExtendedAttributeNamedArgList -> IDENTIFIER EQUALS . IDENTIFIER LPAREN ArgumentList RPAREN - (263) ExtendedAttributeIdentList -> IDENTIFIER EQUALS . LPAREN IdentifierList RPAREN - - STRING shift and go to state 126 - IDENTIFIER shift and go to state 125 - LPAREN shift and go to state 127 - - -state 66 - - (67) CallbackRest -> IDENTIFIER EQUALS . ReturnType LPAREN ArgumentList RPAREN SEMICOLON - (250) ReturnType -> . Type - (251) ReturnType -> . VOID - (207) Type -> . SingleType - (208) Type -> . UnionType Null - (210) SingleType -> . DistinguishableType - (211) SingleType -> . ANY - (212) SingleType -> . PROMISE LT ReturnType GT - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - VOID shift and go to state 130 - ANY shift and go to state 90 - PROMISE shift and go to state 91 - LPAREN shift and go to state 92 - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - ReturnType shift and go to state 128 - Type shift and go to state 129 - SingleType shift and go to state 87 - UnionType shift and go to state 88 - DistinguishableType shift and go to state 89 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 67 - - (68) CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER . EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON - - EQUALS shift and go to state 131 - - -state 68 - - (18) CallbackInterface -> INTERFACE InterfaceRest . - - LBRACKET reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - CALLBACK reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - INTERFACE reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - NAMESPACE reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - PARTIAL reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - DICTIONARY reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - EXCEPTION reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - ENUM reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - TYPEDEF reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - SCOPE reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - IDENTIFIER reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - $end reduce using rule 18 (CallbackInterface -> INTERFACE InterfaceRest .) - - -state 69 - - (19) InterfaceRest -> IDENTIFIER Inheritance . LBRACE InterfaceMembers RBRACE SEMICOLON - - LBRACE shift and go to state 132 - - -state 70 - - (20) InterfaceRest -> IDENTIFIER SEMICOLON . - - LBRACKET reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - CALLBACK reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - INTERFACE reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - NAMESPACE reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - PARTIAL reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - DICTIONARY reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - EXCEPTION reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - ENUM reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - TYPEDEF reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - SCOPE reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - IDENTIFIER reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - $end reduce using rule 20 (InterfaceRest -> IDENTIFIER SEMICOLON .) - - -state 71 - - (33) Inheritance -> COLON . ScopedName - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - - ScopedName shift and go to state 133 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - -state 72 - - (21) MixinRest -> MIXIN IDENTIFIER . LBRACE MixinMembers RBRACE SEMICOLON - - LBRACE shift and go to state 134 - - -state 73 - - (22) Namespace -> NAMESPACE IDENTIFIER LBRACE . InterfaceMembers RBRACE SEMICOLON - (35) InterfaceMembers -> . ExtendedAttributeList InterfaceMember InterfaceMembers - (36) InterfaceMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 36 (InterfaceMembers -> .) - LBRACKET shift and go to state 3 - CONSTRUCTOR reduce using rule 157 (ExtendedAttributeList -> .) - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - ITERABLE reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - MAPLIKE reduce using rule 157 (ExtendedAttributeList -> .) - SETLIKE reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - InterfaceMembers shift and go to state 135 - ExtendedAttributeList shift and go to state 136 - -state 74 - - (256) ScopedNameParts -> SCOPE IDENTIFIER . ScopedNameParts - (256) ScopedNameParts -> . SCOPE IDENTIFIER ScopedNameParts - (257) ScopedNameParts -> . - - SCOPE shift and go to state 48 - INCLUDES reduce using rule 257 (ScopedNameParts -> .) - QUESTIONMARK reduce using rule 257 (ScopedNameParts -> .) - IDENTIFIER reduce using rule 257 (ScopedNameParts -> .) - GT reduce using rule 257 (ScopedNameParts -> .) - ASYNC reduce using rule 257 (ScopedNameParts -> .) - ATTRIBUTE reduce using rule 257 (ScopedNameParts -> .) - CALLBACK reduce using rule 257 (ScopedNameParts -> .) - CONST reduce using rule 257 (ScopedNameParts -> .) - CONSTRUCTOR reduce using rule 257 (ScopedNameParts -> .) - DELETER reduce using rule 257 (ScopedNameParts -> .) - DICTIONARY reduce using rule 257 (ScopedNameParts -> .) - ENUM reduce using rule 257 (ScopedNameParts -> .) - EXCEPTION reduce using rule 257 (ScopedNameParts -> .) - GETTER reduce using rule 257 (ScopedNameParts -> .) - INHERIT reduce using rule 257 (ScopedNameParts -> .) - INTERFACE reduce using rule 257 (ScopedNameParts -> .) - ITERABLE reduce using rule 257 (ScopedNameParts -> .) - LEGACYCALLER reduce using rule 257 (ScopedNameParts -> .) - MAPLIKE reduce using rule 257 (ScopedNameParts -> .) - MIXIN reduce using rule 257 (ScopedNameParts -> .) - NAMESPACE reduce using rule 257 (ScopedNameParts -> .) - PARTIAL reduce using rule 257 (ScopedNameParts -> .) - READONLY reduce using rule 257 (ScopedNameParts -> .) - REQUIRED reduce using rule 257 (ScopedNameParts -> .) - SERIALIZER reduce using rule 257 (ScopedNameParts -> .) - SETLIKE reduce using rule 257 (ScopedNameParts -> .) - SETTER reduce using rule 257 (ScopedNameParts -> .) - STATIC reduce using rule 257 (ScopedNameParts -> .) - STRINGIFIER reduce using rule 257 (ScopedNameParts -> .) - TYPEDEF reduce using rule 257 (ScopedNameParts -> .) - UNRESTRICTED reduce using rule 257 (ScopedNameParts -> .) - COMMA reduce using rule 257 (ScopedNameParts -> .) - SEMICOLON reduce using rule 257 (ScopedNameParts -> .) - LPAREN reduce using rule 257 (ScopedNameParts -> .) - LBRACE reduce using rule 257 (ScopedNameParts -> .) - ELLIPSIS reduce using rule 257 (ScopedNameParts -> .) - OR reduce using rule 257 (ScopedNameParts -> .) - RPAREN reduce using rule 257 (ScopedNameParts -> .) - - ScopedNameParts shift and go to state 137 - -state 75 - - (24) PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin . - - LBRACKET reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - CALLBACK reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - INTERFACE reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - NAMESPACE reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - PARTIAL reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - DICTIONARY reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - EXCEPTION reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - ENUM reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - TYPEDEF reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - SCOPE reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - IDENTIFIER reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - $end reduce using rule 24 (PartialDefinition -> INTERFACE PartialInterfaceOrPartialMixin .) - - -state 76 - - (27) PartialInterfaceOrPartialMixin -> PartialInterfaceRest . - - LBRACKET reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - CALLBACK reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - INTERFACE reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - NAMESPACE reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - PARTIAL reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - DICTIONARY reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - EXCEPTION reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - ENUM reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - TYPEDEF reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - SCOPE reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - IDENTIFIER reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - $end reduce using rule 27 (PartialInterfaceOrPartialMixin -> PartialInterfaceRest .) - - -state 77 - - (28) PartialInterfaceOrPartialMixin -> PartialMixinRest . - - LBRACKET reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - CALLBACK reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - INTERFACE reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - NAMESPACE reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - PARTIAL reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - DICTIONARY reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - EXCEPTION reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - ENUM reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - TYPEDEF reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - SCOPE reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - IDENTIFIER reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - $end reduce using rule 28 (PartialInterfaceOrPartialMixin -> PartialMixinRest .) - - -state 78 - - (29) PartialInterfaceRest -> IDENTIFIER . LBRACE PartialInterfaceMembers RBRACE SEMICOLON - - LBRACE shift and go to state 138 - - -state 79 - - (30) PartialMixinRest -> MIXIN . IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON - - IDENTIFIER shift and go to state 139 - - -state 80 - - (31) PartialNamespace -> NAMESPACE IDENTIFIER . LBRACE InterfaceMembers RBRACE SEMICOLON - - LBRACE shift and go to state 140 - - -state 81 - - (32) PartialDictionary -> DICTIONARY IDENTIFIER . LBRACE DictionaryMembers RBRACE SEMICOLON - - LBRACE shift and go to state 141 - - -state 82 - - (49) Dictionary -> DICTIONARY IDENTIFIER Inheritance . LBRACE DictionaryMembers RBRACE SEMICOLON - - LBRACE shift and go to state 142 - - -state 83 - - (60) Exception -> EXCEPTION IDENTIFIER Inheritance . LBRACE ExceptionMembers RBRACE SEMICOLON - - LBRACE shift and go to state 143 - - -state 84 - - (61) Enum -> ENUM IDENTIFIER LBRACE . EnumValueList RBRACE SEMICOLON - (62) EnumValueList -> . STRING EnumValueListComma - - STRING shift and go to state 145 - - EnumValueList shift and go to state 144 - -state 85 - - (71) Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER . SEMICOLON - - SEMICOLON shift and go to state 146 - - -state 86 - - (209) TypeWithExtendedAttributes -> ExtendedAttributeList Type . - - IDENTIFIER reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - GT reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - ASYNC reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - ATTRIBUTE reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - CALLBACK reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - CONST reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - CONSTRUCTOR reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - DELETER reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - DICTIONARY reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - ENUM reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - EXCEPTION reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - GETTER reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - INCLUDES reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - INHERIT reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - INTERFACE reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - ITERABLE reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - LEGACYCALLER reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - MAPLIKE reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - MIXIN reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - NAMESPACE reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - PARTIAL reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - READONLY reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - REQUIRED reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - SERIALIZER reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - SETLIKE reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - SETTER reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - STATIC reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - STRINGIFIER reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - TYPEDEF reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - UNRESTRICTED reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - COMMA reduce using rule 209 (TypeWithExtendedAttributes -> ExtendedAttributeList Type .) - - -state 87 - - (207) Type -> SingleType . - - IDENTIFIER reduce using rule 207 (Type -> SingleType .) - GT reduce using rule 207 (Type -> SingleType .) - ASYNC reduce using rule 207 (Type -> SingleType .) - ATTRIBUTE reduce using rule 207 (Type -> SingleType .) - CALLBACK reduce using rule 207 (Type -> SingleType .) - CONST reduce using rule 207 (Type -> SingleType .) - CONSTRUCTOR reduce using rule 207 (Type -> SingleType .) - DELETER reduce using rule 207 (Type -> SingleType .) - DICTIONARY reduce using rule 207 (Type -> SingleType .) - ENUM reduce using rule 207 (Type -> SingleType .) - EXCEPTION reduce using rule 207 (Type -> SingleType .) - GETTER reduce using rule 207 (Type -> SingleType .) - INCLUDES reduce using rule 207 (Type -> SingleType .) - INHERIT reduce using rule 207 (Type -> SingleType .) - INTERFACE reduce using rule 207 (Type -> SingleType .) - ITERABLE reduce using rule 207 (Type -> SingleType .) - LEGACYCALLER reduce using rule 207 (Type -> SingleType .) - MAPLIKE reduce using rule 207 (Type -> SingleType .) - MIXIN reduce using rule 207 (Type -> SingleType .) - NAMESPACE reduce using rule 207 (Type -> SingleType .) - PARTIAL reduce using rule 207 (Type -> SingleType .) - READONLY reduce using rule 207 (Type -> SingleType .) - REQUIRED reduce using rule 207 (Type -> SingleType .) - SERIALIZER reduce using rule 207 (Type -> SingleType .) - SETLIKE reduce using rule 207 (Type -> SingleType .) - SETTER reduce using rule 207 (Type -> SingleType .) - STATIC reduce using rule 207 (Type -> SingleType .) - STRINGIFIER reduce using rule 207 (Type -> SingleType .) - TYPEDEF reduce using rule 207 (Type -> SingleType .) - UNRESTRICTED reduce using rule 207 (Type -> SingleType .) - COMMA reduce using rule 207 (Type -> SingleType .) - LPAREN reduce using rule 207 (Type -> SingleType .) - ELLIPSIS reduce using rule 207 (Type -> SingleType .) - - -state 88 - - (208) Type -> UnionType . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - - Null shift and go to state 147 - -state 89 - - (210) SingleType -> DistinguishableType . - - IDENTIFIER reduce using rule 210 (SingleType -> DistinguishableType .) - GT reduce using rule 210 (SingleType -> DistinguishableType .) - ASYNC reduce using rule 210 (SingleType -> DistinguishableType .) - ATTRIBUTE reduce using rule 210 (SingleType -> DistinguishableType .) - CALLBACK reduce using rule 210 (SingleType -> DistinguishableType .) - CONST reduce using rule 210 (SingleType -> DistinguishableType .) - CONSTRUCTOR reduce using rule 210 (SingleType -> DistinguishableType .) - DELETER reduce using rule 210 (SingleType -> DistinguishableType .) - DICTIONARY reduce using rule 210 (SingleType -> DistinguishableType .) - ENUM reduce using rule 210 (SingleType -> DistinguishableType .) - EXCEPTION reduce using rule 210 (SingleType -> DistinguishableType .) - GETTER reduce using rule 210 (SingleType -> DistinguishableType .) - INCLUDES reduce using rule 210 (SingleType -> DistinguishableType .) - INHERIT reduce using rule 210 (SingleType -> DistinguishableType .) - INTERFACE reduce using rule 210 (SingleType -> DistinguishableType .) - ITERABLE reduce using rule 210 (SingleType -> DistinguishableType .) - LEGACYCALLER reduce using rule 210 (SingleType -> DistinguishableType .) - MAPLIKE reduce using rule 210 (SingleType -> DistinguishableType .) - MIXIN reduce using rule 210 (SingleType -> DistinguishableType .) - NAMESPACE reduce using rule 210 (SingleType -> DistinguishableType .) - PARTIAL reduce using rule 210 (SingleType -> DistinguishableType .) - READONLY reduce using rule 210 (SingleType -> DistinguishableType .) - REQUIRED reduce using rule 210 (SingleType -> DistinguishableType .) - SERIALIZER reduce using rule 210 (SingleType -> DistinguishableType .) - SETLIKE reduce using rule 210 (SingleType -> DistinguishableType .) - SETTER reduce using rule 210 (SingleType -> DistinguishableType .) - STATIC reduce using rule 210 (SingleType -> DistinguishableType .) - STRINGIFIER reduce using rule 210 (SingleType -> DistinguishableType .) - TYPEDEF reduce using rule 210 (SingleType -> DistinguishableType .) - UNRESTRICTED reduce using rule 210 (SingleType -> DistinguishableType .) - COMMA reduce using rule 210 (SingleType -> DistinguishableType .) - LPAREN reduce using rule 210 (SingleType -> DistinguishableType .) - ELLIPSIS reduce using rule 210 (SingleType -> DistinguishableType .) - - -state 90 - - (211) SingleType -> ANY . - - IDENTIFIER reduce using rule 211 (SingleType -> ANY .) - GT reduce using rule 211 (SingleType -> ANY .) - ASYNC reduce using rule 211 (SingleType -> ANY .) - ATTRIBUTE reduce using rule 211 (SingleType -> ANY .) - CALLBACK reduce using rule 211 (SingleType -> ANY .) - CONST reduce using rule 211 (SingleType -> ANY .) - CONSTRUCTOR reduce using rule 211 (SingleType -> ANY .) - DELETER reduce using rule 211 (SingleType -> ANY .) - DICTIONARY reduce using rule 211 (SingleType -> ANY .) - ENUM reduce using rule 211 (SingleType -> ANY .) - EXCEPTION reduce using rule 211 (SingleType -> ANY .) - GETTER reduce using rule 211 (SingleType -> ANY .) - INCLUDES reduce using rule 211 (SingleType -> ANY .) - INHERIT reduce using rule 211 (SingleType -> ANY .) - INTERFACE reduce using rule 211 (SingleType -> ANY .) - ITERABLE reduce using rule 211 (SingleType -> ANY .) - LEGACYCALLER reduce using rule 211 (SingleType -> ANY .) - MAPLIKE reduce using rule 211 (SingleType -> ANY .) - MIXIN reduce using rule 211 (SingleType -> ANY .) - NAMESPACE reduce using rule 211 (SingleType -> ANY .) - PARTIAL reduce using rule 211 (SingleType -> ANY .) - READONLY reduce using rule 211 (SingleType -> ANY .) - REQUIRED reduce using rule 211 (SingleType -> ANY .) - SERIALIZER reduce using rule 211 (SingleType -> ANY .) - SETLIKE reduce using rule 211 (SingleType -> ANY .) - SETTER reduce using rule 211 (SingleType -> ANY .) - STATIC reduce using rule 211 (SingleType -> ANY .) - STRINGIFIER reduce using rule 211 (SingleType -> ANY .) - TYPEDEF reduce using rule 211 (SingleType -> ANY .) - UNRESTRICTED reduce using rule 211 (SingleType -> ANY .) - COMMA reduce using rule 211 (SingleType -> ANY .) - LPAREN reduce using rule 211 (SingleType -> ANY .) - ELLIPSIS reduce using rule 211 (SingleType -> ANY .) - - -state 91 - - (212) SingleType -> PROMISE . LT ReturnType GT - - LT shift and go to state 149 - - -state 92 - - (213) UnionType -> LPAREN . UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (214) UnionMemberType -> . ExtendedAttributeList DistinguishableType - (215) UnionMemberType -> . UnionType Null - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - - LBRACKET shift and go to state 3 - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN shift and go to state 92 - - UnionMemberType shift and go to state 150 - ExtendedAttributeList shift and go to state 151 - UnionType shift and go to state 152 - -state 93 - - (218) DistinguishableType -> PrimitiveType . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 153 - -state 94 - - (219) DistinguishableType -> ARRAYBUFFER . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 154 - -state 95 - - (220) DistinguishableType -> READABLESTREAM . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 155 - -state 96 - - (221) DistinguishableType -> OBJECT . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 156 - -state 97 - - (222) DistinguishableType -> StringType . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 157 - -state 98 - - (223) DistinguishableType -> SEQUENCE . LT TypeWithExtendedAttributes GT Null - - LT shift and go to state 158 - - -state 99 - - (224) DistinguishableType -> RECORD . LT StringType COMMA TypeWithExtendedAttributes GT Null - - LT shift and go to state 159 - - -state 100 - - (225) DistinguishableType -> ScopedName . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 160 - -state 101 - - (228) PrimitiveType -> UnsignedIntegerType . - - QUESTIONMARK reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - IDENTIFIER reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - GT reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - ASYNC reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - ATTRIBUTE reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - CALLBACK reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - CONST reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - CONSTRUCTOR reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - DELETER reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - DICTIONARY reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - ENUM reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - EXCEPTION reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - GETTER reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - INCLUDES reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - INHERIT reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - INTERFACE reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - ITERABLE reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - LEGACYCALLER reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - MAPLIKE reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - MIXIN reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - NAMESPACE reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - PARTIAL reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - READONLY reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - REQUIRED reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - SERIALIZER reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - SETLIKE reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - SETTER reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - STATIC reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - STRINGIFIER reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - TYPEDEF reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - UNRESTRICTED reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - COMMA reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - LPAREN reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - ELLIPSIS reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - OR reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - RPAREN reduce using rule 228 (PrimitiveType -> UnsignedIntegerType .) - - -state 102 - - (229) PrimitiveType -> BOOLEAN . - - QUESTIONMARK reduce using rule 229 (PrimitiveType -> BOOLEAN .) - IDENTIFIER reduce using rule 229 (PrimitiveType -> BOOLEAN .) - GT reduce using rule 229 (PrimitiveType -> BOOLEAN .) - ASYNC reduce using rule 229 (PrimitiveType -> BOOLEAN .) - ATTRIBUTE reduce using rule 229 (PrimitiveType -> BOOLEAN .) - CALLBACK reduce using rule 229 (PrimitiveType -> BOOLEAN .) - CONST reduce using rule 229 (PrimitiveType -> BOOLEAN .) - CONSTRUCTOR reduce using rule 229 (PrimitiveType -> BOOLEAN .) - DELETER reduce using rule 229 (PrimitiveType -> BOOLEAN .) - DICTIONARY reduce using rule 229 (PrimitiveType -> BOOLEAN .) - ENUM reduce using rule 229 (PrimitiveType -> BOOLEAN .) - EXCEPTION reduce using rule 229 (PrimitiveType -> BOOLEAN .) - GETTER reduce using rule 229 (PrimitiveType -> BOOLEAN .) - INCLUDES reduce using rule 229 (PrimitiveType -> BOOLEAN .) - INHERIT reduce using rule 229 (PrimitiveType -> BOOLEAN .) - INTERFACE reduce using rule 229 (PrimitiveType -> BOOLEAN .) - ITERABLE reduce using rule 229 (PrimitiveType -> BOOLEAN .) - LEGACYCALLER reduce using rule 229 (PrimitiveType -> BOOLEAN .) - MAPLIKE reduce using rule 229 (PrimitiveType -> BOOLEAN .) - MIXIN reduce using rule 229 (PrimitiveType -> BOOLEAN .) - NAMESPACE reduce using rule 229 (PrimitiveType -> BOOLEAN .) - PARTIAL reduce using rule 229 (PrimitiveType -> BOOLEAN .) - READONLY reduce using rule 229 (PrimitiveType -> BOOLEAN .) - REQUIRED reduce using rule 229 (PrimitiveType -> BOOLEAN .) - SERIALIZER reduce using rule 229 (PrimitiveType -> BOOLEAN .) - SETLIKE reduce using rule 229 (PrimitiveType -> BOOLEAN .) - SETTER reduce using rule 229 (PrimitiveType -> BOOLEAN .) - STATIC reduce using rule 229 (PrimitiveType -> BOOLEAN .) - STRINGIFIER reduce using rule 229 (PrimitiveType -> BOOLEAN .) - TYPEDEF reduce using rule 229 (PrimitiveType -> BOOLEAN .) - UNRESTRICTED reduce using rule 229 (PrimitiveType -> BOOLEAN .) - COMMA reduce using rule 229 (PrimitiveType -> BOOLEAN .) - LPAREN reduce using rule 229 (PrimitiveType -> BOOLEAN .) - ELLIPSIS reduce using rule 229 (PrimitiveType -> BOOLEAN .) - OR reduce using rule 229 (PrimitiveType -> BOOLEAN .) - RPAREN reduce using rule 229 (PrimitiveType -> BOOLEAN .) - - -state 103 - - (230) PrimitiveType -> BYTE . - - QUESTIONMARK reduce using rule 230 (PrimitiveType -> BYTE .) - IDENTIFIER reduce using rule 230 (PrimitiveType -> BYTE .) - GT reduce using rule 230 (PrimitiveType -> BYTE .) - ASYNC reduce using rule 230 (PrimitiveType -> BYTE .) - ATTRIBUTE reduce using rule 230 (PrimitiveType -> BYTE .) - CALLBACK reduce using rule 230 (PrimitiveType -> BYTE .) - CONST reduce using rule 230 (PrimitiveType -> BYTE .) - CONSTRUCTOR reduce using rule 230 (PrimitiveType -> BYTE .) - DELETER reduce using rule 230 (PrimitiveType -> BYTE .) - DICTIONARY reduce using rule 230 (PrimitiveType -> BYTE .) - ENUM reduce using rule 230 (PrimitiveType -> BYTE .) - EXCEPTION reduce using rule 230 (PrimitiveType -> BYTE .) - GETTER reduce using rule 230 (PrimitiveType -> BYTE .) - INCLUDES reduce using rule 230 (PrimitiveType -> BYTE .) - INHERIT reduce using rule 230 (PrimitiveType -> BYTE .) - INTERFACE reduce using rule 230 (PrimitiveType -> BYTE .) - ITERABLE reduce using rule 230 (PrimitiveType -> BYTE .) - LEGACYCALLER reduce using rule 230 (PrimitiveType -> BYTE .) - MAPLIKE reduce using rule 230 (PrimitiveType -> BYTE .) - MIXIN reduce using rule 230 (PrimitiveType -> BYTE .) - NAMESPACE reduce using rule 230 (PrimitiveType -> BYTE .) - PARTIAL reduce using rule 230 (PrimitiveType -> BYTE .) - READONLY reduce using rule 230 (PrimitiveType -> BYTE .) - REQUIRED reduce using rule 230 (PrimitiveType -> BYTE .) - SERIALIZER reduce using rule 230 (PrimitiveType -> BYTE .) - SETLIKE reduce using rule 230 (PrimitiveType -> BYTE .) - SETTER reduce using rule 230 (PrimitiveType -> BYTE .) - STATIC reduce using rule 230 (PrimitiveType -> BYTE .) - STRINGIFIER reduce using rule 230 (PrimitiveType -> BYTE .) - TYPEDEF reduce using rule 230 (PrimitiveType -> BYTE .) - UNRESTRICTED reduce using rule 230 (PrimitiveType -> BYTE .) - COMMA reduce using rule 230 (PrimitiveType -> BYTE .) - LPAREN reduce using rule 230 (PrimitiveType -> BYTE .) - ELLIPSIS reduce using rule 230 (PrimitiveType -> BYTE .) - OR reduce using rule 230 (PrimitiveType -> BYTE .) - RPAREN reduce using rule 230 (PrimitiveType -> BYTE .) - - -state 104 - - (231) PrimitiveType -> OCTET . - - QUESTIONMARK reduce using rule 231 (PrimitiveType -> OCTET .) - IDENTIFIER reduce using rule 231 (PrimitiveType -> OCTET .) - GT reduce using rule 231 (PrimitiveType -> OCTET .) - ASYNC reduce using rule 231 (PrimitiveType -> OCTET .) - ATTRIBUTE reduce using rule 231 (PrimitiveType -> OCTET .) - CALLBACK reduce using rule 231 (PrimitiveType -> OCTET .) - CONST reduce using rule 231 (PrimitiveType -> OCTET .) - CONSTRUCTOR reduce using rule 231 (PrimitiveType -> OCTET .) - DELETER reduce using rule 231 (PrimitiveType -> OCTET .) - DICTIONARY reduce using rule 231 (PrimitiveType -> OCTET .) - ENUM reduce using rule 231 (PrimitiveType -> OCTET .) - EXCEPTION reduce using rule 231 (PrimitiveType -> OCTET .) - GETTER reduce using rule 231 (PrimitiveType -> OCTET .) - INCLUDES reduce using rule 231 (PrimitiveType -> OCTET .) - INHERIT reduce using rule 231 (PrimitiveType -> OCTET .) - INTERFACE reduce using rule 231 (PrimitiveType -> OCTET .) - ITERABLE reduce using rule 231 (PrimitiveType -> OCTET .) - LEGACYCALLER reduce using rule 231 (PrimitiveType -> OCTET .) - MAPLIKE reduce using rule 231 (PrimitiveType -> OCTET .) - MIXIN reduce using rule 231 (PrimitiveType -> OCTET .) - NAMESPACE reduce using rule 231 (PrimitiveType -> OCTET .) - PARTIAL reduce using rule 231 (PrimitiveType -> OCTET .) - READONLY reduce using rule 231 (PrimitiveType -> OCTET .) - REQUIRED reduce using rule 231 (PrimitiveType -> OCTET .) - SERIALIZER reduce using rule 231 (PrimitiveType -> OCTET .) - SETLIKE reduce using rule 231 (PrimitiveType -> OCTET .) - SETTER reduce using rule 231 (PrimitiveType -> OCTET .) - STATIC reduce using rule 231 (PrimitiveType -> OCTET .) - STRINGIFIER reduce using rule 231 (PrimitiveType -> OCTET .) - TYPEDEF reduce using rule 231 (PrimitiveType -> OCTET .) - UNRESTRICTED reduce using rule 231 (PrimitiveType -> OCTET .) - COMMA reduce using rule 231 (PrimitiveType -> OCTET .) - LPAREN reduce using rule 231 (PrimitiveType -> OCTET .) - ELLIPSIS reduce using rule 231 (PrimitiveType -> OCTET .) - OR reduce using rule 231 (PrimitiveType -> OCTET .) - RPAREN reduce using rule 231 (PrimitiveType -> OCTET .) - - -state 105 - - (232) PrimitiveType -> FLOAT . - - QUESTIONMARK reduce using rule 232 (PrimitiveType -> FLOAT .) - IDENTIFIER reduce using rule 232 (PrimitiveType -> FLOAT .) - GT reduce using rule 232 (PrimitiveType -> FLOAT .) - ASYNC reduce using rule 232 (PrimitiveType -> FLOAT .) - ATTRIBUTE reduce using rule 232 (PrimitiveType -> FLOAT .) - CALLBACK reduce using rule 232 (PrimitiveType -> FLOAT .) - CONST reduce using rule 232 (PrimitiveType -> FLOAT .) - CONSTRUCTOR reduce using rule 232 (PrimitiveType -> FLOAT .) - DELETER reduce using rule 232 (PrimitiveType -> FLOAT .) - DICTIONARY reduce using rule 232 (PrimitiveType -> FLOAT .) - ENUM reduce using rule 232 (PrimitiveType -> FLOAT .) - EXCEPTION reduce using rule 232 (PrimitiveType -> FLOAT .) - GETTER reduce using rule 232 (PrimitiveType -> FLOAT .) - INCLUDES reduce using rule 232 (PrimitiveType -> FLOAT .) - INHERIT reduce using rule 232 (PrimitiveType -> FLOAT .) - INTERFACE reduce using rule 232 (PrimitiveType -> FLOAT .) - ITERABLE reduce using rule 232 (PrimitiveType -> FLOAT .) - LEGACYCALLER reduce using rule 232 (PrimitiveType -> FLOAT .) - MAPLIKE reduce using rule 232 (PrimitiveType -> FLOAT .) - MIXIN reduce using rule 232 (PrimitiveType -> FLOAT .) - NAMESPACE reduce using rule 232 (PrimitiveType -> FLOAT .) - PARTIAL reduce using rule 232 (PrimitiveType -> FLOAT .) - READONLY reduce using rule 232 (PrimitiveType -> FLOAT .) - REQUIRED reduce using rule 232 (PrimitiveType -> FLOAT .) - SERIALIZER reduce using rule 232 (PrimitiveType -> FLOAT .) - SETLIKE reduce using rule 232 (PrimitiveType -> FLOAT .) - SETTER reduce using rule 232 (PrimitiveType -> FLOAT .) - STATIC reduce using rule 232 (PrimitiveType -> FLOAT .) - STRINGIFIER reduce using rule 232 (PrimitiveType -> FLOAT .) - TYPEDEF reduce using rule 232 (PrimitiveType -> FLOAT .) - UNRESTRICTED reduce using rule 232 (PrimitiveType -> FLOAT .) - COMMA reduce using rule 232 (PrimitiveType -> FLOAT .) - LPAREN reduce using rule 232 (PrimitiveType -> FLOAT .) - ELLIPSIS reduce using rule 232 (PrimitiveType -> FLOAT .) - OR reduce using rule 232 (PrimitiveType -> FLOAT .) - RPAREN reduce using rule 232 (PrimitiveType -> FLOAT .) - - -state 106 - - (233) PrimitiveType -> UNRESTRICTED . FLOAT - (235) PrimitiveType -> UNRESTRICTED . DOUBLE - - FLOAT shift and go to state 161 - DOUBLE shift and go to state 162 - - -state 107 - - (234) PrimitiveType -> DOUBLE . - - QUESTIONMARK reduce using rule 234 (PrimitiveType -> DOUBLE .) - IDENTIFIER reduce using rule 234 (PrimitiveType -> DOUBLE .) - GT reduce using rule 234 (PrimitiveType -> DOUBLE .) - ASYNC reduce using rule 234 (PrimitiveType -> DOUBLE .) - ATTRIBUTE reduce using rule 234 (PrimitiveType -> DOUBLE .) - CALLBACK reduce using rule 234 (PrimitiveType -> DOUBLE .) - CONST reduce using rule 234 (PrimitiveType -> DOUBLE .) - CONSTRUCTOR reduce using rule 234 (PrimitiveType -> DOUBLE .) - DELETER reduce using rule 234 (PrimitiveType -> DOUBLE .) - DICTIONARY reduce using rule 234 (PrimitiveType -> DOUBLE .) - ENUM reduce using rule 234 (PrimitiveType -> DOUBLE .) - EXCEPTION reduce using rule 234 (PrimitiveType -> DOUBLE .) - GETTER reduce using rule 234 (PrimitiveType -> DOUBLE .) - INCLUDES reduce using rule 234 (PrimitiveType -> DOUBLE .) - INHERIT reduce using rule 234 (PrimitiveType -> DOUBLE .) - INTERFACE reduce using rule 234 (PrimitiveType -> DOUBLE .) - ITERABLE reduce using rule 234 (PrimitiveType -> DOUBLE .) - LEGACYCALLER reduce using rule 234 (PrimitiveType -> DOUBLE .) - MAPLIKE reduce using rule 234 (PrimitiveType -> DOUBLE .) - MIXIN reduce using rule 234 (PrimitiveType -> DOUBLE .) - NAMESPACE reduce using rule 234 (PrimitiveType -> DOUBLE .) - PARTIAL reduce using rule 234 (PrimitiveType -> DOUBLE .) - READONLY reduce using rule 234 (PrimitiveType -> DOUBLE .) - REQUIRED reduce using rule 234 (PrimitiveType -> DOUBLE .) - SERIALIZER reduce using rule 234 (PrimitiveType -> DOUBLE .) - SETLIKE reduce using rule 234 (PrimitiveType -> DOUBLE .) - SETTER reduce using rule 234 (PrimitiveType -> DOUBLE .) - STATIC reduce using rule 234 (PrimitiveType -> DOUBLE .) - STRINGIFIER reduce using rule 234 (PrimitiveType -> DOUBLE .) - TYPEDEF reduce using rule 234 (PrimitiveType -> DOUBLE .) - UNRESTRICTED reduce using rule 234 (PrimitiveType -> DOUBLE .) - COMMA reduce using rule 234 (PrimitiveType -> DOUBLE .) - LPAREN reduce using rule 234 (PrimitiveType -> DOUBLE .) - ELLIPSIS reduce using rule 234 (PrimitiveType -> DOUBLE .) - OR reduce using rule 234 (PrimitiveType -> DOUBLE .) - RPAREN reduce using rule 234 (PrimitiveType -> DOUBLE .) - - -state 108 - - (236) StringType -> BuiltinStringType . - - QUESTIONMARK reduce using rule 236 (StringType -> BuiltinStringType .) - IDENTIFIER reduce using rule 236 (StringType -> BuiltinStringType .) - GT reduce using rule 236 (StringType -> BuiltinStringType .) - ASYNC reduce using rule 236 (StringType -> BuiltinStringType .) - ATTRIBUTE reduce using rule 236 (StringType -> BuiltinStringType .) - CALLBACK reduce using rule 236 (StringType -> BuiltinStringType .) - CONST reduce using rule 236 (StringType -> BuiltinStringType .) - CONSTRUCTOR reduce using rule 236 (StringType -> BuiltinStringType .) - DELETER reduce using rule 236 (StringType -> BuiltinStringType .) - DICTIONARY reduce using rule 236 (StringType -> BuiltinStringType .) - ENUM reduce using rule 236 (StringType -> BuiltinStringType .) - EXCEPTION reduce using rule 236 (StringType -> BuiltinStringType .) - GETTER reduce using rule 236 (StringType -> BuiltinStringType .) - INCLUDES reduce using rule 236 (StringType -> BuiltinStringType .) - INHERIT reduce using rule 236 (StringType -> BuiltinStringType .) - INTERFACE reduce using rule 236 (StringType -> BuiltinStringType .) - ITERABLE reduce using rule 236 (StringType -> BuiltinStringType .) - LEGACYCALLER reduce using rule 236 (StringType -> BuiltinStringType .) - MAPLIKE reduce using rule 236 (StringType -> BuiltinStringType .) - MIXIN reduce using rule 236 (StringType -> BuiltinStringType .) - NAMESPACE reduce using rule 236 (StringType -> BuiltinStringType .) - PARTIAL reduce using rule 236 (StringType -> BuiltinStringType .) - READONLY reduce using rule 236 (StringType -> BuiltinStringType .) - REQUIRED reduce using rule 236 (StringType -> BuiltinStringType .) - SERIALIZER reduce using rule 236 (StringType -> BuiltinStringType .) - SETLIKE reduce using rule 236 (StringType -> BuiltinStringType .) - SETTER reduce using rule 236 (StringType -> BuiltinStringType .) - STATIC reduce using rule 236 (StringType -> BuiltinStringType .) - STRINGIFIER reduce using rule 236 (StringType -> BuiltinStringType .) - TYPEDEF reduce using rule 236 (StringType -> BuiltinStringType .) - UNRESTRICTED reduce using rule 236 (StringType -> BuiltinStringType .) - COMMA reduce using rule 236 (StringType -> BuiltinStringType .) - LPAREN reduce using rule 236 (StringType -> BuiltinStringType .) - ELLIPSIS reduce using rule 236 (StringType -> BuiltinStringType .) - OR reduce using rule 236 (StringType -> BuiltinStringType .) - RPAREN reduce using rule 236 (StringType -> BuiltinStringType .) - - -state 109 - - (242) UnsignedIntegerType -> UNSIGNED . IntegerType - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - SHORT shift and go to state 116 - LONG shift and go to state 117 - - IntegerType shift and go to state 163 - -state 110 - - (243) UnsignedIntegerType -> IntegerType . - - QUESTIONMARK reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - IDENTIFIER reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - GT reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - ASYNC reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - ATTRIBUTE reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - CALLBACK reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - CONST reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - CONSTRUCTOR reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - DELETER reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - DICTIONARY reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - ENUM reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - EXCEPTION reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - GETTER reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - INCLUDES reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - INHERIT reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - INTERFACE reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - ITERABLE reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - LEGACYCALLER reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - MAPLIKE reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - MIXIN reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - NAMESPACE reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - PARTIAL reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - READONLY reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - REQUIRED reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - SERIALIZER reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - SETLIKE reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - SETTER reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - STATIC reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - STRINGIFIER reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - TYPEDEF reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - UNRESTRICTED reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - COMMA reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - LPAREN reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - ELLIPSIS reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - OR reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - RPAREN reduce using rule 243 (UnsignedIntegerType -> IntegerType .) - - -state 111 - - (237) BuiltinStringType -> DOMSTRING . - - QUESTIONMARK reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - IDENTIFIER reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - GT reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - ASYNC reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - ATTRIBUTE reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - CALLBACK reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - CONST reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - CONSTRUCTOR reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - DELETER reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - DICTIONARY reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - ENUM reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - EXCEPTION reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - GETTER reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - INCLUDES reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - INHERIT reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - INTERFACE reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - ITERABLE reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - LEGACYCALLER reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - MAPLIKE reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - MIXIN reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - NAMESPACE reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - PARTIAL reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - READONLY reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - REQUIRED reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - SERIALIZER reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - SETLIKE reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - SETTER reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - STATIC reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - STRINGIFIER reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - TYPEDEF reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - UNRESTRICTED reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - COMMA reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - LPAREN reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - ELLIPSIS reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - OR reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - RPAREN reduce using rule 237 (BuiltinStringType -> DOMSTRING .) - - -state 112 - - (238) BuiltinStringType -> BYTESTRING . - - QUESTIONMARK reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - IDENTIFIER reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - GT reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - ASYNC reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - ATTRIBUTE reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - CALLBACK reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - CONST reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - CONSTRUCTOR reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - DELETER reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - DICTIONARY reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - ENUM reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - EXCEPTION reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - GETTER reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - INCLUDES reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - INHERIT reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - INTERFACE reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - ITERABLE reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - LEGACYCALLER reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - MAPLIKE reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - MIXIN reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - NAMESPACE reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - PARTIAL reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - READONLY reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - REQUIRED reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - SERIALIZER reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - SETLIKE reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - SETTER reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - STATIC reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - STRINGIFIER reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - TYPEDEF reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - UNRESTRICTED reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - COMMA reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - LPAREN reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - ELLIPSIS reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - OR reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - RPAREN reduce using rule 238 (BuiltinStringType -> BYTESTRING .) - - -state 113 - - (239) BuiltinStringType -> USVSTRING . - - QUESTIONMARK reduce using rule 239 (BuiltinStringType -> USVSTRING .) - IDENTIFIER reduce using rule 239 (BuiltinStringType -> USVSTRING .) - GT reduce using rule 239 (BuiltinStringType -> USVSTRING .) - ASYNC reduce using rule 239 (BuiltinStringType -> USVSTRING .) - ATTRIBUTE reduce using rule 239 (BuiltinStringType -> USVSTRING .) - CALLBACK reduce using rule 239 (BuiltinStringType -> USVSTRING .) - CONST reduce using rule 239 (BuiltinStringType -> USVSTRING .) - CONSTRUCTOR reduce using rule 239 (BuiltinStringType -> USVSTRING .) - DELETER reduce using rule 239 (BuiltinStringType -> USVSTRING .) - DICTIONARY reduce using rule 239 (BuiltinStringType -> USVSTRING .) - ENUM reduce using rule 239 (BuiltinStringType -> USVSTRING .) - EXCEPTION reduce using rule 239 (BuiltinStringType -> USVSTRING .) - GETTER reduce using rule 239 (BuiltinStringType -> USVSTRING .) - INCLUDES reduce using rule 239 (BuiltinStringType -> USVSTRING .) - INHERIT reduce using rule 239 (BuiltinStringType -> USVSTRING .) - INTERFACE reduce using rule 239 (BuiltinStringType -> USVSTRING .) - ITERABLE reduce using rule 239 (BuiltinStringType -> USVSTRING .) - LEGACYCALLER reduce using rule 239 (BuiltinStringType -> USVSTRING .) - MAPLIKE reduce using rule 239 (BuiltinStringType -> USVSTRING .) - MIXIN reduce using rule 239 (BuiltinStringType -> USVSTRING .) - NAMESPACE reduce using rule 239 (BuiltinStringType -> USVSTRING .) - PARTIAL reduce using rule 239 (BuiltinStringType -> USVSTRING .) - READONLY reduce using rule 239 (BuiltinStringType -> USVSTRING .) - REQUIRED reduce using rule 239 (BuiltinStringType -> USVSTRING .) - SERIALIZER reduce using rule 239 (BuiltinStringType -> USVSTRING .) - SETLIKE reduce using rule 239 (BuiltinStringType -> USVSTRING .) - SETTER reduce using rule 239 (BuiltinStringType -> USVSTRING .) - STATIC reduce using rule 239 (BuiltinStringType -> USVSTRING .) - STRINGIFIER reduce using rule 239 (BuiltinStringType -> USVSTRING .) - TYPEDEF reduce using rule 239 (BuiltinStringType -> USVSTRING .) - UNRESTRICTED reduce using rule 239 (BuiltinStringType -> USVSTRING .) - COMMA reduce using rule 239 (BuiltinStringType -> USVSTRING .) - LPAREN reduce using rule 239 (BuiltinStringType -> USVSTRING .) - ELLIPSIS reduce using rule 239 (BuiltinStringType -> USVSTRING .) - OR reduce using rule 239 (BuiltinStringType -> USVSTRING .) - RPAREN reduce using rule 239 (BuiltinStringType -> USVSTRING .) - - -state 114 - - (240) BuiltinStringType -> UTF8STRING . - - QUESTIONMARK reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - IDENTIFIER reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - GT reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - ASYNC reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - ATTRIBUTE reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - CALLBACK reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - CONST reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - CONSTRUCTOR reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - DELETER reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - DICTIONARY reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - ENUM reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - EXCEPTION reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - GETTER reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - INCLUDES reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - INHERIT reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - INTERFACE reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - ITERABLE reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - LEGACYCALLER reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - MAPLIKE reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - MIXIN reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - NAMESPACE reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - PARTIAL reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - READONLY reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - REQUIRED reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - SERIALIZER reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - SETLIKE reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - SETTER reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - STATIC reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - STRINGIFIER reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - TYPEDEF reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - UNRESTRICTED reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - COMMA reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - LPAREN reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - ELLIPSIS reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - OR reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - RPAREN reduce using rule 240 (BuiltinStringType -> UTF8STRING .) - - -state 115 - - (241) BuiltinStringType -> JSSTRING . - - QUESTIONMARK reduce using rule 241 (BuiltinStringType -> JSSTRING .) - IDENTIFIER reduce using rule 241 (BuiltinStringType -> JSSTRING .) - GT reduce using rule 241 (BuiltinStringType -> JSSTRING .) - ASYNC reduce using rule 241 (BuiltinStringType -> JSSTRING .) - ATTRIBUTE reduce using rule 241 (BuiltinStringType -> JSSTRING .) - CALLBACK reduce using rule 241 (BuiltinStringType -> JSSTRING .) - CONST reduce using rule 241 (BuiltinStringType -> JSSTRING .) - CONSTRUCTOR reduce using rule 241 (BuiltinStringType -> JSSTRING .) - DELETER reduce using rule 241 (BuiltinStringType -> JSSTRING .) - DICTIONARY reduce using rule 241 (BuiltinStringType -> JSSTRING .) - ENUM reduce using rule 241 (BuiltinStringType -> JSSTRING .) - EXCEPTION reduce using rule 241 (BuiltinStringType -> JSSTRING .) - GETTER reduce using rule 241 (BuiltinStringType -> JSSTRING .) - INCLUDES reduce using rule 241 (BuiltinStringType -> JSSTRING .) - INHERIT reduce using rule 241 (BuiltinStringType -> JSSTRING .) - INTERFACE reduce using rule 241 (BuiltinStringType -> JSSTRING .) - ITERABLE reduce using rule 241 (BuiltinStringType -> JSSTRING .) - LEGACYCALLER reduce using rule 241 (BuiltinStringType -> JSSTRING .) - MAPLIKE reduce using rule 241 (BuiltinStringType -> JSSTRING .) - MIXIN reduce using rule 241 (BuiltinStringType -> JSSTRING .) - NAMESPACE reduce using rule 241 (BuiltinStringType -> JSSTRING .) - PARTIAL reduce using rule 241 (BuiltinStringType -> JSSTRING .) - READONLY reduce using rule 241 (BuiltinStringType -> JSSTRING .) - REQUIRED reduce using rule 241 (BuiltinStringType -> JSSTRING .) - SERIALIZER reduce using rule 241 (BuiltinStringType -> JSSTRING .) - SETLIKE reduce using rule 241 (BuiltinStringType -> JSSTRING .) - SETTER reduce using rule 241 (BuiltinStringType -> JSSTRING .) - STATIC reduce using rule 241 (BuiltinStringType -> JSSTRING .) - STRINGIFIER reduce using rule 241 (BuiltinStringType -> JSSTRING .) - TYPEDEF reduce using rule 241 (BuiltinStringType -> JSSTRING .) - UNRESTRICTED reduce using rule 241 (BuiltinStringType -> JSSTRING .) - COMMA reduce using rule 241 (BuiltinStringType -> JSSTRING .) - LPAREN reduce using rule 241 (BuiltinStringType -> JSSTRING .) - ELLIPSIS reduce using rule 241 (BuiltinStringType -> JSSTRING .) - OR reduce using rule 241 (BuiltinStringType -> JSSTRING .) - RPAREN reduce using rule 241 (BuiltinStringType -> JSSTRING .) - - -state 116 - - (244) IntegerType -> SHORT . - - QUESTIONMARK reduce using rule 244 (IntegerType -> SHORT .) - IDENTIFIER reduce using rule 244 (IntegerType -> SHORT .) - GT reduce using rule 244 (IntegerType -> SHORT .) - ASYNC reduce using rule 244 (IntegerType -> SHORT .) - ATTRIBUTE reduce using rule 244 (IntegerType -> SHORT .) - CALLBACK reduce using rule 244 (IntegerType -> SHORT .) - CONST reduce using rule 244 (IntegerType -> SHORT .) - CONSTRUCTOR reduce using rule 244 (IntegerType -> SHORT .) - DELETER reduce using rule 244 (IntegerType -> SHORT .) - DICTIONARY reduce using rule 244 (IntegerType -> SHORT .) - ENUM reduce using rule 244 (IntegerType -> SHORT .) - EXCEPTION reduce using rule 244 (IntegerType -> SHORT .) - GETTER reduce using rule 244 (IntegerType -> SHORT .) - INCLUDES reduce using rule 244 (IntegerType -> SHORT .) - INHERIT reduce using rule 244 (IntegerType -> SHORT .) - INTERFACE reduce using rule 244 (IntegerType -> SHORT .) - ITERABLE reduce using rule 244 (IntegerType -> SHORT .) - LEGACYCALLER reduce using rule 244 (IntegerType -> SHORT .) - MAPLIKE reduce using rule 244 (IntegerType -> SHORT .) - MIXIN reduce using rule 244 (IntegerType -> SHORT .) - NAMESPACE reduce using rule 244 (IntegerType -> SHORT .) - PARTIAL reduce using rule 244 (IntegerType -> SHORT .) - READONLY reduce using rule 244 (IntegerType -> SHORT .) - REQUIRED reduce using rule 244 (IntegerType -> SHORT .) - SERIALIZER reduce using rule 244 (IntegerType -> SHORT .) - SETLIKE reduce using rule 244 (IntegerType -> SHORT .) - SETTER reduce using rule 244 (IntegerType -> SHORT .) - STATIC reduce using rule 244 (IntegerType -> SHORT .) - STRINGIFIER reduce using rule 244 (IntegerType -> SHORT .) - TYPEDEF reduce using rule 244 (IntegerType -> SHORT .) - UNRESTRICTED reduce using rule 244 (IntegerType -> SHORT .) - COMMA reduce using rule 244 (IntegerType -> SHORT .) - LPAREN reduce using rule 244 (IntegerType -> SHORT .) - ELLIPSIS reduce using rule 244 (IntegerType -> SHORT .) - OR reduce using rule 244 (IntegerType -> SHORT .) - RPAREN reduce using rule 244 (IntegerType -> SHORT .) - - -state 117 - - (245) IntegerType -> LONG . OptionalLong - (246) OptionalLong -> . LONG - (247) OptionalLong -> . - - LONG shift and go to state 164 - QUESTIONMARK reduce using rule 247 (OptionalLong -> .) - IDENTIFIER reduce using rule 247 (OptionalLong -> .) - GT reduce using rule 247 (OptionalLong -> .) - ASYNC reduce using rule 247 (OptionalLong -> .) - ATTRIBUTE reduce using rule 247 (OptionalLong -> .) - CALLBACK reduce using rule 247 (OptionalLong -> .) - CONST reduce using rule 247 (OptionalLong -> .) - CONSTRUCTOR reduce using rule 247 (OptionalLong -> .) - DELETER reduce using rule 247 (OptionalLong -> .) - DICTIONARY reduce using rule 247 (OptionalLong -> .) - ENUM reduce using rule 247 (OptionalLong -> .) - EXCEPTION reduce using rule 247 (OptionalLong -> .) - GETTER reduce using rule 247 (OptionalLong -> .) - INCLUDES reduce using rule 247 (OptionalLong -> .) - INHERIT reduce using rule 247 (OptionalLong -> .) - INTERFACE reduce using rule 247 (OptionalLong -> .) - ITERABLE reduce using rule 247 (OptionalLong -> .) - LEGACYCALLER reduce using rule 247 (OptionalLong -> .) - MAPLIKE reduce using rule 247 (OptionalLong -> .) - MIXIN reduce using rule 247 (OptionalLong -> .) - NAMESPACE reduce using rule 247 (OptionalLong -> .) - PARTIAL reduce using rule 247 (OptionalLong -> .) - READONLY reduce using rule 247 (OptionalLong -> .) - REQUIRED reduce using rule 247 (OptionalLong -> .) - SERIALIZER reduce using rule 247 (OptionalLong -> .) - SETLIKE reduce using rule 247 (OptionalLong -> .) - SETTER reduce using rule 247 (OptionalLong -> .) - STATIC reduce using rule 247 (OptionalLong -> .) - STRINGIFIER reduce using rule 247 (OptionalLong -> .) - TYPEDEF reduce using rule 247 (OptionalLong -> .) - UNRESTRICTED reduce using rule 247 (OptionalLong -> .) - COMMA reduce using rule 247 (OptionalLong -> .) - LPAREN reduce using rule 247 (OptionalLong -> .) - ELLIPSIS reduce using rule 247 (OptionalLong -> .) - OR reduce using rule 247 (OptionalLong -> .) - RPAREN reduce using rule 247 (OptionalLong -> .) - - OptionalLong shift and go to state 165 - -state 118 - - (72) IncludesStatement -> ScopedName INCLUDES ScopedName . SEMICOLON - - SEMICOLON shift and go to state 166 - - -state 119 - - (254) AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts . - - INCLUDES reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - QUESTIONMARK reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - IDENTIFIER reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - GT reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - ASYNC reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - ATTRIBUTE reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - CALLBACK reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - CONST reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - CONSTRUCTOR reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - DELETER reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - DICTIONARY reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - ENUM reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - EXCEPTION reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - GETTER reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - INHERIT reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - INTERFACE reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - ITERABLE reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - LEGACYCALLER reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - MAPLIKE reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - MIXIN reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - NAMESPACE reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - PARTIAL reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - READONLY reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - REQUIRED reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - SERIALIZER reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - SETLIKE reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - SETTER reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - STATIC reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - STRINGIFIER reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - TYPEDEF reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - UNRESTRICTED reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - COMMA reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - SEMICOLON reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - LPAREN reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - LBRACE reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - ELLIPSIS reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - OR reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - RPAREN reduce using rule 254 (AbsoluteScopedName -> SCOPE IDENTIFIER ScopedNameParts .) - - -state 120 - - (156) ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET . - - CALLBACK reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - INTERFACE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - NAMESPACE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - PARTIAL reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - DICTIONARY reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - EXCEPTION reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - ENUM reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - TYPEDEF reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - SCOPE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - IDENTIFIER reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - ANY reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - PROMISE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - LPAREN reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - ARRAYBUFFER reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - READABLESTREAM reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - OBJECT reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - SEQUENCE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - RECORD reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - BOOLEAN reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - BYTE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - OCTET reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - FLOAT reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - UNRESTRICTED reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - DOUBLE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - UNSIGNED reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - DOMSTRING reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - BYTESTRING reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - USVSTRING reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - UTF8STRING reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - JSSTRING reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - SHORT reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - LONG reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - OPTIONAL reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - CONSTRUCTOR reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - CONST reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - INHERIT reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - ITERABLE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - STRINGIFIER reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - STATIC reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - READONLY reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - GETTER reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - SETTER reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - DELETER reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - LEGACYCALLER reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - MAPLIKE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - SETLIKE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - ATTRIBUTE reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - VOID reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - REQUIRED reduce using rule 156 (ExtendedAttributeList -> LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET .) - - -state 121 - - (164) ExtendedAttributes -> COMMA ExtendedAttribute . ExtendedAttributes - (164) ExtendedAttributes -> . COMMA ExtendedAttribute ExtendedAttributes - (165) ExtendedAttributes -> . - - COMMA shift and go to state 63 - RBRACKET reduce using rule 165 (ExtendedAttributes -> .) - - ExtendedAttributes shift and go to state 167 - -state 122 - - (259) ExtendedAttributeArgList -> IDENTIFIER LPAREN ArgumentList . RPAREN - - RPAREN shift and go to state 168 - - -state 123 - - (110) ArgumentList -> Argument . Arguments - (112) Arguments -> . COMMA Argument Arguments - (113) Arguments -> . - - COMMA shift and go to state 170 - RPAREN reduce using rule 113 (Arguments -> .) - - Arguments shift and go to state 169 - -state 124 - - (114) Argument -> ExtendedAttributeList . ArgumentRest - (115) ArgumentRest -> . OPTIONAL TypeWithExtendedAttributes ArgumentName Default - (116) ArgumentRest -> . Type Ellipsis ArgumentName - (207) Type -> . SingleType - (208) Type -> . UnionType Null - (210) SingleType -> . DistinguishableType - (211) SingleType -> . ANY - (212) SingleType -> . PROMISE LT ReturnType GT - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - OPTIONAL shift and go to state 172 - ANY shift and go to state 90 - PROMISE shift and go to state 91 - LPAREN shift and go to state 92 - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - ArgumentRest shift and go to state 171 - Type shift and go to state 173 - SingleType shift and go to state 87 - UnionType shift and go to state 88 - DistinguishableType shift and go to state 89 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 125 - - (261) ExtendedAttributeIdent -> IDENTIFIER EQUALS IDENTIFIER . - (262) ExtendedAttributeNamedArgList -> IDENTIFIER EQUALS IDENTIFIER . LPAREN ArgumentList RPAREN - - COMMA reduce using rule 261 (ExtendedAttributeIdent -> IDENTIFIER EQUALS IDENTIFIER .) - RBRACKET reduce using rule 261 (ExtendedAttributeIdent -> IDENTIFIER EQUALS IDENTIFIER .) - LPAREN shift and go to state 174 - - -state 126 - - (260) ExtendedAttributeIdent -> IDENTIFIER EQUALS STRING . - - COMMA reduce using rule 260 (ExtendedAttributeIdent -> IDENTIFIER EQUALS STRING .) - RBRACKET reduce using rule 260 (ExtendedAttributeIdent -> IDENTIFIER EQUALS STRING .) - - -state 127 - - (263) ExtendedAttributeIdentList -> IDENTIFIER EQUALS LPAREN . IdentifierList RPAREN - (264) IdentifierList -> . IDENTIFIER Identifiers - - IDENTIFIER shift and go to state 175 - - IdentifierList shift and go to state 176 - -state 128 - - (67) CallbackRest -> IDENTIFIER EQUALS ReturnType . LPAREN ArgumentList RPAREN SEMICOLON - - LPAREN shift and go to state 177 - - -state 129 - - (250) ReturnType -> Type . - - LPAREN reduce using rule 250 (ReturnType -> Type .) - GT reduce using rule 250 (ReturnType -> Type .) - IDENTIFIER reduce using rule 250 (ReturnType -> Type .) - - -state 130 - - (251) ReturnType -> VOID . - - LPAREN reduce using rule 251 (ReturnType -> VOID .) - GT reduce using rule 251 (ReturnType -> VOID .) - IDENTIFIER reduce using rule 251 (ReturnType -> VOID .) - - -state 131 - - (68) CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS . ReturnType LPAREN ArgumentList RPAREN SEMICOLON - (250) ReturnType -> . Type - (251) ReturnType -> . VOID - (207) Type -> . SingleType - (208) Type -> . UnionType Null - (210) SingleType -> . DistinguishableType - (211) SingleType -> . ANY - (212) SingleType -> . PROMISE LT ReturnType GT - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - VOID shift and go to state 130 - ANY shift and go to state 90 - PROMISE shift and go to state 91 - LPAREN shift and go to state 92 - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - ReturnType shift and go to state 178 - Type shift and go to state 129 - SingleType shift and go to state 87 - UnionType shift and go to state 88 - DistinguishableType shift and go to state 89 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 132 - - (19) InterfaceRest -> IDENTIFIER Inheritance LBRACE . InterfaceMembers RBRACE SEMICOLON - (35) InterfaceMembers -> . ExtendedAttributeList InterfaceMember InterfaceMembers - (36) InterfaceMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 36 (InterfaceMembers -> .) - LBRACKET shift and go to state 3 - CONSTRUCTOR reduce using rule 157 (ExtendedAttributeList -> .) - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - ITERABLE reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - MAPLIKE reduce using rule 157 (ExtendedAttributeList -> .) - SETLIKE reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - InterfaceMembers shift and go to state 179 - ExtendedAttributeList shift and go to state 136 - -state 133 - - (33) Inheritance -> COLON ScopedName . - - LBRACE reduce using rule 33 (Inheritance -> COLON ScopedName .) - - -state 134 - - (21) MixinRest -> MIXIN IDENTIFIER LBRACE . MixinMembers RBRACE SEMICOLON - (44) MixinMembers -> . - (45) MixinMembers -> . ExtendedAttributeList MixinMember MixinMembers - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 44 (MixinMembers -> .) - LBRACKET shift and go to state 3 - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - - MixinMembers shift and go to state 180 - ExtendedAttributeList shift and go to state 181 - -state 135 - - (22) Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 182 - - -state 136 - - (35) InterfaceMembers -> ExtendedAttributeList . InterfaceMember InterfaceMembers - (37) InterfaceMember -> . PartialInterfaceMember - (38) InterfaceMember -> . Constructor - (42) PartialInterfaceMember -> . Const - (43) PartialInterfaceMember -> . AttributeOrOperationOrMaplikeOrSetlikeOrIterable - (39) Constructor -> . CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON - (73) Const -> . CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON - (80) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Attribute - (81) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Maplike - (82) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Setlike - (83) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Iterable - (84) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Operation - (89) Attribute -> . Qualifier AttributeRest - (90) Attribute -> . INHERIT AttributeRest - (91) Attribute -> . AttributeRest - (88) Maplike -> . ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - (87) Setlike -> . ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON - (85) Iterable -> . ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON - (86) Iterable -> . ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - (95) Operation -> . Qualifiers OperationRest - (96) Operation -> . STRINGIFIER SEMICOLON - (97) Qualifier -> . STATIC - (98) Qualifier -> . STRINGIFIER - (92) AttributeRest -> . ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON - (93) ReadOnly -> . READONLY - (94) ReadOnly -> . - (99) Qualifiers -> . Qualifier - (100) Qualifiers -> . Specials - (101) Specials -> . Special Specials - (102) Specials -> . - (103) Special -> . GETTER - (104) Special -> . SETTER - (105) Special -> . DELETER - (106) Special -> . LEGACYCALLER - - CONSTRUCTOR shift and go to state 188 - CONST shift and go to state 189 - INHERIT shift and go to state 197 - ITERABLE shift and go to state 199 - STRINGIFIER shift and go to state 201 - STATIC shift and go to state 202 - READONLY shift and go to state 203 - MAPLIKE reduce using rule 94 (ReadOnly -> .) - SETLIKE reduce using rule 94 (ReadOnly -> .) - ATTRIBUTE reduce using rule 94 (ReadOnly -> .) - VOID reduce using rule 102 (Specials -> .) - ANY reduce using rule 102 (Specials -> .) - PROMISE reduce using rule 102 (Specials -> .) - LPAREN reduce using rule 102 (Specials -> .) - ARRAYBUFFER reduce using rule 102 (Specials -> .) - READABLESTREAM reduce using rule 102 (Specials -> .) - OBJECT reduce using rule 102 (Specials -> .) - SEQUENCE reduce using rule 102 (Specials -> .) - RECORD reduce using rule 102 (Specials -> .) - BOOLEAN reduce using rule 102 (Specials -> .) - BYTE reduce using rule 102 (Specials -> .) - OCTET reduce using rule 102 (Specials -> .) - FLOAT reduce using rule 102 (Specials -> .) - UNRESTRICTED reduce using rule 102 (Specials -> .) - DOUBLE reduce using rule 102 (Specials -> .) - UNSIGNED reduce using rule 102 (Specials -> .) - DOMSTRING reduce using rule 102 (Specials -> .) - BYTESTRING reduce using rule 102 (Specials -> .) - USVSTRING reduce using rule 102 (Specials -> .) - UTF8STRING reduce using rule 102 (Specials -> .) - JSSTRING reduce using rule 102 (Specials -> .) - SCOPE reduce using rule 102 (Specials -> .) - IDENTIFIER reduce using rule 102 (Specials -> .) - SHORT reduce using rule 102 (Specials -> .) - LONG reduce using rule 102 (Specials -> .) - GETTER shift and go to state 206 - SETTER shift and go to state 207 - DELETER shift and go to state 208 - LEGACYCALLER shift and go to state 209 - - InterfaceMember shift and go to state 183 - PartialInterfaceMember shift and go to state 184 - Constructor shift and go to state 185 - Const shift and go to state 186 - AttributeOrOperationOrMaplikeOrSetlikeOrIterable shift and go to state 187 - Attribute shift and go to state 190 - Maplike shift and go to state 191 - Setlike shift and go to state 192 - Iterable shift and go to state 193 - Operation shift and go to state 194 - Qualifier shift and go to state 195 - AttributeRest shift and go to state 196 - ReadOnly shift and go to state 198 - Qualifiers shift and go to state 200 - Specials shift and go to state 204 - Special shift and go to state 205 - -state 137 - - (256) ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts . - - INCLUDES reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - QUESTIONMARK reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - IDENTIFIER reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - GT reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - ASYNC reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - ATTRIBUTE reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - CALLBACK reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - CONST reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - CONSTRUCTOR reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - DELETER reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - DICTIONARY reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - ENUM reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - EXCEPTION reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - GETTER reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - INHERIT reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - INTERFACE reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - ITERABLE reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - LEGACYCALLER reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - MAPLIKE reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - MIXIN reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - NAMESPACE reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - PARTIAL reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - READONLY reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - REQUIRED reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - SERIALIZER reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - SETLIKE reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - SETTER reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - STATIC reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - STRINGIFIER reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - TYPEDEF reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - UNRESTRICTED reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - COMMA reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - SEMICOLON reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - LPAREN reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - LBRACE reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - ELLIPSIS reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - OR reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - RPAREN reduce using rule 256 (ScopedNameParts -> SCOPE IDENTIFIER ScopedNameParts .) - - -state 138 - - (29) PartialInterfaceRest -> IDENTIFIER LBRACE . PartialInterfaceMembers RBRACE SEMICOLON - (40) PartialInterfaceMembers -> . ExtendedAttributeList PartialInterfaceMember PartialInterfaceMembers - (41) PartialInterfaceMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 41 (PartialInterfaceMembers -> .) - LBRACKET shift and go to state 3 - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - ITERABLE reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - MAPLIKE reduce using rule 157 (ExtendedAttributeList -> .) - SETLIKE reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - PartialInterfaceMembers shift and go to state 210 - ExtendedAttributeList shift and go to state 211 - -state 139 - - (30) PartialMixinRest -> MIXIN IDENTIFIER . LBRACE MixinMembers RBRACE SEMICOLON - - LBRACE shift and go to state 212 - - -state 140 - - (31) PartialNamespace -> NAMESPACE IDENTIFIER LBRACE . InterfaceMembers RBRACE SEMICOLON - (35) InterfaceMembers -> . ExtendedAttributeList InterfaceMember InterfaceMembers - (36) InterfaceMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 36 (InterfaceMembers -> .) - LBRACKET shift and go to state 3 - CONSTRUCTOR reduce using rule 157 (ExtendedAttributeList -> .) - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - ITERABLE reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - MAPLIKE reduce using rule 157 (ExtendedAttributeList -> .) - SETLIKE reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - InterfaceMembers shift and go to state 213 - ExtendedAttributeList shift and go to state 136 - -state 141 - - (32) PartialDictionary -> DICTIONARY IDENTIFIER LBRACE . DictionaryMembers RBRACE SEMICOLON - (50) DictionaryMembers -> . ExtendedAttributeList DictionaryMember DictionaryMembers - (51) DictionaryMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 51 (DictionaryMembers -> .) - LBRACKET shift and go to state 3 - REQUIRED reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - DictionaryMembers shift and go to state 214 - ExtendedAttributeList shift and go to state 215 - -state 142 - - (49) Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE . DictionaryMembers RBRACE SEMICOLON - (50) DictionaryMembers -> . ExtendedAttributeList DictionaryMember DictionaryMembers - (51) DictionaryMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 51 (DictionaryMembers -> .) - LBRACKET shift and go to state 3 - REQUIRED reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - DictionaryMembers shift and go to state 216 - ExtendedAttributeList shift and go to state 215 - -state 143 - - (60) Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE . ExceptionMembers RBRACE SEMICOLON - (69) ExceptionMembers -> . ExtendedAttributeList ExceptionMember ExceptionMembers - (70) ExceptionMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 70 (ExceptionMembers -> .) - LBRACKET shift and go to state 3 - CONST reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ExceptionMembers shift and go to state 217 - ExtendedAttributeList shift and go to state 218 - -state 144 - - (61) Enum -> ENUM IDENTIFIER LBRACE EnumValueList . RBRACE SEMICOLON - - RBRACE shift and go to state 219 - - -state 145 - - (62) EnumValueList -> STRING . EnumValueListComma - (63) EnumValueListComma -> . COMMA EnumValueListString - (64) EnumValueListComma -> . - - COMMA shift and go to state 221 - RBRACE reduce using rule 64 (EnumValueListComma -> .) - - EnumValueListComma shift and go to state 220 - -state 146 - - (71) Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON . - - LBRACKET reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - CALLBACK reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - INTERFACE reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - NAMESPACE reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - PARTIAL reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - DICTIONARY reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - EXCEPTION reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - ENUM reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - TYPEDEF reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - SCOPE reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - IDENTIFIER reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - $end reduce using rule 71 (Typedef -> TYPEDEF TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - - -state 147 - - (208) Type -> UnionType Null . - - IDENTIFIER reduce using rule 208 (Type -> UnionType Null .) - GT reduce using rule 208 (Type -> UnionType Null .) - ASYNC reduce using rule 208 (Type -> UnionType Null .) - ATTRIBUTE reduce using rule 208 (Type -> UnionType Null .) - CALLBACK reduce using rule 208 (Type -> UnionType Null .) - CONST reduce using rule 208 (Type -> UnionType Null .) - CONSTRUCTOR reduce using rule 208 (Type -> UnionType Null .) - DELETER reduce using rule 208 (Type -> UnionType Null .) - DICTIONARY reduce using rule 208 (Type -> UnionType Null .) - ENUM reduce using rule 208 (Type -> UnionType Null .) - EXCEPTION reduce using rule 208 (Type -> UnionType Null .) - GETTER reduce using rule 208 (Type -> UnionType Null .) - INCLUDES reduce using rule 208 (Type -> UnionType Null .) - INHERIT reduce using rule 208 (Type -> UnionType Null .) - INTERFACE reduce using rule 208 (Type -> UnionType Null .) - ITERABLE reduce using rule 208 (Type -> UnionType Null .) - LEGACYCALLER reduce using rule 208 (Type -> UnionType Null .) - MAPLIKE reduce using rule 208 (Type -> UnionType Null .) - MIXIN reduce using rule 208 (Type -> UnionType Null .) - NAMESPACE reduce using rule 208 (Type -> UnionType Null .) - PARTIAL reduce using rule 208 (Type -> UnionType Null .) - READONLY reduce using rule 208 (Type -> UnionType Null .) - REQUIRED reduce using rule 208 (Type -> UnionType Null .) - SERIALIZER reduce using rule 208 (Type -> UnionType Null .) - SETLIKE reduce using rule 208 (Type -> UnionType Null .) - SETTER reduce using rule 208 (Type -> UnionType Null .) - STATIC reduce using rule 208 (Type -> UnionType Null .) - STRINGIFIER reduce using rule 208 (Type -> UnionType Null .) - TYPEDEF reduce using rule 208 (Type -> UnionType Null .) - UNRESTRICTED reduce using rule 208 (Type -> UnionType Null .) - COMMA reduce using rule 208 (Type -> UnionType Null .) - LPAREN reduce using rule 208 (Type -> UnionType Null .) - ELLIPSIS reduce using rule 208 (Type -> UnionType Null .) - - -state 148 - - (248) Null -> QUESTIONMARK . - - IDENTIFIER reduce using rule 248 (Null -> QUESTIONMARK .) - GT reduce using rule 248 (Null -> QUESTIONMARK .) - ASYNC reduce using rule 248 (Null -> QUESTIONMARK .) - ATTRIBUTE reduce using rule 248 (Null -> QUESTIONMARK .) - CALLBACK reduce using rule 248 (Null -> QUESTIONMARK .) - CONST reduce using rule 248 (Null -> QUESTIONMARK .) - CONSTRUCTOR reduce using rule 248 (Null -> QUESTIONMARK .) - DELETER reduce using rule 248 (Null -> QUESTIONMARK .) - DICTIONARY reduce using rule 248 (Null -> QUESTIONMARK .) - ENUM reduce using rule 248 (Null -> QUESTIONMARK .) - EXCEPTION reduce using rule 248 (Null -> QUESTIONMARK .) - GETTER reduce using rule 248 (Null -> QUESTIONMARK .) - INCLUDES reduce using rule 248 (Null -> QUESTIONMARK .) - INHERIT reduce using rule 248 (Null -> QUESTIONMARK .) - INTERFACE reduce using rule 248 (Null -> QUESTIONMARK .) - ITERABLE reduce using rule 248 (Null -> QUESTIONMARK .) - LEGACYCALLER reduce using rule 248 (Null -> QUESTIONMARK .) - MAPLIKE reduce using rule 248 (Null -> QUESTIONMARK .) - MIXIN reduce using rule 248 (Null -> QUESTIONMARK .) - NAMESPACE reduce using rule 248 (Null -> QUESTIONMARK .) - PARTIAL reduce using rule 248 (Null -> QUESTIONMARK .) - READONLY reduce using rule 248 (Null -> QUESTIONMARK .) - REQUIRED reduce using rule 248 (Null -> QUESTIONMARK .) - SERIALIZER reduce using rule 248 (Null -> QUESTIONMARK .) - SETLIKE reduce using rule 248 (Null -> QUESTIONMARK .) - SETTER reduce using rule 248 (Null -> QUESTIONMARK .) - STATIC reduce using rule 248 (Null -> QUESTIONMARK .) - STRINGIFIER reduce using rule 248 (Null -> QUESTIONMARK .) - TYPEDEF reduce using rule 248 (Null -> QUESTIONMARK .) - UNRESTRICTED reduce using rule 248 (Null -> QUESTIONMARK .) - COMMA reduce using rule 248 (Null -> QUESTIONMARK .) - LPAREN reduce using rule 248 (Null -> QUESTIONMARK .) - ELLIPSIS reduce using rule 248 (Null -> QUESTIONMARK .) - OR reduce using rule 248 (Null -> QUESTIONMARK .) - RPAREN reduce using rule 248 (Null -> QUESTIONMARK .) - - -state 149 - - (212) SingleType -> PROMISE LT . ReturnType GT - (250) ReturnType -> . Type - (251) ReturnType -> . VOID - (207) Type -> . SingleType - (208) Type -> . UnionType Null - (210) SingleType -> . DistinguishableType - (211) SingleType -> . ANY - (212) SingleType -> . PROMISE LT ReturnType GT - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - VOID shift and go to state 130 - ANY shift and go to state 90 - PROMISE shift and go to state 91 - LPAREN shift and go to state 92 - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - ReturnType shift and go to state 222 - Type shift and go to state 129 - SingleType shift and go to state 87 - UnionType shift and go to state 88 - DistinguishableType shift and go to state 89 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 150 - - (213) UnionType -> LPAREN UnionMemberType . OR UnionMemberType UnionMemberTypes RPAREN - - OR shift and go to state 223 - - -state 151 - - (214) UnionMemberType -> ExtendedAttributeList . DistinguishableType - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - DistinguishableType shift and go to state 224 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 152 - - (215) UnionMemberType -> UnionType . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 225 - -state 153 - - (218) DistinguishableType -> PrimitiveType Null . - - IDENTIFIER reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - GT reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - ASYNC reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - ATTRIBUTE reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - CALLBACK reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - CONST reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - CONSTRUCTOR reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - DELETER reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - DICTIONARY reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - ENUM reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - EXCEPTION reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - GETTER reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - INCLUDES reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - INHERIT reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - INTERFACE reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - ITERABLE reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - LEGACYCALLER reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - MAPLIKE reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - MIXIN reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - NAMESPACE reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - PARTIAL reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - READONLY reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - REQUIRED reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - SERIALIZER reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - SETLIKE reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - SETTER reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - STATIC reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - STRINGIFIER reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - TYPEDEF reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - UNRESTRICTED reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - COMMA reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - LPAREN reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - ELLIPSIS reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - OR reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - RPAREN reduce using rule 218 (DistinguishableType -> PrimitiveType Null .) - - -state 154 - - (219) DistinguishableType -> ARRAYBUFFER Null . - - IDENTIFIER reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - GT reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - ASYNC reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - ATTRIBUTE reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - CALLBACK reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - CONST reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - CONSTRUCTOR reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - DELETER reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - DICTIONARY reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - ENUM reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - EXCEPTION reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - GETTER reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - INCLUDES reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - INHERIT reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - INTERFACE reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - ITERABLE reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - LEGACYCALLER reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - MAPLIKE reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - MIXIN reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - NAMESPACE reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - PARTIAL reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - READONLY reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - REQUIRED reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - SERIALIZER reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - SETLIKE reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - SETTER reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - STATIC reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - STRINGIFIER reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - TYPEDEF reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - UNRESTRICTED reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - COMMA reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - LPAREN reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - ELLIPSIS reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - OR reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - RPAREN reduce using rule 219 (DistinguishableType -> ARRAYBUFFER Null .) - - -state 155 - - (220) DistinguishableType -> READABLESTREAM Null . - - IDENTIFIER reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - GT reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - ASYNC reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - ATTRIBUTE reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - CALLBACK reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - CONST reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - CONSTRUCTOR reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - DELETER reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - DICTIONARY reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - ENUM reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - EXCEPTION reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - GETTER reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - INCLUDES reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - INHERIT reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - INTERFACE reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - ITERABLE reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - LEGACYCALLER reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - MAPLIKE reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - MIXIN reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - NAMESPACE reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - PARTIAL reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - READONLY reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - REQUIRED reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - SERIALIZER reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - SETLIKE reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - SETTER reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - STATIC reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - STRINGIFIER reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - TYPEDEF reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - UNRESTRICTED reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - COMMA reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - LPAREN reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - ELLIPSIS reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - OR reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - RPAREN reduce using rule 220 (DistinguishableType -> READABLESTREAM Null .) - - -state 156 - - (221) DistinguishableType -> OBJECT Null . - - IDENTIFIER reduce using rule 221 (DistinguishableType -> OBJECT Null .) - GT reduce using rule 221 (DistinguishableType -> OBJECT Null .) - ASYNC reduce using rule 221 (DistinguishableType -> OBJECT Null .) - ATTRIBUTE reduce using rule 221 (DistinguishableType -> OBJECT Null .) - CALLBACK reduce using rule 221 (DistinguishableType -> OBJECT Null .) - CONST reduce using rule 221 (DistinguishableType -> OBJECT Null .) - CONSTRUCTOR reduce using rule 221 (DistinguishableType -> OBJECT Null .) - DELETER reduce using rule 221 (DistinguishableType -> OBJECT Null .) - DICTIONARY reduce using rule 221 (DistinguishableType -> OBJECT Null .) - ENUM reduce using rule 221 (DistinguishableType -> OBJECT Null .) - EXCEPTION reduce using rule 221 (DistinguishableType -> OBJECT Null .) - GETTER reduce using rule 221 (DistinguishableType -> OBJECT Null .) - INCLUDES reduce using rule 221 (DistinguishableType -> OBJECT Null .) - INHERIT reduce using rule 221 (DistinguishableType -> OBJECT Null .) - INTERFACE reduce using rule 221 (DistinguishableType -> OBJECT Null .) - ITERABLE reduce using rule 221 (DistinguishableType -> OBJECT Null .) - LEGACYCALLER reduce using rule 221 (DistinguishableType -> OBJECT Null .) - MAPLIKE reduce using rule 221 (DistinguishableType -> OBJECT Null .) - MIXIN reduce using rule 221 (DistinguishableType -> OBJECT Null .) - NAMESPACE reduce using rule 221 (DistinguishableType -> OBJECT Null .) - PARTIAL reduce using rule 221 (DistinguishableType -> OBJECT Null .) - READONLY reduce using rule 221 (DistinguishableType -> OBJECT Null .) - REQUIRED reduce using rule 221 (DistinguishableType -> OBJECT Null .) - SERIALIZER reduce using rule 221 (DistinguishableType -> OBJECT Null .) - SETLIKE reduce using rule 221 (DistinguishableType -> OBJECT Null .) - SETTER reduce using rule 221 (DistinguishableType -> OBJECT Null .) - STATIC reduce using rule 221 (DistinguishableType -> OBJECT Null .) - STRINGIFIER reduce using rule 221 (DistinguishableType -> OBJECT Null .) - TYPEDEF reduce using rule 221 (DistinguishableType -> OBJECT Null .) - UNRESTRICTED reduce using rule 221 (DistinguishableType -> OBJECT Null .) - COMMA reduce using rule 221 (DistinguishableType -> OBJECT Null .) - LPAREN reduce using rule 221 (DistinguishableType -> OBJECT Null .) - ELLIPSIS reduce using rule 221 (DistinguishableType -> OBJECT Null .) - OR reduce using rule 221 (DistinguishableType -> OBJECT Null .) - RPAREN reduce using rule 221 (DistinguishableType -> OBJECT Null .) - - -state 157 - - (222) DistinguishableType -> StringType Null . - - IDENTIFIER reduce using rule 222 (DistinguishableType -> StringType Null .) - GT reduce using rule 222 (DistinguishableType -> StringType Null .) - ASYNC reduce using rule 222 (DistinguishableType -> StringType Null .) - ATTRIBUTE reduce using rule 222 (DistinguishableType -> StringType Null .) - CALLBACK reduce using rule 222 (DistinguishableType -> StringType Null .) - CONST reduce using rule 222 (DistinguishableType -> StringType Null .) - CONSTRUCTOR reduce using rule 222 (DistinguishableType -> StringType Null .) - DELETER reduce using rule 222 (DistinguishableType -> StringType Null .) - DICTIONARY reduce using rule 222 (DistinguishableType -> StringType Null .) - ENUM reduce using rule 222 (DistinguishableType -> StringType Null .) - EXCEPTION reduce using rule 222 (DistinguishableType -> StringType Null .) - GETTER reduce using rule 222 (DistinguishableType -> StringType Null .) - INCLUDES reduce using rule 222 (DistinguishableType -> StringType Null .) - INHERIT reduce using rule 222 (DistinguishableType -> StringType Null .) - INTERFACE reduce using rule 222 (DistinguishableType -> StringType Null .) - ITERABLE reduce using rule 222 (DistinguishableType -> StringType Null .) - LEGACYCALLER reduce using rule 222 (DistinguishableType -> StringType Null .) - MAPLIKE reduce using rule 222 (DistinguishableType -> StringType Null .) - MIXIN reduce using rule 222 (DistinguishableType -> StringType Null .) - NAMESPACE reduce using rule 222 (DistinguishableType -> StringType Null .) - PARTIAL reduce using rule 222 (DistinguishableType -> StringType Null .) - READONLY reduce using rule 222 (DistinguishableType -> StringType Null .) - REQUIRED reduce using rule 222 (DistinguishableType -> StringType Null .) - SERIALIZER reduce using rule 222 (DistinguishableType -> StringType Null .) - SETLIKE reduce using rule 222 (DistinguishableType -> StringType Null .) - SETTER reduce using rule 222 (DistinguishableType -> StringType Null .) - STATIC reduce using rule 222 (DistinguishableType -> StringType Null .) - STRINGIFIER reduce using rule 222 (DistinguishableType -> StringType Null .) - TYPEDEF reduce using rule 222 (DistinguishableType -> StringType Null .) - UNRESTRICTED reduce using rule 222 (DistinguishableType -> StringType Null .) - COMMA reduce using rule 222 (DistinguishableType -> StringType Null .) - LPAREN reduce using rule 222 (DistinguishableType -> StringType Null .) - ELLIPSIS reduce using rule 222 (DistinguishableType -> StringType Null .) - OR reduce using rule 222 (DistinguishableType -> StringType Null .) - RPAREN reduce using rule 222 (DistinguishableType -> StringType Null .) - - -state 158 - - (223) DistinguishableType -> SEQUENCE LT . TypeWithExtendedAttributes GT Null - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 226 - ExtendedAttributeList shift and go to state 59 - -state 159 - - (224) DistinguishableType -> RECORD LT . StringType COMMA TypeWithExtendedAttributes GT Null - (236) StringType -> . BuiltinStringType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - - StringType shift and go to state 227 - BuiltinStringType shift and go to state 108 - -state 160 - - (225) DistinguishableType -> ScopedName Null . - - IDENTIFIER reduce using rule 225 (DistinguishableType -> ScopedName Null .) - GT reduce using rule 225 (DistinguishableType -> ScopedName Null .) - ASYNC reduce using rule 225 (DistinguishableType -> ScopedName Null .) - ATTRIBUTE reduce using rule 225 (DistinguishableType -> ScopedName Null .) - CALLBACK reduce using rule 225 (DistinguishableType -> ScopedName Null .) - CONST reduce using rule 225 (DistinguishableType -> ScopedName Null .) - CONSTRUCTOR reduce using rule 225 (DistinguishableType -> ScopedName Null .) - DELETER reduce using rule 225 (DistinguishableType -> ScopedName Null .) - DICTIONARY reduce using rule 225 (DistinguishableType -> ScopedName Null .) - ENUM reduce using rule 225 (DistinguishableType -> ScopedName Null .) - EXCEPTION reduce using rule 225 (DistinguishableType -> ScopedName Null .) - GETTER reduce using rule 225 (DistinguishableType -> ScopedName Null .) - INCLUDES reduce using rule 225 (DistinguishableType -> ScopedName Null .) - INHERIT reduce using rule 225 (DistinguishableType -> ScopedName Null .) - INTERFACE reduce using rule 225 (DistinguishableType -> ScopedName Null .) - ITERABLE reduce using rule 225 (DistinguishableType -> ScopedName Null .) - LEGACYCALLER reduce using rule 225 (DistinguishableType -> ScopedName Null .) - MAPLIKE reduce using rule 225 (DistinguishableType -> ScopedName Null .) - MIXIN reduce using rule 225 (DistinguishableType -> ScopedName Null .) - NAMESPACE reduce using rule 225 (DistinguishableType -> ScopedName Null .) - PARTIAL reduce using rule 225 (DistinguishableType -> ScopedName Null .) - READONLY reduce using rule 225 (DistinguishableType -> ScopedName Null .) - REQUIRED reduce using rule 225 (DistinguishableType -> ScopedName Null .) - SERIALIZER reduce using rule 225 (DistinguishableType -> ScopedName Null .) - SETLIKE reduce using rule 225 (DistinguishableType -> ScopedName Null .) - SETTER reduce using rule 225 (DistinguishableType -> ScopedName Null .) - STATIC reduce using rule 225 (DistinguishableType -> ScopedName Null .) - STRINGIFIER reduce using rule 225 (DistinguishableType -> ScopedName Null .) - TYPEDEF reduce using rule 225 (DistinguishableType -> ScopedName Null .) - UNRESTRICTED reduce using rule 225 (DistinguishableType -> ScopedName Null .) - COMMA reduce using rule 225 (DistinguishableType -> ScopedName Null .) - LPAREN reduce using rule 225 (DistinguishableType -> ScopedName Null .) - ELLIPSIS reduce using rule 225 (DistinguishableType -> ScopedName Null .) - OR reduce using rule 225 (DistinguishableType -> ScopedName Null .) - RPAREN reduce using rule 225 (DistinguishableType -> ScopedName Null .) - - -state 161 - - (233) PrimitiveType -> UNRESTRICTED FLOAT . - - QUESTIONMARK reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - IDENTIFIER reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - GT reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - ASYNC reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - ATTRIBUTE reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - CALLBACK reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - CONST reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - CONSTRUCTOR reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - DELETER reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - DICTIONARY reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - ENUM reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - EXCEPTION reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - GETTER reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - INCLUDES reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - INHERIT reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - INTERFACE reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - ITERABLE reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - LEGACYCALLER reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - MAPLIKE reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - MIXIN reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - NAMESPACE reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - PARTIAL reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - READONLY reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - REQUIRED reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - SERIALIZER reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - SETLIKE reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - SETTER reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - STATIC reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - STRINGIFIER reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - TYPEDEF reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - UNRESTRICTED reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - COMMA reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - LPAREN reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - ELLIPSIS reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - OR reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - RPAREN reduce using rule 233 (PrimitiveType -> UNRESTRICTED FLOAT .) - - -state 162 - - (235) PrimitiveType -> UNRESTRICTED DOUBLE . - - QUESTIONMARK reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - IDENTIFIER reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - GT reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - ASYNC reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - ATTRIBUTE reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - CALLBACK reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - CONST reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - CONSTRUCTOR reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - DELETER reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - DICTIONARY reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - ENUM reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - EXCEPTION reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - GETTER reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - INCLUDES reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - INHERIT reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - INTERFACE reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - ITERABLE reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - LEGACYCALLER reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - MAPLIKE reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - MIXIN reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - NAMESPACE reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - PARTIAL reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - READONLY reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - REQUIRED reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - SERIALIZER reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - SETLIKE reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - SETTER reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - STATIC reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - STRINGIFIER reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - TYPEDEF reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - UNRESTRICTED reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - COMMA reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - LPAREN reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - ELLIPSIS reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - OR reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - RPAREN reduce using rule 235 (PrimitiveType -> UNRESTRICTED DOUBLE .) - - -state 163 - - (242) UnsignedIntegerType -> UNSIGNED IntegerType . - - QUESTIONMARK reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - IDENTIFIER reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - GT reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - ASYNC reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - ATTRIBUTE reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - CALLBACK reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - CONST reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - CONSTRUCTOR reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - DELETER reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - DICTIONARY reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - ENUM reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - EXCEPTION reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - GETTER reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - INCLUDES reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - INHERIT reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - INTERFACE reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - ITERABLE reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - LEGACYCALLER reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - MAPLIKE reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - MIXIN reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - NAMESPACE reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - PARTIAL reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - READONLY reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - REQUIRED reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - SERIALIZER reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - SETLIKE reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - SETTER reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - STATIC reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - STRINGIFIER reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - TYPEDEF reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - UNRESTRICTED reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - COMMA reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - LPAREN reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - ELLIPSIS reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - OR reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - RPAREN reduce using rule 242 (UnsignedIntegerType -> UNSIGNED IntegerType .) - - -state 164 - - (246) OptionalLong -> LONG . - - QUESTIONMARK reduce using rule 246 (OptionalLong -> LONG .) - IDENTIFIER reduce using rule 246 (OptionalLong -> LONG .) - GT reduce using rule 246 (OptionalLong -> LONG .) - ASYNC reduce using rule 246 (OptionalLong -> LONG .) - ATTRIBUTE reduce using rule 246 (OptionalLong -> LONG .) - CALLBACK reduce using rule 246 (OptionalLong -> LONG .) - CONST reduce using rule 246 (OptionalLong -> LONG .) - CONSTRUCTOR reduce using rule 246 (OptionalLong -> LONG .) - DELETER reduce using rule 246 (OptionalLong -> LONG .) - DICTIONARY reduce using rule 246 (OptionalLong -> LONG .) - ENUM reduce using rule 246 (OptionalLong -> LONG .) - EXCEPTION reduce using rule 246 (OptionalLong -> LONG .) - GETTER reduce using rule 246 (OptionalLong -> LONG .) - INCLUDES reduce using rule 246 (OptionalLong -> LONG .) - INHERIT reduce using rule 246 (OptionalLong -> LONG .) - INTERFACE reduce using rule 246 (OptionalLong -> LONG .) - ITERABLE reduce using rule 246 (OptionalLong -> LONG .) - LEGACYCALLER reduce using rule 246 (OptionalLong -> LONG .) - MAPLIKE reduce using rule 246 (OptionalLong -> LONG .) - MIXIN reduce using rule 246 (OptionalLong -> LONG .) - NAMESPACE reduce using rule 246 (OptionalLong -> LONG .) - PARTIAL reduce using rule 246 (OptionalLong -> LONG .) - READONLY reduce using rule 246 (OptionalLong -> LONG .) - REQUIRED reduce using rule 246 (OptionalLong -> LONG .) - SERIALIZER reduce using rule 246 (OptionalLong -> LONG .) - SETLIKE reduce using rule 246 (OptionalLong -> LONG .) - SETTER reduce using rule 246 (OptionalLong -> LONG .) - STATIC reduce using rule 246 (OptionalLong -> LONG .) - STRINGIFIER reduce using rule 246 (OptionalLong -> LONG .) - TYPEDEF reduce using rule 246 (OptionalLong -> LONG .) - UNRESTRICTED reduce using rule 246 (OptionalLong -> LONG .) - COMMA reduce using rule 246 (OptionalLong -> LONG .) - LPAREN reduce using rule 246 (OptionalLong -> LONG .) - ELLIPSIS reduce using rule 246 (OptionalLong -> LONG .) - OR reduce using rule 246 (OptionalLong -> LONG .) - RPAREN reduce using rule 246 (OptionalLong -> LONG .) - - -state 165 - - (245) IntegerType -> LONG OptionalLong . - - QUESTIONMARK reduce using rule 245 (IntegerType -> LONG OptionalLong .) - IDENTIFIER reduce using rule 245 (IntegerType -> LONG OptionalLong .) - GT reduce using rule 245 (IntegerType -> LONG OptionalLong .) - ASYNC reduce using rule 245 (IntegerType -> LONG OptionalLong .) - ATTRIBUTE reduce using rule 245 (IntegerType -> LONG OptionalLong .) - CALLBACK reduce using rule 245 (IntegerType -> LONG OptionalLong .) - CONST reduce using rule 245 (IntegerType -> LONG OptionalLong .) - CONSTRUCTOR reduce using rule 245 (IntegerType -> LONG OptionalLong .) - DELETER reduce using rule 245 (IntegerType -> LONG OptionalLong .) - DICTIONARY reduce using rule 245 (IntegerType -> LONG OptionalLong .) - ENUM reduce using rule 245 (IntegerType -> LONG OptionalLong .) - EXCEPTION reduce using rule 245 (IntegerType -> LONG OptionalLong .) - GETTER reduce using rule 245 (IntegerType -> LONG OptionalLong .) - INCLUDES reduce using rule 245 (IntegerType -> LONG OptionalLong .) - INHERIT reduce using rule 245 (IntegerType -> LONG OptionalLong .) - INTERFACE reduce using rule 245 (IntegerType -> LONG OptionalLong .) - ITERABLE reduce using rule 245 (IntegerType -> LONG OptionalLong .) - LEGACYCALLER reduce using rule 245 (IntegerType -> LONG OptionalLong .) - MAPLIKE reduce using rule 245 (IntegerType -> LONG OptionalLong .) - MIXIN reduce using rule 245 (IntegerType -> LONG OptionalLong .) - NAMESPACE reduce using rule 245 (IntegerType -> LONG OptionalLong .) - PARTIAL reduce using rule 245 (IntegerType -> LONG OptionalLong .) - READONLY reduce using rule 245 (IntegerType -> LONG OptionalLong .) - REQUIRED reduce using rule 245 (IntegerType -> LONG OptionalLong .) - SERIALIZER reduce using rule 245 (IntegerType -> LONG OptionalLong .) - SETLIKE reduce using rule 245 (IntegerType -> LONG OptionalLong .) - SETTER reduce using rule 245 (IntegerType -> LONG OptionalLong .) - STATIC reduce using rule 245 (IntegerType -> LONG OptionalLong .) - STRINGIFIER reduce using rule 245 (IntegerType -> LONG OptionalLong .) - TYPEDEF reduce using rule 245 (IntegerType -> LONG OptionalLong .) - UNRESTRICTED reduce using rule 245 (IntegerType -> LONG OptionalLong .) - COMMA reduce using rule 245 (IntegerType -> LONG OptionalLong .) - LPAREN reduce using rule 245 (IntegerType -> LONG OptionalLong .) - ELLIPSIS reduce using rule 245 (IntegerType -> LONG OptionalLong .) - OR reduce using rule 245 (IntegerType -> LONG OptionalLong .) - RPAREN reduce using rule 245 (IntegerType -> LONG OptionalLong .) - - -state 166 - - (72) IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON . - - LBRACKET reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - CALLBACK reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - INTERFACE reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - NAMESPACE reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - PARTIAL reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - DICTIONARY reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - EXCEPTION reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - ENUM reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - TYPEDEF reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - SCOPE reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - IDENTIFIER reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - $end reduce using rule 72 (IncludesStatement -> ScopedName INCLUDES ScopedName SEMICOLON .) - - -state 167 - - (164) ExtendedAttributes -> COMMA ExtendedAttribute ExtendedAttributes . - - RBRACKET reduce using rule 164 (ExtendedAttributes -> COMMA ExtendedAttribute ExtendedAttributes .) - - -state 168 - - (259) ExtendedAttributeArgList -> IDENTIFIER LPAREN ArgumentList RPAREN . - - COMMA reduce using rule 259 (ExtendedAttributeArgList -> IDENTIFIER LPAREN ArgumentList RPAREN .) - RBRACKET reduce using rule 259 (ExtendedAttributeArgList -> IDENTIFIER LPAREN ArgumentList RPAREN .) - - -state 169 - - (110) ArgumentList -> Argument Arguments . - - RPAREN reduce using rule 110 (ArgumentList -> Argument Arguments .) - - -state 170 - - (112) Arguments -> COMMA . Argument Arguments - (114) Argument -> . ExtendedAttributeList ArgumentRest - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - OPTIONAL reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - Argument shift and go to state 228 - ExtendedAttributeList shift and go to state 124 - -state 171 - - (114) Argument -> ExtendedAttributeList ArgumentRest . - - COMMA reduce using rule 114 (Argument -> ExtendedAttributeList ArgumentRest .) - RPAREN reduce using rule 114 (Argument -> ExtendedAttributeList ArgumentRest .) - - -state 172 - - (115) ArgumentRest -> OPTIONAL . TypeWithExtendedAttributes ArgumentName Default - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 229 - ExtendedAttributeList shift and go to state 59 - -state 173 - - (116) ArgumentRest -> Type . Ellipsis ArgumentName - (151) Ellipsis -> . ELLIPSIS - (152) Ellipsis -> . - - ELLIPSIS shift and go to state 231 - IDENTIFIER reduce using rule 152 (Ellipsis -> .) - ASYNC reduce using rule 152 (Ellipsis -> .) - ATTRIBUTE reduce using rule 152 (Ellipsis -> .) - CALLBACK reduce using rule 152 (Ellipsis -> .) - CONST reduce using rule 152 (Ellipsis -> .) - CONSTRUCTOR reduce using rule 152 (Ellipsis -> .) - DELETER reduce using rule 152 (Ellipsis -> .) - DICTIONARY reduce using rule 152 (Ellipsis -> .) - ENUM reduce using rule 152 (Ellipsis -> .) - EXCEPTION reduce using rule 152 (Ellipsis -> .) - GETTER reduce using rule 152 (Ellipsis -> .) - INCLUDES reduce using rule 152 (Ellipsis -> .) - INHERIT reduce using rule 152 (Ellipsis -> .) - INTERFACE reduce using rule 152 (Ellipsis -> .) - ITERABLE reduce using rule 152 (Ellipsis -> .) - LEGACYCALLER reduce using rule 152 (Ellipsis -> .) - MAPLIKE reduce using rule 152 (Ellipsis -> .) - MIXIN reduce using rule 152 (Ellipsis -> .) - NAMESPACE reduce using rule 152 (Ellipsis -> .) - PARTIAL reduce using rule 152 (Ellipsis -> .) - READONLY reduce using rule 152 (Ellipsis -> .) - REQUIRED reduce using rule 152 (Ellipsis -> .) - SERIALIZER reduce using rule 152 (Ellipsis -> .) - SETLIKE reduce using rule 152 (Ellipsis -> .) - SETTER reduce using rule 152 (Ellipsis -> .) - STATIC reduce using rule 152 (Ellipsis -> .) - STRINGIFIER reduce using rule 152 (Ellipsis -> .) - TYPEDEF reduce using rule 152 (Ellipsis -> .) - UNRESTRICTED reduce using rule 152 (Ellipsis -> .) - - Ellipsis shift and go to state 230 - -state 174 - - (262) ExtendedAttributeNamedArgList -> IDENTIFIER EQUALS IDENTIFIER LPAREN . ArgumentList RPAREN - (110) ArgumentList -> . Argument Arguments - (111) ArgumentList -> . - (114) Argument -> . ExtendedAttributeList ArgumentRest - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RPAREN reduce using rule 111 (ArgumentList -> .) - LBRACKET shift and go to state 3 - OPTIONAL reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ArgumentList shift and go to state 232 - Argument shift and go to state 123 - ExtendedAttributeList shift and go to state 124 - -state 175 - - (264) IdentifierList -> IDENTIFIER . Identifiers - (265) Identifiers -> . COMMA IDENTIFIER Identifiers - (266) Identifiers -> . - - COMMA shift and go to state 234 - RPAREN reduce using rule 266 (Identifiers -> .) - - Identifiers shift and go to state 233 - -state 176 - - (263) ExtendedAttributeIdentList -> IDENTIFIER EQUALS LPAREN IdentifierList . RPAREN - - RPAREN shift and go to state 235 - - -state 177 - - (67) CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN . ArgumentList RPAREN SEMICOLON - (110) ArgumentList -> . Argument Arguments - (111) ArgumentList -> . - (114) Argument -> . ExtendedAttributeList ArgumentRest - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RPAREN reduce using rule 111 (ArgumentList -> .) - LBRACKET shift and go to state 3 - OPTIONAL reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ArgumentList shift and go to state 236 - Argument shift and go to state 123 - ExtendedAttributeList shift and go to state 124 - -state 178 - - (68) CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType . LPAREN ArgumentList RPAREN SEMICOLON - - LPAREN shift and go to state 237 - - -state 179 - - (19) InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 238 - - -state 180 - - (21) MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 239 - - -state 181 - - (45) MixinMembers -> ExtendedAttributeList . MixinMember MixinMembers - (46) MixinMember -> . Const - (47) MixinMember -> . Attribute - (48) MixinMember -> . Operation - (73) Const -> . CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON - (89) Attribute -> . Qualifier AttributeRest - (90) Attribute -> . INHERIT AttributeRest - (91) Attribute -> . AttributeRest - (95) Operation -> . Qualifiers OperationRest - (96) Operation -> . STRINGIFIER SEMICOLON - (97) Qualifier -> . STATIC - (98) Qualifier -> . STRINGIFIER - (92) AttributeRest -> . ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON - (99) Qualifiers -> . Qualifier - (100) Qualifiers -> . Specials - (93) ReadOnly -> . READONLY - (94) ReadOnly -> . - (101) Specials -> . Special Specials - (102) Specials -> . - (103) Special -> . GETTER - (104) Special -> . SETTER - (105) Special -> . DELETER - (106) Special -> . LEGACYCALLER - - CONST shift and go to state 189 - INHERIT shift and go to state 197 - STRINGIFIER shift and go to state 201 - STATIC shift and go to state 202 - READONLY shift and go to state 203 - ATTRIBUTE reduce using rule 94 (ReadOnly -> .) - VOID reduce using rule 102 (Specials -> .) - ANY reduce using rule 102 (Specials -> .) - PROMISE reduce using rule 102 (Specials -> .) - LPAREN reduce using rule 102 (Specials -> .) - ARRAYBUFFER reduce using rule 102 (Specials -> .) - READABLESTREAM reduce using rule 102 (Specials -> .) - OBJECT reduce using rule 102 (Specials -> .) - SEQUENCE reduce using rule 102 (Specials -> .) - RECORD reduce using rule 102 (Specials -> .) - BOOLEAN reduce using rule 102 (Specials -> .) - BYTE reduce using rule 102 (Specials -> .) - OCTET reduce using rule 102 (Specials -> .) - FLOAT reduce using rule 102 (Specials -> .) - UNRESTRICTED reduce using rule 102 (Specials -> .) - DOUBLE reduce using rule 102 (Specials -> .) - UNSIGNED reduce using rule 102 (Specials -> .) - DOMSTRING reduce using rule 102 (Specials -> .) - BYTESTRING reduce using rule 102 (Specials -> .) - USVSTRING reduce using rule 102 (Specials -> .) - UTF8STRING reduce using rule 102 (Specials -> .) - JSSTRING reduce using rule 102 (Specials -> .) - SCOPE reduce using rule 102 (Specials -> .) - IDENTIFIER reduce using rule 102 (Specials -> .) - SHORT reduce using rule 102 (Specials -> .) - LONG reduce using rule 102 (Specials -> .) - GETTER shift and go to state 206 - SETTER shift and go to state 207 - DELETER shift and go to state 208 - LEGACYCALLER shift and go to state 209 - - MixinMember shift and go to state 240 - Const shift and go to state 241 - Attribute shift and go to state 242 - Operation shift and go to state 243 - Qualifier shift and go to state 195 - AttributeRest shift and go to state 196 - Qualifiers shift and go to state 200 - ReadOnly shift and go to state 244 - Specials shift and go to state 204 - Special shift and go to state 205 - -state 182 - - (22) Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 245 - - -state 183 - - (35) InterfaceMembers -> ExtendedAttributeList InterfaceMember . InterfaceMembers - (35) InterfaceMembers -> . ExtendedAttributeList InterfaceMember InterfaceMembers - (36) InterfaceMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 36 (InterfaceMembers -> .) - LBRACKET shift and go to state 3 - CONSTRUCTOR reduce using rule 157 (ExtendedAttributeList -> .) - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - ITERABLE reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - MAPLIKE reduce using rule 157 (ExtendedAttributeList -> .) - SETLIKE reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ExtendedAttributeList shift and go to state 136 - InterfaceMembers shift and go to state 246 - -state 184 - - (37) InterfaceMember -> PartialInterfaceMember . - - LBRACKET reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - CONSTRUCTOR reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - CONST reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - INHERIT reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - ITERABLE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - STRINGIFIER reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - STATIC reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - READONLY reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - GETTER reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - SETTER reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - DELETER reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - LEGACYCALLER reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - MAPLIKE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - SETLIKE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - ATTRIBUTE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - VOID reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - ANY reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - PROMISE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - LPAREN reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - ARRAYBUFFER reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - READABLESTREAM reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - OBJECT reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - SEQUENCE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - RECORD reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - BOOLEAN reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - BYTE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - OCTET reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - FLOAT reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - UNRESTRICTED reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - DOUBLE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - UNSIGNED reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - DOMSTRING reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - BYTESTRING reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - USVSTRING reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - UTF8STRING reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - JSSTRING reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - SCOPE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - IDENTIFIER reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - SHORT reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - LONG reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - RBRACE reduce using rule 37 (InterfaceMember -> PartialInterfaceMember .) - - -state 185 - - (38) InterfaceMember -> Constructor . - - LBRACKET reduce using rule 38 (InterfaceMember -> Constructor .) - CONSTRUCTOR reduce using rule 38 (InterfaceMember -> Constructor .) - CONST reduce using rule 38 (InterfaceMember -> Constructor .) - INHERIT reduce using rule 38 (InterfaceMember -> Constructor .) - ITERABLE reduce using rule 38 (InterfaceMember -> Constructor .) - STRINGIFIER reduce using rule 38 (InterfaceMember -> Constructor .) - STATIC reduce using rule 38 (InterfaceMember -> Constructor .) - READONLY reduce using rule 38 (InterfaceMember -> Constructor .) - GETTER reduce using rule 38 (InterfaceMember -> Constructor .) - SETTER reduce using rule 38 (InterfaceMember -> Constructor .) - DELETER reduce using rule 38 (InterfaceMember -> Constructor .) - LEGACYCALLER reduce using rule 38 (InterfaceMember -> Constructor .) - MAPLIKE reduce using rule 38 (InterfaceMember -> Constructor .) - SETLIKE reduce using rule 38 (InterfaceMember -> Constructor .) - ATTRIBUTE reduce using rule 38 (InterfaceMember -> Constructor .) - VOID reduce using rule 38 (InterfaceMember -> Constructor .) - ANY reduce using rule 38 (InterfaceMember -> Constructor .) - PROMISE reduce using rule 38 (InterfaceMember -> Constructor .) - LPAREN reduce using rule 38 (InterfaceMember -> Constructor .) - ARRAYBUFFER reduce using rule 38 (InterfaceMember -> Constructor .) - READABLESTREAM reduce using rule 38 (InterfaceMember -> Constructor .) - OBJECT reduce using rule 38 (InterfaceMember -> Constructor .) - SEQUENCE reduce using rule 38 (InterfaceMember -> Constructor .) - RECORD reduce using rule 38 (InterfaceMember -> Constructor .) - BOOLEAN reduce using rule 38 (InterfaceMember -> Constructor .) - BYTE reduce using rule 38 (InterfaceMember -> Constructor .) - OCTET reduce using rule 38 (InterfaceMember -> Constructor .) - FLOAT reduce using rule 38 (InterfaceMember -> Constructor .) - UNRESTRICTED reduce using rule 38 (InterfaceMember -> Constructor .) - DOUBLE reduce using rule 38 (InterfaceMember -> Constructor .) - UNSIGNED reduce using rule 38 (InterfaceMember -> Constructor .) - DOMSTRING reduce using rule 38 (InterfaceMember -> Constructor .) - BYTESTRING reduce using rule 38 (InterfaceMember -> Constructor .) - USVSTRING reduce using rule 38 (InterfaceMember -> Constructor .) - UTF8STRING reduce using rule 38 (InterfaceMember -> Constructor .) - JSSTRING reduce using rule 38 (InterfaceMember -> Constructor .) - SCOPE reduce using rule 38 (InterfaceMember -> Constructor .) - IDENTIFIER reduce using rule 38 (InterfaceMember -> Constructor .) - SHORT reduce using rule 38 (InterfaceMember -> Constructor .) - LONG reduce using rule 38 (InterfaceMember -> Constructor .) - RBRACE reduce using rule 38 (InterfaceMember -> Constructor .) - - -state 186 - - (42) PartialInterfaceMember -> Const . - - LBRACKET reduce using rule 42 (PartialInterfaceMember -> Const .) - CONSTRUCTOR reduce using rule 42 (PartialInterfaceMember -> Const .) - CONST reduce using rule 42 (PartialInterfaceMember -> Const .) - INHERIT reduce using rule 42 (PartialInterfaceMember -> Const .) - ITERABLE reduce using rule 42 (PartialInterfaceMember -> Const .) - STRINGIFIER reduce using rule 42 (PartialInterfaceMember -> Const .) - STATIC reduce using rule 42 (PartialInterfaceMember -> Const .) - READONLY reduce using rule 42 (PartialInterfaceMember -> Const .) - GETTER reduce using rule 42 (PartialInterfaceMember -> Const .) - SETTER reduce using rule 42 (PartialInterfaceMember -> Const .) - DELETER reduce using rule 42 (PartialInterfaceMember -> Const .) - LEGACYCALLER reduce using rule 42 (PartialInterfaceMember -> Const .) - MAPLIKE reduce using rule 42 (PartialInterfaceMember -> Const .) - SETLIKE reduce using rule 42 (PartialInterfaceMember -> Const .) - ATTRIBUTE reduce using rule 42 (PartialInterfaceMember -> Const .) - VOID reduce using rule 42 (PartialInterfaceMember -> Const .) - ANY reduce using rule 42 (PartialInterfaceMember -> Const .) - PROMISE reduce using rule 42 (PartialInterfaceMember -> Const .) - LPAREN reduce using rule 42 (PartialInterfaceMember -> Const .) - ARRAYBUFFER reduce using rule 42 (PartialInterfaceMember -> Const .) - READABLESTREAM reduce using rule 42 (PartialInterfaceMember -> Const .) - OBJECT reduce using rule 42 (PartialInterfaceMember -> Const .) - SEQUENCE reduce using rule 42 (PartialInterfaceMember -> Const .) - RECORD reduce using rule 42 (PartialInterfaceMember -> Const .) - BOOLEAN reduce using rule 42 (PartialInterfaceMember -> Const .) - BYTE reduce using rule 42 (PartialInterfaceMember -> Const .) - OCTET reduce using rule 42 (PartialInterfaceMember -> Const .) - FLOAT reduce using rule 42 (PartialInterfaceMember -> Const .) - UNRESTRICTED reduce using rule 42 (PartialInterfaceMember -> Const .) - DOUBLE reduce using rule 42 (PartialInterfaceMember -> Const .) - UNSIGNED reduce using rule 42 (PartialInterfaceMember -> Const .) - DOMSTRING reduce using rule 42 (PartialInterfaceMember -> Const .) - BYTESTRING reduce using rule 42 (PartialInterfaceMember -> Const .) - USVSTRING reduce using rule 42 (PartialInterfaceMember -> Const .) - UTF8STRING reduce using rule 42 (PartialInterfaceMember -> Const .) - JSSTRING reduce using rule 42 (PartialInterfaceMember -> Const .) - SCOPE reduce using rule 42 (PartialInterfaceMember -> Const .) - IDENTIFIER reduce using rule 42 (PartialInterfaceMember -> Const .) - SHORT reduce using rule 42 (PartialInterfaceMember -> Const .) - LONG reduce using rule 42 (PartialInterfaceMember -> Const .) - RBRACE reduce using rule 42 (PartialInterfaceMember -> Const .) - - -state 187 - - (43) PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable . - - LBRACKET reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - CONSTRUCTOR reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - CONST reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - INHERIT reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - ITERABLE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - STRINGIFIER reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - STATIC reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - READONLY reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - GETTER reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - SETTER reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - DELETER reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - LEGACYCALLER reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - MAPLIKE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - SETLIKE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - ATTRIBUTE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - VOID reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - ANY reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - PROMISE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - LPAREN reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - ARRAYBUFFER reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - READABLESTREAM reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - OBJECT reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - SEQUENCE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - RECORD reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - BOOLEAN reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - BYTE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - OCTET reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - FLOAT reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - UNRESTRICTED reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - DOUBLE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - UNSIGNED reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - DOMSTRING reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - BYTESTRING reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - USVSTRING reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - UTF8STRING reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - JSSTRING reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - SCOPE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - IDENTIFIER reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - SHORT reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - LONG reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - RBRACE reduce using rule 43 (PartialInterfaceMember -> AttributeOrOperationOrMaplikeOrSetlikeOrIterable .) - - -state 188 - - (39) Constructor -> CONSTRUCTOR . LPAREN ArgumentList RPAREN SEMICOLON - - LPAREN shift and go to state 247 - - -state 189 - - (73) Const -> CONST . ConstType IDENTIFIER EQUALS ConstValue SEMICOLON - (226) ConstType -> . PrimitiveType - (227) ConstType -> . IDENTIFIER - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - IDENTIFIER shift and go to state 249 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - ConstType shift and go to state 248 - PrimitiveType shift and go to state 250 - UnsignedIntegerType shift and go to state 101 - IntegerType shift and go to state 110 - -state 190 - - (80) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute . - - LBRACKET reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - CONSTRUCTOR reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - CONST reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - INHERIT reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - ITERABLE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - STRINGIFIER reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - STATIC reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - READONLY reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - GETTER reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - SETTER reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - DELETER reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - LEGACYCALLER reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - MAPLIKE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - SETLIKE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - ATTRIBUTE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - VOID reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - ANY reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - PROMISE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - LPAREN reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - ARRAYBUFFER reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - READABLESTREAM reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - OBJECT reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - SEQUENCE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - RECORD reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - BOOLEAN reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - BYTE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - OCTET reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - FLOAT reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - UNRESTRICTED reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - DOUBLE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - UNSIGNED reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - DOMSTRING reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - BYTESTRING reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - USVSTRING reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - UTF8STRING reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - JSSTRING reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - SCOPE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - IDENTIFIER reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - SHORT reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - LONG reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - RBRACE reduce using rule 80 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Attribute .) - - -state 191 - - (81) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike . - - LBRACKET reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - CONSTRUCTOR reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - CONST reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - INHERIT reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - ITERABLE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - STRINGIFIER reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - STATIC reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - READONLY reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - GETTER reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - SETTER reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - DELETER reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - LEGACYCALLER reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - MAPLIKE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - SETLIKE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - ATTRIBUTE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - VOID reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - ANY reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - PROMISE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - LPAREN reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - ARRAYBUFFER reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - READABLESTREAM reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - OBJECT reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - SEQUENCE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - RECORD reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - BOOLEAN reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - BYTE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - OCTET reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - FLOAT reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - UNRESTRICTED reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - DOUBLE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - UNSIGNED reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - DOMSTRING reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - BYTESTRING reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - USVSTRING reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - UTF8STRING reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - JSSTRING reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - SCOPE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - IDENTIFIER reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - SHORT reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - LONG reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - RBRACE reduce using rule 81 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Maplike .) - - -state 192 - - (82) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike . - - LBRACKET reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - CONSTRUCTOR reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - CONST reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - INHERIT reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - ITERABLE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - STRINGIFIER reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - STATIC reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - READONLY reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - GETTER reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - SETTER reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - DELETER reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - LEGACYCALLER reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - MAPLIKE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - SETLIKE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - ATTRIBUTE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - VOID reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - ANY reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - PROMISE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - LPAREN reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - ARRAYBUFFER reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - READABLESTREAM reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - OBJECT reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - SEQUENCE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - RECORD reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - BOOLEAN reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - BYTE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - OCTET reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - FLOAT reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - UNRESTRICTED reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - DOUBLE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - UNSIGNED reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - DOMSTRING reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - BYTESTRING reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - USVSTRING reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - UTF8STRING reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - JSSTRING reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - SCOPE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - IDENTIFIER reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - SHORT reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - LONG reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - RBRACE reduce using rule 82 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Setlike .) - - -state 193 - - (83) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable . - - LBRACKET reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - CONSTRUCTOR reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - CONST reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - INHERIT reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - ITERABLE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - STRINGIFIER reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - STATIC reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - READONLY reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - GETTER reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - SETTER reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - DELETER reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - LEGACYCALLER reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - MAPLIKE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - SETLIKE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - ATTRIBUTE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - VOID reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - ANY reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - PROMISE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - LPAREN reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - ARRAYBUFFER reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - READABLESTREAM reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - OBJECT reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - SEQUENCE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - RECORD reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - BOOLEAN reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - BYTE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - OCTET reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - FLOAT reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - UNRESTRICTED reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - DOUBLE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - UNSIGNED reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - DOMSTRING reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - BYTESTRING reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - USVSTRING reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - UTF8STRING reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - JSSTRING reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - SCOPE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - IDENTIFIER reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - SHORT reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - LONG reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - RBRACE reduce using rule 83 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Iterable .) - - -state 194 - - (84) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation . - - LBRACKET reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - CONSTRUCTOR reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - CONST reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - INHERIT reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - ITERABLE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - STRINGIFIER reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - STATIC reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - READONLY reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - GETTER reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - SETTER reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - DELETER reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - LEGACYCALLER reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - MAPLIKE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - SETLIKE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - ATTRIBUTE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - VOID reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - ANY reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - PROMISE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - LPAREN reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - ARRAYBUFFER reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - READABLESTREAM reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - OBJECT reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - SEQUENCE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - RECORD reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - BOOLEAN reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - BYTE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - OCTET reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - FLOAT reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - UNRESTRICTED reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - DOUBLE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - UNSIGNED reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - DOMSTRING reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - BYTESTRING reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - USVSTRING reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - UTF8STRING reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - JSSTRING reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - SCOPE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - IDENTIFIER reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - SHORT reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - LONG reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - RBRACE reduce using rule 84 (AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> Operation .) - - -state 195 - - (89) Attribute -> Qualifier . AttributeRest - (99) Qualifiers -> Qualifier . - (92) AttributeRest -> . ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON - (93) ReadOnly -> . READONLY - (94) ReadOnly -> . - - VOID reduce using rule 99 (Qualifiers -> Qualifier .) - ANY reduce using rule 99 (Qualifiers -> Qualifier .) - PROMISE reduce using rule 99 (Qualifiers -> Qualifier .) - LPAREN reduce using rule 99 (Qualifiers -> Qualifier .) - ARRAYBUFFER reduce using rule 99 (Qualifiers -> Qualifier .) - READABLESTREAM reduce using rule 99 (Qualifiers -> Qualifier .) - OBJECT reduce using rule 99 (Qualifiers -> Qualifier .) - SEQUENCE reduce using rule 99 (Qualifiers -> Qualifier .) - RECORD reduce using rule 99 (Qualifiers -> Qualifier .) - BOOLEAN reduce using rule 99 (Qualifiers -> Qualifier .) - BYTE reduce using rule 99 (Qualifiers -> Qualifier .) - OCTET reduce using rule 99 (Qualifiers -> Qualifier .) - FLOAT reduce using rule 99 (Qualifiers -> Qualifier .) - UNRESTRICTED reduce using rule 99 (Qualifiers -> Qualifier .) - DOUBLE reduce using rule 99 (Qualifiers -> Qualifier .) - UNSIGNED reduce using rule 99 (Qualifiers -> Qualifier .) - DOMSTRING reduce using rule 99 (Qualifiers -> Qualifier .) - BYTESTRING reduce using rule 99 (Qualifiers -> Qualifier .) - USVSTRING reduce using rule 99 (Qualifiers -> Qualifier .) - UTF8STRING reduce using rule 99 (Qualifiers -> Qualifier .) - JSSTRING reduce using rule 99 (Qualifiers -> Qualifier .) - SCOPE reduce using rule 99 (Qualifiers -> Qualifier .) - IDENTIFIER reduce using rule 99 (Qualifiers -> Qualifier .) - SHORT reduce using rule 99 (Qualifiers -> Qualifier .) - LONG reduce using rule 99 (Qualifiers -> Qualifier .) - READONLY shift and go to state 203 - ATTRIBUTE reduce using rule 94 (ReadOnly -> .) - - AttributeRest shift and go to state 251 - ReadOnly shift and go to state 244 - -state 196 - - (91) Attribute -> AttributeRest . - - LBRACKET reduce using rule 91 (Attribute -> AttributeRest .) - CONSTRUCTOR reduce using rule 91 (Attribute -> AttributeRest .) - CONST reduce using rule 91 (Attribute -> AttributeRest .) - INHERIT reduce using rule 91 (Attribute -> AttributeRest .) - ITERABLE reduce using rule 91 (Attribute -> AttributeRest .) - STRINGIFIER reduce using rule 91 (Attribute -> AttributeRest .) - STATIC reduce using rule 91 (Attribute -> AttributeRest .) - READONLY reduce using rule 91 (Attribute -> AttributeRest .) - GETTER reduce using rule 91 (Attribute -> AttributeRest .) - SETTER reduce using rule 91 (Attribute -> AttributeRest .) - DELETER reduce using rule 91 (Attribute -> AttributeRest .) - LEGACYCALLER reduce using rule 91 (Attribute -> AttributeRest .) - MAPLIKE reduce using rule 91 (Attribute -> AttributeRest .) - SETLIKE reduce using rule 91 (Attribute -> AttributeRest .) - ATTRIBUTE reduce using rule 91 (Attribute -> AttributeRest .) - VOID reduce using rule 91 (Attribute -> AttributeRest .) - ANY reduce using rule 91 (Attribute -> AttributeRest .) - PROMISE reduce using rule 91 (Attribute -> AttributeRest .) - LPAREN reduce using rule 91 (Attribute -> AttributeRest .) - ARRAYBUFFER reduce using rule 91 (Attribute -> AttributeRest .) - READABLESTREAM reduce using rule 91 (Attribute -> AttributeRest .) - OBJECT reduce using rule 91 (Attribute -> AttributeRest .) - SEQUENCE reduce using rule 91 (Attribute -> AttributeRest .) - RECORD reduce using rule 91 (Attribute -> AttributeRest .) - BOOLEAN reduce using rule 91 (Attribute -> AttributeRest .) - BYTE reduce using rule 91 (Attribute -> AttributeRest .) - OCTET reduce using rule 91 (Attribute -> AttributeRest .) - FLOAT reduce using rule 91 (Attribute -> AttributeRest .) - UNRESTRICTED reduce using rule 91 (Attribute -> AttributeRest .) - DOUBLE reduce using rule 91 (Attribute -> AttributeRest .) - UNSIGNED reduce using rule 91 (Attribute -> AttributeRest .) - DOMSTRING reduce using rule 91 (Attribute -> AttributeRest .) - BYTESTRING reduce using rule 91 (Attribute -> AttributeRest .) - USVSTRING reduce using rule 91 (Attribute -> AttributeRest .) - UTF8STRING reduce using rule 91 (Attribute -> AttributeRest .) - JSSTRING reduce using rule 91 (Attribute -> AttributeRest .) - SCOPE reduce using rule 91 (Attribute -> AttributeRest .) - IDENTIFIER reduce using rule 91 (Attribute -> AttributeRest .) - SHORT reduce using rule 91 (Attribute -> AttributeRest .) - LONG reduce using rule 91 (Attribute -> AttributeRest .) - RBRACE reduce using rule 91 (Attribute -> AttributeRest .) - - -state 197 - - (90) Attribute -> INHERIT . AttributeRest - (92) AttributeRest -> . ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON - (93) ReadOnly -> . READONLY - (94) ReadOnly -> . - - READONLY shift and go to state 203 - ATTRIBUTE reduce using rule 94 (ReadOnly -> .) - - AttributeRest shift and go to state 252 - ReadOnly shift and go to state 244 - -state 198 - - (88) Maplike -> ReadOnly . MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - (87) Setlike -> ReadOnly . SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON - (92) AttributeRest -> ReadOnly . ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON - - MAPLIKE shift and go to state 253 - SETLIKE shift and go to state 254 - ATTRIBUTE shift and go to state 255 - - -state 199 - - (85) Iterable -> ITERABLE . LT TypeWithExtendedAttributes GT SEMICOLON - (86) Iterable -> ITERABLE . LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - - LT shift and go to state 256 - - -state 200 - - (95) Operation -> Qualifiers . OperationRest - (107) OperationRest -> . ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON - (250) ReturnType -> . Type - (251) ReturnType -> . VOID - (207) Type -> . SingleType - (208) Type -> . UnionType Null - (210) SingleType -> . DistinguishableType - (211) SingleType -> . ANY - (212) SingleType -> . PROMISE LT ReturnType GT - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - VOID shift and go to state 130 - ANY shift and go to state 90 - PROMISE shift and go to state 91 - LPAREN shift and go to state 92 - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - OperationRest shift and go to state 257 - ReturnType shift and go to state 258 - Type shift and go to state 129 - SingleType shift and go to state 87 - UnionType shift and go to state 88 - DistinguishableType shift and go to state 89 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 201 - - (96) Operation -> STRINGIFIER . SEMICOLON - (98) Qualifier -> STRINGIFIER . - - SEMICOLON shift and go to state 259 - READONLY reduce using rule 98 (Qualifier -> STRINGIFIER .) - ATTRIBUTE reduce using rule 98 (Qualifier -> STRINGIFIER .) - VOID reduce using rule 98 (Qualifier -> STRINGIFIER .) - ANY reduce using rule 98 (Qualifier -> STRINGIFIER .) - PROMISE reduce using rule 98 (Qualifier -> STRINGIFIER .) - LPAREN reduce using rule 98 (Qualifier -> STRINGIFIER .) - ARRAYBUFFER reduce using rule 98 (Qualifier -> STRINGIFIER .) - READABLESTREAM reduce using rule 98 (Qualifier -> STRINGIFIER .) - OBJECT reduce using rule 98 (Qualifier -> STRINGIFIER .) - SEQUENCE reduce using rule 98 (Qualifier -> STRINGIFIER .) - RECORD reduce using rule 98 (Qualifier -> STRINGIFIER .) - BOOLEAN reduce using rule 98 (Qualifier -> STRINGIFIER .) - BYTE reduce using rule 98 (Qualifier -> STRINGIFIER .) - OCTET reduce using rule 98 (Qualifier -> STRINGIFIER .) - FLOAT reduce using rule 98 (Qualifier -> STRINGIFIER .) - UNRESTRICTED reduce using rule 98 (Qualifier -> STRINGIFIER .) - DOUBLE reduce using rule 98 (Qualifier -> STRINGIFIER .) - UNSIGNED reduce using rule 98 (Qualifier -> STRINGIFIER .) - DOMSTRING reduce using rule 98 (Qualifier -> STRINGIFIER .) - BYTESTRING reduce using rule 98 (Qualifier -> STRINGIFIER .) - USVSTRING reduce using rule 98 (Qualifier -> STRINGIFIER .) - UTF8STRING reduce using rule 98 (Qualifier -> STRINGIFIER .) - JSSTRING reduce using rule 98 (Qualifier -> STRINGIFIER .) - SCOPE reduce using rule 98 (Qualifier -> STRINGIFIER .) - IDENTIFIER reduce using rule 98 (Qualifier -> STRINGIFIER .) - SHORT reduce using rule 98 (Qualifier -> STRINGIFIER .) - LONG reduce using rule 98 (Qualifier -> STRINGIFIER .) - - -state 202 - - (97) Qualifier -> STATIC . - - READONLY reduce using rule 97 (Qualifier -> STATIC .) - ATTRIBUTE reduce using rule 97 (Qualifier -> STATIC .) - VOID reduce using rule 97 (Qualifier -> STATIC .) - ANY reduce using rule 97 (Qualifier -> STATIC .) - PROMISE reduce using rule 97 (Qualifier -> STATIC .) - LPAREN reduce using rule 97 (Qualifier -> STATIC .) - ARRAYBUFFER reduce using rule 97 (Qualifier -> STATIC .) - READABLESTREAM reduce using rule 97 (Qualifier -> STATIC .) - OBJECT reduce using rule 97 (Qualifier -> STATIC .) - SEQUENCE reduce using rule 97 (Qualifier -> STATIC .) - RECORD reduce using rule 97 (Qualifier -> STATIC .) - BOOLEAN reduce using rule 97 (Qualifier -> STATIC .) - BYTE reduce using rule 97 (Qualifier -> STATIC .) - OCTET reduce using rule 97 (Qualifier -> STATIC .) - FLOAT reduce using rule 97 (Qualifier -> STATIC .) - UNRESTRICTED reduce using rule 97 (Qualifier -> STATIC .) - DOUBLE reduce using rule 97 (Qualifier -> STATIC .) - UNSIGNED reduce using rule 97 (Qualifier -> STATIC .) - DOMSTRING reduce using rule 97 (Qualifier -> STATIC .) - BYTESTRING reduce using rule 97 (Qualifier -> STATIC .) - USVSTRING reduce using rule 97 (Qualifier -> STATIC .) - UTF8STRING reduce using rule 97 (Qualifier -> STATIC .) - JSSTRING reduce using rule 97 (Qualifier -> STATIC .) - SCOPE reduce using rule 97 (Qualifier -> STATIC .) - IDENTIFIER reduce using rule 97 (Qualifier -> STATIC .) - SHORT reduce using rule 97 (Qualifier -> STATIC .) - LONG reduce using rule 97 (Qualifier -> STATIC .) - - -state 203 - - (93) ReadOnly -> READONLY . - - MAPLIKE reduce using rule 93 (ReadOnly -> READONLY .) - SETLIKE reduce using rule 93 (ReadOnly -> READONLY .) - ATTRIBUTE reduce using rule 93 (ReadOnly -> READONLY .) - - -state 204 - - (100) Qualifiers -> Specials . - - VOID reduce using rule 100 (Qualifiers -> Specials .) - ANY reduce using rule 100 (Qualifiers -> Specials .) - PROMISE reduce using rule 100 (Qualifiers -> Specials .) - LPAREN reduce using rule 100 (Qualifiers -> Specials .) - ARRAYBUFFER reduce using rule 100 (Qualifiers -> Specials .) - READABLESTREAM reduce using rule 100 (Qualifiers -> Specials .) - OBJECT reduce using rule 100 (Qualifiers -> Specials .) - SEQUENCE reduce using rule 100 (Qualifiers -> Specials .) - RECORD reduce using rule 100 (Qualifiers -> Specials .) - BOOLEAN reduce using rule 100 (Qualifiers -> Specials .) - BYTE reduce using rule 100 (Qualifiers -> Specials .) - OCTET reduce using rule 100 (Qualifiers -> Specials .) - FLOAT reduce using rule 100 (Qualifiers -> Specials .) - UNRESTRICTED reduce using rule 100 (Qualifiers -> Specials .) - DOUBLE reduce using rule 100 (Qualifiers -> Specials .) - UNSIGNED reduce using rule 100 (Qualifiers -> Specials .) - DOMSTRING reduce using rule 100 (Qualifiers -> Specials .) - BYTESTRING reduce using rule 100 (Qualifiers -> Specials .) - USVSTRING reduce using rule 100 (Qualifiers -> Specials .) - UTF8STRING reduce using rule 100 (Qualifiers -> Specials .) - JSSTRING reduce using rule 100 (Qualifiers -> Specials .) - SCOPE reduce using rule 100 (Qualifiers -> Specials .) - IDENTIFIER reduce using rule 100 (Qualifiers -> Specials .) - SHORT reduce using rule 100 (Qualifiers -> Specials .) - LONG reduce using rule 100 (Qualifiers -> Specials .) - - -state 205 - - (101) Specials -> Special . Specials - (101) Specials -> . Special Specials - (102) Specials -> . - (103) Special -> . GETTER - (104) Special -> . SETTER - (105) Special -> . DELETER - (106) Special -> . LEGACYCALLER - - VOID reduce using rule 102 (Specials -> .) - ANY reduce using rule 102 (Specials -> .) - PROMISE reduce using rule 102 (Specials -> .) - LPAREN reduce using rule 102 (Specials -> .) - ARRAYBUFFER reduce using rule 102 (Specials -> .) - READABLESTREAM reduce using rule 102 (Specials -> .) - OBJECT reduce using rule 102 (Specials -> .) - SEQUENCE reduce using rule 102 (Specials -> .) - RECORD reduce using rule 102 (Specials -> .) - BOOLEAN reduce using rule 102 (Specials -> .) - BYTE reduce using rule 102 (Specials -> .) - OCTET reduce using rule 102 (Specials -> .) - FLOAT reduce using rule 102 (Specials -> .) - UNRESTRICTED reduce using rule 102 (Specials -> .) - DOUBLE reduce using rule 102 (Specials -> .) - UNSIGNED reduce using rule 102 (Specials -> .) - DOMSTRING reduce using rule 102 (Specials -> .) - BYTESTRING reduce using rule 102 (Specials -> .) - USVSTRING reduce using rule 102 (Specials -> .) - UTF8STRING reduce using rule 102 (Specials -> .) - JSSTRING reduce using rule 102 (Specials -> .) - SCOPE reduce using rule 102 (Specials -> .) - IDENTIFIER reduce using rule 102 (Specials -> .) - SHORT reduce using rule 102 (Specials -> .) - LONG reduce using rule 102 (Specials -> .) - GETTER shift and go to state 206 - SETTER shift and go to state 207 - DELETER shift and go to state 208 - LEGACYCALLER shift and go to state 209 - - Special shift and go to state 205 - Specials shift and go to state 260 - -state 206 - - (103) Special -> GETTER . - - GETTER reduce using rule 103 (Special -> GETTER .) - SETTER reduce using rule 103 (Special -> GETTER .) - DELETER reduce using rule 103 (Special -> GETTER .) - LEGACYCALLER reduce using rule 103 (Special -> GETTER .) - VOID reduce using rule 103 (Special -> GETTER .) - ANY reduce using rule 103 (Special -> GETTER .) - PROMISE reduce using rule 103 (Special -> GETTER .) - LPAREN reduce using rule 103 (Special -> GETTER .) - ARRAYBUFFER reduce using rule 103 (Special -> GETTER .) - READABLESTREAM reduce using rule 103 (Special -> GETTER .) - OBJECT reduce using rule 103 (Special -> GETTER .) - SEQUENCE reduce using rule 103 (Special -> GETTER .) - RECORD reduce using rule 103 (Special -> GETTER .) - BOOLEAN reduce using rule 103 (Special -> GETTER .) - BYTE reduce using rule 103 (Special -> GETTER .) - OCTET reduce using rule 103 (Special -> GETTER .) - FLOAT reduce using rule 103 (Special -> GETTER .) - UNRESTRICTED reduce using rule 103 (Special -> GETTER .) - DOUBLE reduce using rule 103 (Special -> GETTER .) - UNSIGNED reduce using rule 103 (Special -> GETTER .) - DOMSTRING reduce using rule 103 (Special -> GETTER .) - BYTESTRING reduce using rule 103 (Special -> GETTER .) - USVSTRING reduce using rule 103 (Special -> GETTER .) - UTF8STRING reduce using rule 103 (Special -> GETTER .) - JSSTRING reduce using rule 103 (Special -> GETTER .) - SCOPE reduce using rule 103 (Special -> GETTER .) - IDENTIFIER reduce using rule 103 (Special -> GETTER .) - SHORT reduce using rule 103 (Special -> GETTER .) - LONG reduce using rule 103 (Special -> GETTER .) - - -state 207 - - (104) Special -> SETTER . - - GETTER reduce using rule 104 (Special -> SETTER .) - SETTER reduce using rule 104 (Special -> SETTER .) - DELETER reduce using rule 104 (Special -> SETTER .) - LEGACYCALLER reduce using rule 104 (Special -> SETTER .) - VOID reduce using rule 104 (Special -> SETTER .) - ANY reduce using rule 104 (Special -> SETTER .) - PROMISE reduce using rule 104 (Special -> SETTER .) - LPAREN reduce using rule 104 (Special -> SETTER .) - ARRAYBUFFER reduce using rule 104 (Special -> SETTER .) - READABLESTREAM reduce using rule 104 (Special -> SETTER .) - OBJECT reduce using rule 104 (Special -> SETTER .) - SEQUENCE reduce using rule 104 (Special -> SETTER .) - RECORD reduce using rule 104 (Special -> SETTER .) - BOOLEAN reduce using rule 104 (Special -> SETTER .) - BYTE reduce using rule 104 (Special -> SETTER .) - OCTET reduce using rule 104 (Special -> SETTER .) - FLOAT reduce using rule 104 (Special -> SETTER .) - UNRESTRICTED reduce using rule 104 (Special -> SETTER .) - DOUBLE reduce using rule 104 (Special -> SETTER .) - UNSIGNED reduce using rule 104 (Special -> SETTER .) - DOMSTRING reduce using rule 104 (Special -> SETTER .) - BYTESTRING reduce using rule 104 (Special -> SETTER .) - USVSTRING reduce using rule 104 (Special -> SETTER .) - UTF8STRING reduce using rule 104 (Special -> SETTER .) - JSSTRING reduce using rule 104 (Special -> SETTER .) - SCOPE reduce using rule 104 (Special -> SETTER .) - IDENTIFIER reduce using rule 104 (Special -> SETTER .) - SHORT reduce using rule 104 (Special -> SETTER .) - LONG reduce using rule 104 (Special -> SETTER .) - - -state 208 - - (105) Special -> DELETER . - - GETTER reduce using rule 105 (Special -> DELETER .) - SETTER reduce using rule 105 (Special -> DELETER .) - DELETER reduce using rule 105 (Special -> DELETER .) - LEGACYCALLER reduce using rule 105 (Special -> DELETER .) - VOID reduce using rule 105 (Special -> DELETER .) - ANY reduce using rule 105 (Special -> DELETER .) - PROMISE reduce using rule 105 (Special -> DELETER .) - LPAREN reduce using rule 105 (Special -> DELETER .) - ARRAYBUFFER reduce using rule 105 (Special -> DELETER .) - READABLESTREAM reduce using rule 105 (Special -> DELETER .) - OBJECT reduce using rule 105 (Special -> DELETER .) - SEQUENCE reduce using rule 105 (Special -> DELETER .) - RECORD reduce using rule 105 (Special -> DELETER .) - BOOLEAN reduce using rule 105 (Special -> DELETER .) - BYTE reduce using rule 105 (Special -> DELETER .) - OCTET reduce using rule 105 (Special -> DELETER .) - FLOAT reduce using rule 105 (Special -> DELETER .) - UNRESTRICTED reduce using rule 105 (Special -> DELETER .) - DOUBLE reduce using rule 105 (Special -> DELETER .) - UNSIGNED reduce using rule 105 (Special -> DELETER .) - DOMSTRING reduce using rule 105 (Special -> DELETER .) - BYTESTRING reduce using rule 105 (Special -> DELETER .) - USVSTRING reduce using rule 105 (Special -> DELETER .) - UTF8STRING reduce using rule 105 (Special -> DELETER .) - JSSTRING reduce using rule 105 (Special -> DELETER .) - SCOPE reduce using rule 105 (Special -> DELETER .) - IDENTIFIER reduce using rule 105 (Special -> DELETER .) - SHORT reduce using rule 105 (Special -> DELETER .) - LONG reduce using rule 105 (Special -> DELETER .) - - -state 209 - - (106) Special -> LEGACYCALLER . - - GETTER reduce using rule 106 (Special -> LEGACYCALLER .) - SETTER reduce using rule 106 (Special -> LEGACYCALLER .) - DELETER reduce using rule 106 (Special -> LEGACYCALLER .) - LEGACYCALLER reduce using rule 106 (Special -> LEGACYCALLER .) - VOID reduce using rule 106 (Special -> LEGACYCALLER .) - ANY reduce using rule 106 (Special -> LEGACYCALLER .) - PROMISE reduce using rule 106 (Special -> LEGACYCALLER .) - LPAREN reduce using rule 106 (Special -> LEGACYCALLER .) - ARRAYBUFFER reduce using rule 106 (Special -> LEGACYCALLER .) - READABLESTREAM reduce using rule 106 (Special -> LEGACYCALLER .) - OBJECT reduce using rule 106 (Special -> LEGACYCALLER .) - SEQUENCE reduce using rule 106 (Special -> LEGACYCALLER .) - RECORD reduce using rule 106 (Special -> LEGACYCALLER .) - BOOLEAN reduce using rule 106 (Special -> LEGACYCALLER .) - BYTE reduce using rule 106 (Special -> LEGACYCALLER .) - OCTET reduce using rule 106 (Special -> LEGACYCALLER .) - FLOAT reduce using rule 106 (Special -> LEGACYCALLER .) - UNRESTRICTED reduce using rule 106 (Special -> LEGACYCALLER .) - DOUBLE reduce using rule 106 (Special -> LEGACYCALLER .) - UNSIGNED reduce using rule 106 (Special -> LEGACYCALLER .) - DOMSTRING reduce using rule 106 (Special -> LEGACYCALLER .) - BYTESTRING reduce using rule 106 (Special -> LEGACYCALLER .) - USVSTRING reduce using rule 106 (Special -> LEGACYCALLER .) - UTF8STRING reduce using rule 106 (Special -> LEGACYCALLER .) - JSSTRING reduce using rule 106 (Special -> LEGACYCALLER .) - SCOPE reduce using rule 106 (Special -> LEGACYCALLER .) - IDENTIFIER reduce using rule 106 (Special -> LEGACYCALLER .) - SHORT reduce using rule 106 (Special -> LEGACYCALLER .) - LONG reduce using rule 106 (Special -> LEGACYCALLER .) - - -state 210 - - (29) PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 261 - - -state 211 - - (40) PartialInterfaceMembers -> ExtendedAttributeList . PartialInterfaceMember PartialInterfaceMembers - (42) PartialInterfaceMember -> . Const - (43) PartialInterfaceMember -> . AttributeOrOperationOrMaplikeOrSetlikeOrIterable - (73) Const -> . CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON - (80) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Attribute - (81) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Maplike - (82) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Setlike - (83) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Iterable - (84) AttributeOrOperationOrMaplikeOrSetlikeOrIterable -> . Operation - (89) Attribute -> . Qualifier AttributeRest - (90) Attribute -> . INHERIT AttributeRest - (91) Attribute -> . AttributeRest - (88) Maplike -> . ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - (87) Setlike -> . ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON - (85) Iterable -> . ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON - (86) Iterable -> . ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - (95) Operation -> . Qualifiers OperationRest - (96) Operation -> . STRINGIFIER SEMICOLON - (97) Qualifier -> . STATIC - (98) Qualifier -> . STRINGIFIER - (92) AttributeRest -> . ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON - (93) ReadOnly -> . READONLY - (94) ReadOnly -> . - (99) Qualifiers -> . Qualifier - (100) Qualifiers -> . Specials - (101) Specials -> . Special Specials - (102) Specials -> . - (103) Special -> . GETTER - (104) Special -> . SETTER - (105) Special -> . DELETER - (106) Special -> . LEGACYCALLER - - CONST shift and go to state 189 - INHERIT shift and go to state 197 - ITERABLE shift and go to state 199 - STRINGIFIER shift and go to state 201 - STATIC shift and go to state 202 - READONLY shift and go to state 203 - MAPLIKE reduce using rule 94 (ReadOnly -> .) - SETLIKE reduce using rule 94 (ReadOnly -> .) - ATTRIBUTE reduce using rule 94 (ReadOnly -> .) - VOID reduce using rule 102 (Specials -> .) - ANY reduce using rule 102 (Specials -> .) - PROMISE reduce using rule 102 (Specials -> .) - LPAREN reduce using rule 102 (Specials -> .) - ARRAYBUFFER reduce using rule 102 (Specials -> .) - READABLESTREAM reduce using rule 102 (Specials -> .) - OBJECT reduce using rule 102 (Specials -> .) - SEQUENCE reduce using rule 102 (Specials -> .) - RECORD reduce using rule 102 (Specials -> .) - BOOLEAN reduce using rule 102 (Specials -> .) - BYTE reduce using rule 102 (Specials -> .) - OCTET reduce using rule 102 (Specials -> .) - FLOAT reduce using rule 102 (Specials -> .) - UNRESTRICTED reduce using rule 102 (Specials -> .) - DOUBLE reduce using rule 102 (Specials -> .) - UNSIGNED reduce using rule 102 (Specials -> .) - DOMSTRING reduce using rule 102 (Specials -> .) - BYTESTRING reduce using rule 102 (Specials -> .) - USVSTRING reduce using rule 102 (Specials -> .) - UTF8STRING reduce using rule 102 (Specials -> .) - JSSTRING reduce using rule 102 (Specials -> .) - SCOPE reduce using rule 102 (Specials -> .) - IDENTIFIER reduce using rule 102 (Specials -> .) - SHORT reduce using rule 102 (Specials -> .) - LONG reduce using rule 102 (Specials -> .) - GETTER shift and go to state 206 - SETTER shift and go to state 207 - DELETER shift and go to state 208 - LEGACYCALLER shift and go to state 209 - - PartialInterfaceMember shift and go to state 262 - Const shift and go to state 186 - AttributeOrOperationOrMaplikeOrSetlikeOrIterable shift and go to state 187 - Attribute shift and go to state 190 - Maplike shift and go to state 191 - Setlike shift and go to state 192 - Iterable shift and go to state 193 - Operation shift and go to state 194 - Qualifier shift and go to state 195 - AttributeRest shift and go to state 196 - ReadOnly shift and go to state 198 - Qualifiers shift and go to state 200 - Specials shift and go to state 204 - Special shift and go to state 205 - -state 212 - - (30) PartialMixinRest -> MIXIN IDENTIFIER LBRACE . MixinMembers RBRACE SEMICOLON - (44) MixinMembers -> . - (45) MixinMembers -> . ExtendedAttributeList MixinMember MixinMembers - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 44 (MixinMembers -> .) - LBRACKET shift and go to state 3 - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - - MixinMembers shift and go to state 263 - ExtendedAttributeList shift and go to state 181 - -state 213 - - (31) PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 264 - - -state 214 - - (32) PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 265 - - -state 215 - - (50) DictionaryMembers -> ExtendedAttributeList . DictionaryMember DictionaryMembers - (52) DictionaryMember -> . REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON - (53) DictionaryMember -> . Type IDENTIFIER Default SEMICOLON - (207) Type -> . SingleType - (208) Type -> . UnionType Null - (210) SingleType -> . DistinguishableType - (211) SingleType -> . ANY - (212) SingleType -> . PROMISE LT ReturnType GT - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - REQUIRED shift and go to state 267 - ANY shift and go to state 90 - PROMISE shift and go to state 91 - LPAREN shift and go to state 92 - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - DictionaryMember shift and go to state 266 - Type shift and go to state 268 - SingleType shift and go to state 87 - UnionType shift and go to state 88 - DistinguishableType shift and go to state 89 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 216 - - (49) Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 269 - - -state 217 - - (60) Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 270 - - -state 218 - - (69) ExceptionMembers -> ExtendedAttributeList . ExceptionMember ExceptionMembers - (153) ExceptionMember -> . Const - (154) ExceptionMember -> . ExceptionField - (73) Const -> . CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON - (155) ExceptionField -> . Type IDENTIFIER SEMICOLON - (207) Type -> . SingleType - (208) Type -> . UnionType Null - (210) SingleType -> . DistinguishableType - (211) SingleType -> . ANY - (212) SingleType -> . PROMISE LT ReturnType GT - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - (218) DistinguishableType -> . PrimitiveType Null - (219) DistinguishableType -> . ARRAYBUFFER Null - (220) DistinguishableType -> . READABLESTREAM Null - (221) DistinguishableType -> . OBJECT Null - (222) DistinguishableType -> . StringType Null - (223) DistinguishableType -> . SEQUENCE LT TypeWithExtendedAttributes GT Null - (224) DistinguishableType -> . RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null - (225) DistinguishableType -> . ScopedName Null - (228) PrimitiveType -> . UnsignedIntegerType - (229) PrimitiveType -> . BOOLEAN - (230) PrimitiveType -> . BYTE - (231) PrimitiveType -> . OCTET - (232) PrimitiveType -> . FLOAT - (233) PrimitiveType -> . UNRESTRICTED FLOAT - (234) PrimitiveType -> . DOUBLE - (235) PrimitiveType -> . UNRESTRICTED DOUBLE - (236) StringType -> . BuiltinStringType - (252) ScopedName -> . AbsoluteScopedName - (253) ScopedName -> . RelativeScopedName - (242) UnsignedIntegerType -> . UNSIGNED IntegerType - (243) UnsignedIntegerType -> . IntegerType - (237) BuiltinStringType -> . DOMSTRING - (238) BuiltinStringType -> . BYTESTRING - (239) BuiltinStringType -> . USVSTRING - (240) BuiltinStringType -> . UTF8STRING - (241) BuiltinStringType -> . JSSTRING - (254) AbsoluteScopedName -> . SCOPE IDENTIFIER ScopedNameParts - (255) RelativeScopedName -> . IDENTIFIER ScopedNameParts - (244) IntegerType -> . SHORT - (245) IntegerType -> . LONG OptionalLong - - CONST shift and go to state 189 - ANY shift and go to state 90 - PROMISE shift and go to state 91 - LPAREN shift and go to state 92 - ARRAYBUFFER shift and go to state 94 - READABLESTREAM shift and go to state 95 - OBJECT shift and go to state 96 - SEQUENCE shift and go to state 98 - RECORD shift and go to state 99 - BOOLEAN shift and go to state 102 - BYTE shift and go to state 103 - OCTET shift and go to state 104 - FLOAT shift and go to state 105 - UNRESTRICTED shift and go to state 106 - DOUBLE shift and go to state 107 - UNSIGNED shift and go to state 109 - DOMSTRING shift and go to state 111 - BYTESTRING shift and go to state 112 - USVSTRING shift and go to state 113 - UTF8STRING shift and go to state 114 - JSSTRING shift and go to state 115 - SCOPE shift and go to state 25 - IDENTIFIER shift and go to state 16 - SHORT shift and go to state 116 - LONG shift and go to state 117 - - ExceptionMember shift and go to state 271 - Const shift and go to state 272 - ExceptionField shift and go to state 273 - Type shift and go to state 274 - SingleType shift and go to state 87 - UnionType shift and go to state 88 - DistinguishableType shift and go to state 89 - PrimitiveType shift and go to state 93 - StringType shift and go to state 97 - ScopedName shift and go to state 100 - UnsignedIntegerType shift and go to state 101 - BuiltinStringType shift and go to state 108 - AbsoluteScopedName shift and go to state 23 - RelativeScopedName shift and go to state 24 - IntegerType shift and go to state 110 - -state 219 - - (61) Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE . SEMICOLON - - SEMICOLON shift and go to state 275 - - -state 220 - - (62) EnumValueList -> STRING EnumValueListComma . - - RBRACE reduce using rule 62 (EnumValueList -> STRING EnumValueListComma .) - - -state 221 - - (63) EnumValueListComma -> COMMA . EnumValueListString - (65) EnumValueListString -> . STRING EnumValueListComma - (66) EnumValueListString -> . - - STRING shift and go to state 277 - RBRACE reduce using rule 66 (EnumValueListString -> .) - - EnumValueListString shift and go to state 276 - -state 222 - - (212) SingleType -> PROMISE LT ReturnType . GT - - GT shift and go to state 278 - - -state 223 - - (213) UnionType -> LPAREN UnionMemberType OR . UnionMemberType UnionMemberTypes RPAREN - (214) UnionMemberType -> . ExtendedAttributeList DistinguishableType - (215) UnionMemberType -> . UnionType Null - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - - LBRACKET shift and go to state 3 - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN shift and go to state 92 - - UnionMemberType shift and go to state 279 - ExtendedAttributeList shift and go to state 151 - UnionType shift and go to state 152 - -state 224 - - (214) UnionMemberType -> ExtendedAttributeList DistinguishableType . - - OR reduce using rule 214 (UnionMemberType -> ExtendedAttributeList DistinguishableType .) - RPAREN reduce using rule 214 (UnionMemberType -> ExtendedAttributeList DistinguishableType .) - - -state 225 - - (215) UnionMemberType -> UnionType Null . - - OR reduce using rule 215 (UnionMemberType -> UnionType Null .) - RPAREN reduce using rule 215 (UnionMemberType -> UnionType Null .) - - -state 226 - - (223) DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes . GT Null - - GT shift and go to state 280 - - -state 227 - - (224) DistinguishableType -> RECORD LT StringType . COMMA TypeWithExtendedAttributes GT Null - - COMMA shift and go to state 281 - - -state 228 - - (112) Arguments -> COMMA Argument . Arguments - (112) Arguments -> . COMMA Argument Arguments - (113) Arguments -> . - - COMMA shift and go to state 170 - RPAREN reduce using rule 113 (Arguments -> .) - - Arguments shift and go to state 282 - -state 229 - - (115) ArgumentRest -> OPTIONAL TypeWithExtendedAttributes . ArgumentName Default - (117) ArgumentName -> . IDENTIFIER - (118) ArgumentName -> . ArgumentNameKeyword - (119) ArgumentNameKeyword -> . ASYNC - (120) ArgumentNameKeyword -> . ATTRIBUTE - (121) ArgumentNameKeyword -> . CALLBACK - (122) ArgumentNameKeyword -> . CONST - (123) ArgumentNameKeyword -> . CONSTRUCTOR - (124) ArgumentNameKeyword -> . DELETER - (125) ArgumentNameKeyword -> . DICTIONARY - (126) ArgumentNameKeyword -> . ENUM - (127) ArgumentNameKeyword -> . EXCEPTION - (128) ArgumentNameKeyword -> . GETTER - (129) ArgumentNameKeyword -> . INCLUDES - (130) ArgumentNameKeyword -> . INHERIT - (131) ArgumentNameKeyword -> . INTERFACE - (132) ArgumentNameKeyword -> . ITERABLE - (133) ArgumentNameKeyword -> . LEGACYCALLER - (134) ArgumentNameKeyword -> . MAPLIKE - (135) ArgumentNameKeyword -> . MIXIN - (136) ArgumentNameKeyword -> . NAMESPACE - (137) ArgumentNameKeyword -> . PARTIAL - (138) ArgumentNameKeyword -> . READONLY - (139) ArgumentNameKeyword -> . REQUIRED - (140) ArgumentNameKeyword -> . SERIALIZER - (141) ArgumentNameKeyword -> . SETLIKE - (142) ArgumentNameKeyword -> . SETTER - (143) ArgumentNameKeyword -> . STATIC - (144) ArgumentNameKeyword -> . STRINGIFIER - (145) ArgumentNameKeyword -> . TYPEDEF - (146) ArgumentNameKeyword -> . UNRESTRICTED - - IDENTIFIER shift and go to state 284 - ASYNC shift and go to state 286 - ATTRIBUTE shift and go to state 287 - CALLBACK shift and go to state 288 - CONST shift and go to state 289 - CONSTRUCTOR shift and go to state 290 - DELETER shift and go to state 291 - DICTIONARY shift and go to state 292 - ENUM shift and go to state 293 - EXCEPTION shift and go to state 294 - GETTER shift and go to state 295 - INCLUDES shift and go to state 296 - INHERIT shift and go to state 297 - INTERFACE shift and go to state 298 - ITERABLE shift and go to state 299 - LEGACYCALLER shift and go to state 300 - MAPLIKE shift and go to state 301 - MIXIN shift and go to state 302 - NAMESPACE shift and go to state 303 - PARTIAL shift and go to state 304 - READONLY shift and go to state 305 - REQUIRED shift and go to state 306 - SERIALIZER shift and go to state 307 - SETLIKE shift and go to state 308 - SETTER shift and go to state 309 - STATIC shift and go to state 310 - STRINGIFIER shift and go to state 311 - TYPEDEF shift and go to state 312 - UNRESTRICTED shift and go to state 313 - - ArgumentName shift and go to state 283 - ArgumentNameKeyword shift and go to state 285 - -state 230 - - (116) ArgumentRest -> Type Ellipsis . ArgumentName - (117) ArgumentName -> . IDENTIFIER - (118) ArgumentName -> . ArgumentNameKeyword - (119) ArgumentNameKeyword -> . ASYNC - (120) ArgumentNameKeyword -> . ATTRIBUTE - (121) ArgumentNameKeyword -> . CALLBACK - (122) ArgumentNameKeyword -> . CONST - (123) ArgumentNameKeyword -> . CONSTRUCTOR - (124) ArgumentNameKeyword -> . DELETER - (125) ArgumentNameKeyword -> . DICTIONARY - (126) ArgumentNameKeyword -> . ENUM - (127) ArgumentNameKeyword -> . EXCEPTION - (128) ArgumentNameKeyword -> . GETTER - (129) ArgumentNameKeyword -> . INCLUDES - (130) ArgumentNameKeyword -> . INHERIT - (131) ArgumentNameKeyword -> . INTERFACE - (132) ArgumentNameKeyword -> . ITERABLE - (133) ArgumentNameKeyword -> . LEGACYCALLER - (134) ArgumentNameKeyword -> . MAPLIKE - (135) ArgumentNameKeyword -> . MIXIN - (136) ArgumentNameKeyword -> . NAMESPACE - (137) ArgumentNameKeyword -> . PARTIAL - (138) ArgumentNameKeyword -> . READONLY - (139) ArgumentNameKeyword -> . REQUIRED - (140) ArgumentNameKeyword -> . SERIALIZER - (141) ArgumentNameKeyword -> . SETLIKE - (142) ArgumentNameKeyword -> . SETTER - (143) ArgumentNameKeyword -> . STATIC - (144) ArgumentNameKeyword -> . STRINGIFIER - (145) ArgumentNameKeyword -> . TYPEDEF - (146) ArgumentNameKeyword -> . UNRESTRICTED - - IDENTIFIER shift and go to state 284 - ASYNC shift and go to state 286 - ATTRIBUTE shift and go to state 287 - CALLBACK shift and go to state 288 - CONST shift and go to state 289 - CONSTRUCTOR shift and go to state 290 - DELETER shift and go to state 291 - DICTIONARY shift and go to state 292 - ENUM shift and go to state 293 - EXCEPTION shift and go to state 294 - GETTER shift and go to state 295 - INCLUDES shift and go to state 296 - INHERIT shift and go to state 297 - INTERFACE shift and go to state 298 - ITERABLE shift and go to state 299 - LEGACYCALLER shift and go to state 300 - MAPLIKE shift and go to state 301 - MIXIN shift and go to state 302 - NAMESPACE shift and go to state 303 - PARTIAL shift and go to state 304 - READONLY shift and go to state 305 - REQUIRED shift and go to state 306 - SERIALIZER shift and go to state 307 - SETLIKE shift and go to state 308 - SETTER shift and go to state 309 - STATIC shift and go to state 310 - STRINGIFIER shift and go to state 311 - TYPEDEF shift and go to state 312 - UNRESTRICTED shift and go to state 313 - - ArgumentName shift and go to state 314 - ArgumentNameKeyword shift and go to state 285 - -state 231 - - (151) Ellipsis -> ELLIPSIS . - - IDENTIFIER reduce using rule 151 (Ellipsis -> ELLIPSIS .) - ASYNC reduce using rule 151 (Ellipsis -> ELLIPSIS .) - ATTRIBUTE reduce using rule 151 (Ellipsis -> ELLIPSIS .) - CALLBACK reduce using rule 151 (Ellipsis -> ELLIPSIS .) - CONST reduce using rule 151 (Ellipsis -> ELLIPSIS .) - CONSTRUCTOR reduce using rule 151 (Ellipsis -> ELLIPSIS .) - DELETER reduce using rule 151 (Ellipsis -> ELLIPSIS .) - DICTIONARY reduce using rule 151 (Ellipsis -> ELLIPSIS .) - ENUM reduce using rule 151 (Ellipsis -> ELLIPSIS .) - EXCEPTION reduce using rule 151 (Ellipsis -> ELLIPSIS .) - GETTER reduce using rule 151 (Ellipsis -> ELLIPSIS .) - INCLUDES reduce using rule 151 (Ellipsis -> ELLIPSIS .) - INHERIT reduce using rule 151 (Ellipsis -> ELLIPSIS .) - INTERFACE reduce using rule 151 (Ellipsis -> ELLIPSIS .) - ITERABLE reduce using rule 151 (Ellipsis -> ELLIPSIS .) - LEGACYCALLER reduce using rule 151 (Ellipsis -> ELLIPSIS .) - MAPLIKE reduce using rule 151 (Ellipsis -> ELLIPSIS .) - MIXIN reduce using rule 151 (Ellipsis -> ELLIPSIS .) - NAMESPACE reduce using rule 151 (Ellipsis -> ELLIPSIS .) - PARTIAL reduce using rule 151 (Ellipsis -> ELLIPSIS .) - READONLY reduce using rule 151 (Ellipsis -> ELLIPSIS .) - REQUIRED reduce using rule 151 (Ellipsis -> ELLIPSIS .) - SERIALIZER reduce using rule 151 (Ellipsis -> ELLIPSIS .) - SETLIKE reduce using rule 151 (Ellipsis -> ELLIPSIS .) - SETTER reduce using rule 151 (Ellipsis -> ELLIPSIS .) - STATIC reduce using rule 151 (Ellipsis -> ELLIPSIS .) - STRINGIFIER reduce using rule 151 (Ellipsis -> ELLIPSIS .) - TYPEDEF reduce using rule 151 (Ellipsis -> ELLIPSIS .) - UNRESTRICTED reduce using rule 151 (Ellipsis -> ELLIPSIS .) - - -state 232 - - (262) ExtendedAttributeNamedArgList -> IDENTIFIER EQUALS IDENTIFIER LPAREN ArgumentList . RPAREN - - RPAREN shift and go to state 315 - - -state 233 - - (264) IdentifierList -> IDENTIFIER Identifiers . - - RPAREN reduce using rule 264 (IdentifierList -> IDENTIFIER Identifiers .) - - -state 234 - - (265) Identifiers -> COMMA . IDENTIFIER Identifiers - - IDENTIFIER shift and go to state 316 - - -state 235 - - (263) ExtendedAttributeIdentList -> IDENTIFIER EQUALS LPAREN IdentifierList RPAREN . - - COMMA reduce using rule 263 (ExtendedAttributeIdentList -> IDENTIFIER EQUALS LPAREN IdentifierList RPAREN .) - RBRACKET reduce using rule 263 (ExtendedAttributeIdentList -> IDENTIFIER EQUALS LPAREN IdentifierList RPAREN .) - - -state 236 - - (67) CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList . RPAREN SEMICOLON - - RPAREN shift and go to state 317 - - -state 237 - - (68) CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN . ArgumentList RPAREN SEMICOLON - (110) ArgumentList -> . Argument Arguments - (111) ArgumentList -> . - (114) Argument -> . ExtendedAttributeList ArgumentRest - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RPAREN reduce using rule 111 (ArgumentList -> .) - LBRACKET shift and go to state 3 - OPTIONAL reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ArgumentList shift and go to state 318 - Argument shift and go to state 123 - ExtendedAttributeList shift and go to state 124 - -state 238 - - (19) InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 319 - - -state 239 - - (21) MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 320 - - -state 240 - - (45) MixinMembers -> ExtendedAttributeList MixinMember . MixinMembers - (44) MixinMembers -> . - (45) MixinMembers -> . ExtendedAttributeList MixinMember MixinMembers - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 44 (MixinMembers -> .) - LBRACKET shift and go to state 3 - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - - ExtendedAttributeList shift and go to state 181 - MixinMembers shift and go to state 321 - -state 241 - - (46) MixinMember -> Const . - - LBRACKET reduce using rule 46 (MixinMember -> Const .) - CONST reduce using rule 46 (MixinMember -> Const .) - INHERIT reduce using rule 46 (MixinMember -> Const .) - STRINGIFIER reduce using rule 46 (MixinMember -> Const .) - STATIC reduce using rule 46 (MixinMember -> Const .) - READONLY reduce using rule 46 (MixinMember -> Const .) - GETTER reduce using rule 46 (MixinMember -> Const .) - SETTER reduce using rule 46 (MixinMember -> Const .) - DELETER reduce using rule 46 (MixinMember -> Const .) - LEGACYCALLER reduce using rule 46 (MixinMember -> Const .) - VOID reduce using rule 46 (MixinMember -> Const .) - ANY reduce using rule 46 (MixinMember -> Const .) - PROMISE reduce using rule 46 (MixinMember -> Const .) - LPAREN reduce using rule 46 (MixinMember -> Const .) - ARRAYBUFFER reduce using rule 46 (MixinMember -> Const .) - READABLESTREAM reduce using rule 46 (MixinMember -> Const .) - OBJECT reduce using rule 46 (MixinMember -> Const .) - SEQUENCE reduce using rule 46 (MixinMember -> Const .) - RECORD reduce using rule 46 (MixinMember -> Const .) - BOOLEAN reduce using rule 46 (MixinMember -> Const .) - BYTE reduce using rule 46 (MixinMember -> Const .) - OCTET reduce using rule 46 (MixinMember -> Const .) - FLOAT reduce using rule 46 (MixinMember -> Const .) - UNRESTRICTED reduce using rule 46 (MixinMember -> Const .) - DOUBLE reduce using rule 46 (MixinMember -> Const .) - UNSIGNED reduce using rule 46 (MixinMember -> Const .) - DOMSTRING reduce using rule 46 (MixinMember -> Const .) - BYTESTRING reduce using rule 46 (MixinMember -> Const .) - USVSTRING reduce using rule 46 (MixinMember -> Const .) - UTF8STRING reduce using rule 46 (MixinMember -> Const .) - JSSTRING reduce using rule 46 (MixinMember -> Const .) - SCOPE reduce using rule 46 (MixinMember -> Const .) - IDENTIFIER reduce using rule 46 (MixinMember -> Const .) - SHORT reduce using rule 46 (MixinMember -> Const .) - LONG reduce using rule 46 (MixinMember -> Const .) - ATTRIBUTE reduce using rule 46 (MixinMember -> Const .) - RBRACE reduce using rule 46 (MixinMember -> Const .) - - -state 242 - - (47) MixinMember -> Attribute . - - LBRACKET reduce using rule 47 (MixinMember -> Attribute .) - CONST reduce using rule 47 (MixinMember -> Attribute .) - INHERIT reduce using rule 47 (MixinMember -> Attribute .) - STRINGIFIER reduce using rule 47 (MixinMember -> Attribute .) - STATIC reduce using rule 47 (MixinMember -> Attribute .) - READONLY reduce using rule 47 (MixinMember -> Attribute .) - GETTER reduce using rule 47 (MixinMember -> Attribute .) - SETTER reduce using rule 47 (MixinMember -> Attribute .) - DELETER reduce using rule 47 (MixinMember -> Attribute .) - LEGACYCALLER reduce using rule 47 (MixinMember -> Attribute .) - VOID reduce using rule 47 (MixinMember -> Attribute .) - ANY reduce using rule 47 (MixinMember -> Attribute .) - PROMISE reduce using rule 47 (MixinMember -> Attribute .) - LPAREN reduce using rule 47 (MixinMember -> Attribute .) - ARRAYBUFFER reduce using rule 47 (MixinMember -> Attribute .) - READABLESTREAM reduce using rule 47 (MixinMember -> Attribute .) - OBJECT reduce using rule 47 (MixinMember -> Attribute .) - SEQUENCE reduce using rule 47 (MixinMember -> Attribute .) - RECORD reduce using rule 47 (MixinMember -> Attribute .) - BOOLEAN reduce using rule 47 (MixinMember -> Attribute .) - BYTE reduce using rule 47 (MixinMember -> Attribute .) - OCTET reduce using rule 47 (MixinMember -> Attribute .) - FLOAT reduce using rule 47 (MixinMember -> Attribute .) - UNRESTRICTED reduce using rule 47 (MixinMember -> Attribute .) - DOUBLE reduce using rule 47 (MixinMember -> Attribute .) - UNSIGNED reduce using rule 47 (MixinMember -> Attribute .) - DOMSTRING reduce using rule 47 (MixinMember -> Attribute .) - BYTESTRING reduce using rule 47 (MixinMember -> Attribute .) - USVSTRING reduce using rule 47 (MixinMember -> Attribute .) - UTF8STRING reduce using rule 47 (MixinMember -> Attribute .) - JSSTRING reduce using rule 47 (MixinMember -> Attribute .) - SCOPE reduce using rule 47 (MixinMember -> Attribute .) - IDENTIFIER reduce using rule 47 (MixinMember -> Attribute .) - SHORT reduce using rule 47 (MixinMember -> Attribute .) - LONG reduce using rule 47 (MixinMember -> Attribute .) - ATTRIBUTE reduce using rule 47 (MixinMember -> Attribute .) - RBRACE reduce using rule 47 (MixinMember -> Attribute .) - - -state 243 - - (48) MixinMember -> Operation . - - LBRACKET reduce using rule 48 (MixinMember -> Operation .) - CONST reduce using rule 48 (MixinMember -> Operation .) - INHERIT reduce using rule 48 (MixinMember -> Operation .) - STRINGIFIER reduce using rule 48 (MixinMember -> Operation .) - STATIC reduce using rule 48 (MixinMember -> Operation .) - READONLY reduce using rule 48 (MixinMember -> Operation .) - GETTER reduce using rule 48 (MixinMember -> Operation .) - SETTER reduce using rule 48 (MixinMember -> Operation .) - DELETER reduce using rule 48 (MixinMember -> Operation .) - LEGACYCALLER reduce using rule 48 (MixinMember -> Operation .) - VOID reduce using rule 48 (MixinMember -> Operation .) - ANY reduce using rule 48 (MixinMember -> Operation .) - PROMISE reduce using rule 48 (MixinMember -> Operation .) - LPAREN reduce using rule 48 (MixinMember -> Operation .) - ARRAYBUFFER reduce using rule 48 (MixinMember -> Operation .) - READABLESTREAM reduce using rule 48 (MixinMember -> Operation .) - OBJECT reduce using rule 48 (MixinMember -> Operation .) - SEQUENCE reduce using rule 48 (MixinMember -> Operation .) - RECORD reduce using rule 48 (MixinMember -> Operation .) - BOOLEAN reduce using rule 48 (MixinMember -> Operation .) - BYTE reduce using rule 48 (MixinMember -> Operation .) - OCTET reduce using rule 48 (MixinMember -> Operation .) - FLOAT reduce using rule 48 (MixinMember -> Operation .) - UNRESTRICTED reduce using rule 48 (MixinMember -> Operation .) - DOUBLE reduce using rule 48 (MixinMember -> Operation .) - UNSIGNED reduce using rule 48 (MixinMember -> Operation .) - DOMSTRING reduce using rule 48 (MixinMember -> Operation .) - BYTESTRING reduce using rule 48 (MixinMember -> Operation .) - USVSTRING reduce using rule 48 (MixinMember -> Operation .) - UTF8STRING reduce using rule 48 (MixinMember -> Operation .) - JSSTRING reduce using rule 48 (MixinMember -> Operation .) - SCOPE reduce using rule 48 (MixinMember -> Operation .) - IDENTIFIER reduce using rule 48 (MixinMember -> Operation .) - SHORT reduce using rule 48 (MixinMember -> Operation .) - LONG reduce using rule 48 (MixinMember -> Operation .) - ATTRIBUTE reduce using rule 48 (MixinMember -> Operation .) - RBRACE reduce using rule 48 (MixinMember -> Operation .) - - -state 244 - - (92) AttributeRest -> ReadOnly . ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON - - ATTRIBUTE shift and go to state 255 - - -state 245 - - (22) Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - ENUM reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - $end reduce using rule 22 (Namespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - - -state 246 - - (35) InterfaceMembers -> ExtendedAttributeList InterfaceMember InterfaceMembers . - - RBRACE reduce using rule 35 (InterfaceMembers -> ExtendedAttributeList InterfaceMember InterfaceMembers .) - - -state 247 - - (39) Constructor -> CONSTRUCTOR LPAREN . ArgumentList RPAREN SEMICOLON - (110) ArgumentList -> . Argument Arguments - (111) ArgumentList -> . - (114) Argument -> . ExtendedAttributeList ArgumentRest - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RPAREN reduce using rule 111 (ArgumentList -> .) - LBRACKET shift and go to state 3 - OPTIONAL reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ArgumentList shift and go to state 322 - Argument shift and go to state 123 - ExtendedAttributeList shift and go to state 124 - -state 248 - - (73) Const -> CONST ConstType . IDENTIFIER EQUALS ConstValue SEMICOLON - - IDENTIFIER shift and go to state 323 - - -state 249 - - (227) ConstType -> IDENTIFIER . - - IDENTIFIER reduce using rule 227 (ConstType -> IDENTIFIER .) - - -state 250 - - (226) ConstType -> PrimitiveType . - - IDENTIFIER reduce using rule 226 (ConstType -> PrimitiveType .) - - -state 251 - - (89) Attribute -> Qualifier AttributeRest . - - LBRACKET reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - CONSTRUCTOR reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - CONST reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - INHERIT reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - ITERABLE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - STRINGIFIER reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - STATIC reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - READONLY reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - GETTER reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - SETTER reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - DELETER reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - LEGACYCALLER reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - MAPLIKE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - SETLIKE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - ATTRIBUTE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - VOID reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - ANY reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - PROMISE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - LPAREN reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - ARRAYBUFFER reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - READABLESTREAM reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - OBJECT reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - SEQUENCE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - RECORD reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - BOOLEAN reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - BYTE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - OCTET reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - FLOAT reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - UNRESTRICTED reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - DOUBLE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - UNSIGNED reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - DOMSTRING reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - BYTESTRING reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - USVSTRING reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - UTF8STRING reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - JSSTRING reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - SCOPE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - IDENTIFIER reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - SHORT reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - LONG reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - RBRACE reduce using rule 89 (Attribute -> Qualifier AttributeRest .) - - -state 252 - - (90) Attribute -> INHERIT AttributeRest . - - LBRACKET reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - CONSTRUCTOR reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - CONST reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - INHERIT reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - ITERABLE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - STRINGIFIER reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - STATIC reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - READONLY reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - GETTER reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - SETTER reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - DELETER reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - LEGACYCALLER reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - MAPLIKE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - SETLIKE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - ATTRIBUTE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - VOID reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - ANY reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - PROMISE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - LPAREN reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - ARRAYBUFFER reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - READABLESTREAM reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - OBJECT reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - SEQUENCE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - RECORD reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - BOOLEAN reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - BYTE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - OCTET reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - FLOAT reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - UNRESTRICTED reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - DOUBLE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - UNSIGNED reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - DOMSTRING reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - BYTESTRING reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - USVSTRING reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - UTF8STRING reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - JSSTRING reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - SCOPE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - IDENTIFIER reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - SHORT reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - LONG reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - RBRACE reduce using rule 90 (Attribute -> INHERIT AttributeRest .) - - -state 253 - - (88) Maplike -> ReadOnly MAPLIKE . LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - - LT shift and go to state 324 - - -state 254 - - (87) Setlike -> ReadOnly SETLIKE . LT TypeWithExtendedAttributes GT SEMICOLON - - LT shift and go to state 325 - - -state 255 - - (92) AttributeRest -> ReadOnly ATTRIBUTE . TypeWithExtendedAttributes AttributeName SEMICOLON - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 326 - ExtendedAttributeList shift and go to state 59 - -state 256 - - (85) Iterable -> ITERABLE LT . TypeWithExtendedAttributes GT SEMICOLON - (86) Iterable -> ITERABLE LT . TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 327 - ExtendedAttributeList shift and go to state 59 - -state 257 - - (95) Operation -> Qualifiers OperationRest . - - LBRACKET reduce using rule 95 (Operation -> Qualifiers OperationRest .) - CONSTRUCTOR reduce using rule 95 (Operation -> Qualifiers OperationRest .) - CONST reduce using rule 95 (Operation -> Qualifiers OperationRest .) - INHERIT reduce using rule 95 (Operation -> Qualifiers OperationRest .) - ITERABLE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - STRINGIFIER reduce using rule 95 (Operation -> Qualifiers OperationRest .) - STATIC reduce using rule 95 (Operation -> Qualifiers OperationRest .) - READONLY reduce using rule 95 (Operation -> Qualifiers OperationRest .) - GETTER reduce using rule 95 (Operation -> Qualifiers OperationRest .) - SETTER reduce using rule 95 (Operation -> Qualifiers OperationRest .) - DELETER reduce using rule 95 (Operation -> Qualifiers OperationRest .) - LEGACYCALLER reduce using rule 95 (Operation -> Qualifiers OperationRest .) - MAPLIKE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - SETLIKE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - ATTRIBUTE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - VOID reduce using rule 95 (Operation -> Qualifiers OperationRest .) - ANY reduce using rule 95 (Operation -> Qualifiers OperationRest .) - PROMISE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - LPAREN reduce using rule 95 (Operation -> Qualifiers OperationRest .) - ARRAYBUFFER reduce using rule 95 (Operation -> Qualifiers OperationRest .) - READABLESTREAM reduce using rule 95 (Operation -> Qualifiers OperationRest .) - OBJECT reduce using rule 95 (Operation -> Qualifiers OperationRest .) - SEQUENCE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - RECORD reduce using rule 95 (Operation -> Qualifiers OperationRest .) - BOOLEAN reduce using rule 95 (Operation -> Qualifiers OperationRest .) - BYTE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - OCTET reduce using rule 95 (Operation -> Qualifiers OperationRest .) - FLOAT reduce using rule 95 (Operation -> Qualifiers OperationRest .) - UNRESTRICTED reduce using rule 95 (Operation -> Qualifiers OperationRest .) - DOUBLE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - UNSIGNED reduce using rule 95 (Operation -> Qualifiers OperationRest .) - DOMSTRING reduce using rule 95 (Operation -> Qualifiers OperationRest .) - BYTESTRING reduce using rule 95 (Operation -> Qualifiers OperationRest .) - USVSTRING reduce using rule 95 (Operation -> Qualifiers OperationRest .) - UTF8STRING reduce using rule 95 (Operation -> Qualifiers OperationRest .) - JSSTRING reduce using rule 95 (Operation -> Qualifiers OperationRest .) - SCOPE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - IDENTIFIER reduce using rule 95 (Operation -> Qualifiers OperationRest .) - SHORT reduce using rule 95 (Operation -> Qualifiers OperationRest .) - LONG reduce using rule 95 (Operation -> Qualifiers OperationRest .) - RBRACE reduce using rule 95 (Operation -> Qualifiers OperationRest .) - - -state 258 - - (107) OperationRest -> ReturnType . OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON - (108) OptionalIdentifier -> . IDENTIFIER - (109) OptionalIdentifier -> . - - IDENTIFIER shift and go to state 329 - LPAREN reduce using rule 109 (OptionalIdentifier -> .) - - OptionalIdentifier shift and go to state 328 - -state 259 - - (96) Operation -> STRINGIFIER SEMICOLON . - - LBRACKET reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - CONSTRUCTOR reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - CONST reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - INHERIT reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - ITERABLE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - STRINGIFIER reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - STATIC reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - READONLY reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - GETTER reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - SETTER reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - DELETER reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - LEGACYCALLER reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - MAPLIKE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - SETLIKE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - ATTRIBUTE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - VOID reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - ANY reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - PROMISE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - LPAREN reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - ARRAYBUFFER reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - READABLESTREAM reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - OBJECT reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - SEQUENCE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - RECORD reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - BOOLEAN reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - BYTE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - OCTET reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - FLOAT reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - UNRESTRICTED reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - DOUBLE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - UNSIGNED reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - DOMSTRING reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - BYTESTRING reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - USVSTRING reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - UTF8STRING reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - JSSTRING reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - SCOPE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - IDENTIFIER reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - SHORT reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - LONG reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - RBRACE reduce using rule 96 (Operation -> STRINGIFIER SEMICOLON .) - - -state 260 - - (101) Specials -> Special Specials . - - VOID reduce using rule 101 (Specials -> Special Specials .) - ANY reduce using rule 101 (Specials -> Special Specials .) - PROMISE reduce using rule 101 (Specials -> Special Specials .) - LPAREN reduce using rule 101 (Specials -> Special Specials .) - ARRAYBUFFER reduce using rule 101 (Specials -> Special Specials .) - READABLESTREAM reduce using rule 101 (Specials -> Special Specials .) - OBJECT reduce using rule 101 (Specials -> Special Specials .) - SEQUENCE reduce using rule 101 (Specials -> Special Specials .) - RECORD reduce using rule 101 (Specials -> Special Specials .) - BOOLEAN reduce using rule 101 (Specials -> Special Specials .) - BYTE reduce using rule 101 (Specials -> Special Specials .) - OCTET reduce using rule 101 (Specials -> Special Specials .) - FLOAT reduce using rule 101 (Specials -> Special Specials .) - UNRESTRICTED reduce using rule 101 (Specials -> Special Specials .) - DOUBLE reduce using rule 101 (Specials -> Special Specials .) - UNSIGNED reduce using rule 101 (Specials -> Special Specials .) - DOMSTRING reduce using rule 101 (Specials -> Special Specials .) - BYTESTRING reduce using rule 101 (Specials -> Special Specials .) - USVSTRING reduce using rule 101 (Specials -> Special Specials .) - UTF8STRING reduce using rule 101 (Specials -> Special Specials .) - JSSTRING reduce using rule 101 (Specials -> Special Specials .) - SCOPE reduce using rule 101 (Specials -> Special Specials .) - IDENTIFIER reduce using rule 101 (Specials -> Special Specials .) - SHORT reduce using rule 101 (Specials -> Special Specials .) - LONG reduce using rule 101 (Specials -> Special Specials .) - - -state 261 - - (29) PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 330 - - -state 262 - - (40) PartialInterfaceMembers -> ExtendedAttributeList PartialInterfaceMember . PartialInterfaceMembers - (40) PartialInterfaceMembers -> . ExtendedAttributeList PartialInterfaceMember PartialInterfaceMembers - (41) PartialInterfaceMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 41 (PartialInterfaceMembers -> .) - LBRACKET shift and go to state 3 - CONST reduce using rule 157 (ExtendedAttributeList -> .) - INHERIT reduce using rule 157 (ExtendedAttributeList -> .) - ITERABLE reduce using rule 157 (ExtendedAttributeList -> .) - STRINGIFIER reduce using rule 157 (ExtendedAttributeList -> .) - STATIC reduce using rule 157 (ExtendedAttributeList -> .) - READONLY reduce using rule 157 (ExtendedAttributeList -> .) - GETTER reduce using rule 157 (ExtendedAttributeList -> .) - SETTER reduce using rule 157 (ExtendedAttributeList -> .) - DELETER reduce using rule 157 (ExtendedAttributeList -> .) - LEGACYCALLER reduce using rule 157 (ExtendedAttributeList -> .) - MAPLIKE reduce using rule 157 (ExtendedAttributeList -> .) - SETLIKE reduce using rule 157 (ExtendedAttributeList -> .) - ATTRIBUTE reduce using rule 157 (ExtendedAttributeList -> .) - VOID reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ExtendedAttributeList shift and go to state 211 - PartialInterfaceMembers shift and go to state 331 - -state 263 - - (30) PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers . RBRACE SEMICOLON - - RBRACE shift and go to state 332 - - -state 264 - - (31) PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 333 - - -state 265 - - (32) PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 334 - - -state 266 - - (50) DictionaryMembers -> ExtendedAttributeList DictionaryMember . DictionaryMembers - (50) DictionaryMembers -> . ExtendedAttributeList DictionaryMember DictionaryMembers - (51) DictionaryMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 51 (DictionaryMembers -> .) - LBRACKET shift and go to state 3 - REQUIRED reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ExtendedAttributeList shift and go to state 215 - DictionaryMembers shift and go to state 335 - -state 267 - - (52) DictionaryMember -> REQUIRED . TypeWithExtendedAttributes IDENTIFIER SEMICOLON - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 336 - ExtendedAttributeList shift and go to state 59 - -state 268 - - (53) DictionaryMember -> Type . IDENTIFIER Default SEMICOLON - - IDENTIFIER shift and go to state 337 - - -state 269 - - (49) Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 338 - - -state 270 - - (60) Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 339 - - -state 271 - - (69) ExceptionMembers -> ExtendedAttributeList ExceptionMember . ExceptionMembers - (69) ExceptionMembers -> . ExtendedAttributeList ExceptionMember ExceptionMembers - (70) ExceptionMembers -> . - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RBRACE reduce using rule 70 (ExceptionMembers -> .) - LBRACKET shift and go to state 3 - CONST reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ExtendedAttributeList shift and go to state 218 - ExceptionMembers shift and go to state 340 - -state 272 - - (153) ExceptionMember -> Const . - - LBRACKET reduce using rule 153 (ExceptionMember -> Const .) - CONST reduce using rule 153 (ExceptionMember -> Const .) - ANY reduce using rule 153 (ExceptionMember -> Const .) - PROMISE reduce using rule 153 (ExceptionMember -> Const .) - LPAREN reduce using rule 153 (ExceptionMember -> Const .) - ARRAYBUFFER reduce using rule 153 (ExceptionMember -> Const .) - READABLESTREAM reduce using rule 153 (ExceptionMember -> Const .) - OBJECT reduce using rule 153 (ExceptionMember -> Const .) - SEQUENCE reduce using rule 153 (ExceptionMember -> Const .) - RECORD reduce using rule 153 (ExceptionMember -> Const .) - BOOLEAN reduce using rule 153 (ExceptionMember -> Const .) - BYTE reduce using rule 153 (ExceptionMember -> Const .) - OCTET reduce using rule 153 (ExceptionMember -> Const .) - FLOAT reduce using rule 153 (ExceptionMember -> Const .) - UNRESTRICTED reduce using rule 153 (ExceptionMember -> Const .) - DOUBLE reduce using rule 153 (ExceptionMember -> Const .) - UNSIGNED reduce using rule 153 (ExceptionMember -> Const .) - DOMSTRING reduce using rule 153 (ExceptionMember -> Const .) - BYTESTRING reduce using rule 153 (ExceptionMember -> Const .) - USVSTRING reduce using rule 153 (ExceptionMember -> Const .) - UTF8STRING reduce using rule 153 (ExceptionMember -> Const .) - JSSTRING reduce using rule 153 (ExceptionMember -> Const .) - SCOPE reduce using rule 153 (ExceptionMember -> Const .) - IDENTIFIER reduce using rule 153 (ExceptionMember -> Const .) - SHORT reduce using rule 153 (ExceptionMember -> Const .) - LONG reduce using rule 153 (ExceptionMember -> Const .) - RBRACE reduce using rule 153 (ExceptionMember -> Const .) - - -state 273 - - (154) ExceptionMember -> ExceptionField . - - LBRACKET reduce using rule 154 (ExceptionMember -> ExceptionField .) - CONST reduce using rule 154 (ExceptionMember -> ExceptionField .) - ANY reduce using rule 154 (ExceptionMember -> ExceptionField .) - PROMISE reduce using rule 154 (ExceptionMember -> ExceptionField .) - LPAREN reduce using rule 154 (ExceptionMember -> ExceptionField .) - ARRAYBUFFER reduce using rule 154 (ExceptionMember -> ExceptionField .) - READABLESTREAM reduce using rule 154 (ExceptionMember -> ExceptionField .) - OBJECT reduce using rule 154 (ExceptionMember -> ExceptionField .) - SEQUENCE reduce using rule 154 (ExceptionMember -> ExceptionField .) - RECORD reduce using rule 154 (ExceptionMember -> ExceptionField .) - BOOLEAN reduce using rule 154 (ExceptionMember -> ExceptionField .) - BYTE reduce using rule 154 (ExceptionMember -> ExceptionField .) - OCTET reduce using rule 154 (ExceptionMember -> ExceptionField .) - FLOAT reduce using rule 154 (ExceptionMember -> ExceptionField .) - UNRESTRICTED reduce using rule 154 (ExceptionMember -> ExceptionField .) - DOUBLE reduce using rule 154 (ExceptionMember -> ExceptionField .) - UNSIGNED reduce using rule 154 (ExceptionMember -> ExceptionField .) - DOMSTRING reduce using rule 154 (ExceptionMember -> ExceptionField .) - BYTESTRING reduce using rule 154 (ExceptionMember -> ExceptionField .) - USVSTRING reduce using rule 154 (ExceptionMember -> ExceptionField .) - UTF8STRING reduce using rule 154 (ExceptionMember -> ExceptionField .) - JSSTRING reduce using rule 154 (ExceptionMember -> ExceptionField .) - SCOPE reduce using rule 154 (ExceptionMember -> ExceptionField .) - IDENTIFIER reduce using rule 154 (ExceptionMember -> ExceptionField .) - SHORT reduce using rule 154 (ExceptionMember -> ExceptionField .) - LONG reduce using rule 154 (ExceptionMember -> ExceptionField .) - RBRACE reduce using rule 154 (ExceptionMember -> ExceptionField .) - - -state 274 - - (155) ExceptionField -> Type . IDENTIFIER SEMICOLON - - IDENTIFIER shift and go to state 341 - - -state 275 - - (61) Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON . - - LBRACKET reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - CALLBACK reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - INTERFACE reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - NAMESPACE reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - PARTIAL reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - DICTIONARY reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - EXCEPTION reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - ENUM reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - TYPEDEF reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - SCOPE reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - $end reduce using rule 61 (Enum -> ENUM IDENTIFIER LBRACE EnumValueList RBRACE SEMICOLON .) - - -state 276 - - (63) EnumValueListComma -> COMMA EnumValueListString . - - RBRACE reduce using rule 63 (EnumValueListComma -> COMMA EnumValueListString .) - - -state 277 - - (65) EnumValueListString -> STRING . EnumValueListComma - (63) EnumValueListComma -> . COMMA EnumValueListString - (64) EnumValueListComma -> . - - COMMA shift and go to state 221 - RBRACE reduce using rule 64 (EnumValueListComma -> .) - - EnumValueListComma shift and go to state 342 - -state 278 - - (212) SingleType -> PROMISE LT ReturnType GT . - - IDENTIFIER reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - GT reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - ASYNC reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - ATTRIBUTE reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - CALLBACK reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - CONST reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - CONSTRUCTOR reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - DELETER reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - DICTIONARY reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - ENUM reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - EXCEPTION reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - GETTER reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - INCLUDES reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - INHERIT reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - INTERFACE reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - ITERABLE reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - LEGACYCALLER reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - MAPLIKE reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - MIXIN reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - NAMESPACE reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - PARTIAL reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - READONLY reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - REQUIRED reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - SERIALIZER reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - SETLIKE reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - SETTER reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - STATIC reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - STRINGIFIER reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - TYPEDEF reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - UNRESTRICTED reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - COMMA reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - LPAREN reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - ELLIPSIS reduce using rule 212 (SingleType -> PROMISE LT ReturnType GT .) - - -state 279 - - (213) UnionType -> LPAREN UnionMemberType OR UnionMemberType . UnionMemberTypes RPAREN - (216) UnionMemberTypes -> . OR UnionMemberType UnionMemberTypes - (217) UnionMemberTypes -> . - - OR shift and go to state 343 - RPAREN reduce using rule 217 (UnionMemberTypes -> .) - - UnionMemberTypes shift and go to state 344 - -state 280 - - (223) DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 345 - -state 281 - - (224) DistinguishableType -> RECORD LT StringType COMMA . TypeWithExtendedAttributes GT Null - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 346 - ExtendedAttributeList shift and go to state 59 - -state 282 - - (112) Arguments -> COMMA Argument Arguments . - - RPAREN reduce using rule 112 (Arguments -> COMMA Argument Arguments .) - - -state 283 - - (115) ArgumentRest -> OPTIONAL TypeWithExtendedAttributes ArgumentName . Default - (54) Default -> . EQUALS DefaultValue - (55) Default -> . - - EQUALS shift and go to state 348 - COMMA reduce using rule 55 (Default -> .) - RPAREN reduce using rule 55 (Default -> .) - - Default shift and go to state 347 - -state 284 - - (117) ArgumentName -> IDENTIFIER . - - EQUALS reduce using rule 117 (ArgumentName -> IDENTIFIER .) - COMMA reduce using rule 117 (ArgumentName -> IDENTIFIER .) - RPAREN reduce using rule 117 (ArgumentName -> IDENTIFIER .) - - -state 285 - - (118) ArgumentName -> ArgumentNameKeyword . - - EQUALS reduce using rule 118 (ArgumentName -> ArgumentNameKeyword .) - COMMA reduce using rule 118 (ArgumentName -> ArgumentNameKeyword .) - RPAREN reduce using rule 118 (ArgumentName -> ArgumentNameKeyword .) - - -state 286 - - (119) ArgumentNameKeyword -> ASYNC . - - EQUALS reduce using rule 119 (ArgumentNameKeyword -> ASYNC .) - COMMA reduce using rule 119 (ArgumentNameKeyword -> ASYNC .) - RPAREN reduce using rule 119 (ArgumentNameKeyword -> ASYNC .) - - -state 287 - - (120) ArgumentNameKeyword -> ATTRIBUTE . - - EQUALS reduce using rule 120 (ArgumentNameKeyword -> ATTRIBUTE .) - COMMA reduce using rule 120 (ArgumentNameKeyword -> ATTRIBUTE .) - RPAREN reduce using rule 120 (ArgumentNameKeyword -> ATTRIBUTE .) - - -state 288 - - (121) ArgumentNameKeyword -> CALLBACK . - - EQUALS reduce using rule 121 (ArgumentNameKeyword -> CALLBACK .) - COMMA reduce using rule 121 (ArgumentNameKeyword -> CALLBACK .) - RPAREN reduce using rule 121 (ArgumentNameKeyword -> CALLBACK .) - - -state 289 - - (122) ArgumentNameKeyword -> CONST . - - EQUALS reduce using rule 122 (ArgumentNameKeyword -> CONST .) - COMMA reduce using rule 122 (ArgumentNameKeyword -> CONST .) - RPAREN reduce using rule 122 (ArgumentNameKeyword -> CONST .) - - -state 290 - - (123) ArgumentNameKeyword -> CONSTRUCTOR . - - EQUALS reduce using rule 123 (ArgumentNameKeyword -> CONSTRUCTOR .) - COMMA reduce using rule 123 (ArgumentNameKeyword -> CONSTRUCTOR .) - RPAREN reduce using rule 123 (ArgumentNameKeyword -> CONSTRUCTOR .) - - -state 291 - - (124) ArgumentNameKeyword -> DELETER . - - EQUALS reduce using rule 124 (ArgumentNameKeyword -> DELETER .) - COMMA reduce using rule 124 (ArgumentNameKeyword -> DELETER .) - RPAREN reduce using rule 124 (ArgumentNameKeyword -> DELETER .) - - -state 292 - - (125) ArgumentNameKeyword -> DICTIONARY . - - EQUALS reduce using rule 125 (ArgumentNameKeyword -> DICTIONARY .) - COMMA reduce using rule 125 (ArgumentNameKeyword -> DICTIONARY .) - RPAREN reduce using rule 125 (ArgumentNameKeyword -> DICTIONARY .) - - -state 293 - - (126) ArgumentNameKeyword -> ENUM . - - EQUALS reduce using rule 126 (ArgumentNameKeyword -> ENUM .) - COMMA reduce using rule 126 (ArgumentNameKeyword -> ENUM .) - RPAREN reduce using rule 126 (ArgumentNameKeyword -> ENUM .) - - -state 294 - - (127) ArgumentNameKeyword -> EXCEPTION . - - EQUALS reduce using rule 127 (ArgumentNameKeyword -> EXCEPTION .) - COMMA reduce using rule 127 (ArgumentNameKeyword -> EXCEPTION .) - RPAREN reduce using rule 127 (ArgumentNameKeyword -> EXCEPTION .) - - -state 295 - - (128) ArgumentNameKeyword -> GETTER . - - EQUALS reduce using rule 128 (ArgumentNameKeyword -> GETTER .) - COMMA reduce using rule 128 (ArgumentNameKeyword -> GETTER .) - RPAREN reduce using rule 128 (ArgumentNameKeyword -> GETTER .) - - -state 296 - - (129) ArgumentNameKeyword -> INCLUDES . - - EQUALS reduce using rule 129 (ArgumentNameKeyword -> INCLUDES .) - COMMA reduce using rule 129 (ArgumentNameKeyword -> INCLUDES .) - RPAREN reduce using rule 129 (ArgumentNameKeyword -> INCLUDES .) - - -state 297 - - (130) ArgumentNameKeyword -> INHERIT . - - EQUALS reduce using rule 130 (ArgumentNameKeyword -> INHERIT .) - COMMA reduce using rule 130 (ArgumentNameKeyword -> INHERIT .) - RPAREN reduce using rule 130 (ArgumentNameKeyword -> INHERIT .) - - -state 298 - - (131) ArgumentNameKeyword -> INTERFACE . - - EQUALS reduce using rule 131 (ArgumentNameKeyword -> INTERFACE .) - COMMA reduce using rule 131 (ArgumentNameKeyword -> INTERFACE .) - RPAREN reduce using rule 131 (ArgumentNameKeyword -> INTERFACE .) - - -state 299 - - (132) ArgumentNameKeyword -> ITERABLE . - - EQUALS reduce using rule 132 (ArgumentNameKeyword -> ITERABLE .) - COMMA reduce using rule 132 (ArgumentNameKeyword -> ITERABLE .) - RPAREN reduce using rule 132 (ArgumentNameKeyword -> ITERABLE .) - - -state 300 - - (133) ArgumentNameKeyword -> LEGACYCALLER . - - EQUALS reduce using rule 133 (ArgumentNameKeyword -> LEGACYCALLER .) - COMMA reduce using rule 133 (ArgumentNameKeyword -> LEGACYCALLER .) - RPAREN reduce using rule 133 (ArgumentNameKeyword -> LEGACYCALLER .) - - -state 301 - - (134) ArgumentNameKeyword -> MAPLIKE . - - EQUALS reduce using rule 134 (ArgumentNameKeyword -> MAPLIKE .) - COMMA reduce using rule 134 (ArgumentNameKeyword -> MAPLIKE .) - RPAREN reduce using rule 134 (ArgumentNameKeyword -> MAPLIKE .) - - -state 302 - - (135) ArgumentNameKeyword -> MIXIN . - - EQUALS reduce using rule 135 (ArgumentNameKeyword -> MIXIN .) - COMMA reduce using rule 135 (ArgumentNameKeyword -> MIXIN .) - RPAREN reduce using rule 135 (ArgumentNameKeyword -> MIXIN .) - - -state 303 - - (136) ArgumentNameKeyword -> NAMESPACE . - - EQUALS reduce using rule 136 (ArgumentNameKeyword -> NAMESPACE .) - COMMA reduce using rule 136 (ArgumentNameKeyword -> NAMESPACE .) - RPAREN reduce using rule 136 (ArgumentNameKeyword -> NAMESPACE .) - - -state 304 - - (137) ArgumentNameKeyword -> PARTIAL . - - EQUALS reduce using rule 137 (ArgumentNameKeyword -> PARTIAL .) - COMMA reduce using rule 137 (ArgumentNameKeyword -> PARTIAL .) - RPAREN reduce using rule 137 (ArgumentNameKeyword -> PARTIAL .) - - -state 305 - - (138) ArgumentNameKeyword -> READONLY . - - EQUALS reduce using rule 138 (ArgumentNameKeyword -> READONLY .) - COMMA reduce using rule 138 (ArgumentNameKeyword -> READONLY .) - RPAREN reduce using rule 138 (ArgumentNameKeyword -> READONLY .) - - -state 306 - - (139) ArgumentNameKeyword -> REQUIRED . - - EQUALS reduce using rule 139 (ArgumentNameKeyword -> REQUIRED .) - COMMA reduce using rule 139 (ArgumentNameKeyword -> REQUIRED .) - RPAREN reduce using rule 139 (ArgumentNameKeyword -> REQUIRED .) - - -state 307 - - (140) ArgumentNameKeyword -> SERIALIZER . - - EQUALS reduce using rule 140 (ArgumentNameKeyword -> SERIALIZER .) - COMMA reduce using rule 140 (ArgumentNameKeyword -> SERIALIZER .) - RPAREN reduce using rule 140 (ArgumentNameKeyword -> SERIALIZER .) - - -state 308 - - (141) ArgumentNameKeyword -> SETLIKE . - - EQUALS reduce using rule 141 (ArgumentNameKeyword -> SETLIKE .) - COMMA reduce using rule 141 (ArgumentNameKeyword -> SETLIKE .) - RPAREN reduce using rule 141 (ArgumentNameKeyword -> SETLIKE .) - - -state 309 - - (142) ArgumentNameKeyword -> SETTER . - - EQUALS reduce using rule 142 (ArgumentNameKeyword -> SETTER .) - COMMA reduce using rule 142 (ArgumentNameKeyword -> SETTER .) - RPAREN reduce using rule 142 (ArgumentNameKeyword -> SETTER .) - - -state 310 - - (143) ArgumentNameKeyword -> STATIC . - - EQUALS reduce using rule 143 (ArgumentNameKeyword -> STATIC .) - COMMA reduce using rule 143 (ArgumentNameKeyword -> STATIC .) - RPAREN reduce using rule 143 (ArgumentNameKeyword -> STATIC .) - - -state 311 - - (144) ArgumentNameKeyword -> STRINGIFIER . - - EQUALS reduce using rule 144 (ArgumentNameKeyword -> STRINGIFIER .) - COMMA reduce using rule 144 (ArgumentNameKeyword -> STRINGIFIER .) - RPAREN reduce using rule 144 (ArgumentNameKeyword -> STRINGIFIER .) - - -state 312 - - (145) ArgumentNameKeyword -> TYPEDEF . - - EQUALS reduce using rule 145 (ArgumentNameKeyword -> TYPEDEF .) - COMMA reduce using rule 145 (ArgumentNameKeyword -> TYPEDEF .) - RPAREN reduce using rule 145 (ArgumentNameKeyword -> TYPEDEF .) - - -state 313 - - (146) ArgumentNameKeyword -> UNRESTRICTED . - - EQUALS reduce using rule 146 (ArgumentNameKeyword -> UNRESTRICTED .) - COMMA reduce using rule 146 (ArgumentNameKeyword -> UNRESTRICTED .) - RPAREN reduce using rule 146 (ArgumentNameKeyword -> UNRESTRICTED .) - - -state 314 - - (116) ArgumentRest -> Type Ellipsis ArgumentName . - - COMMA reduce using rule 116 (ArgumentRest -> Type Ellipsis ArgumentName .) - RPAREN reduce using rule 116 (ArgumentRest -> Type Ellipsis ArgumentName .) - - -state 315 - - (262) ExtendedAttributeNamedArgList -> IDENTIFIER EQUALS IDENTIFIER LPAREN ArgumentList RPAREN . - - COMMA reduce using rule 262 (ExtendedAttributeNamedArgList -> IDENTIFIER EQUALS IDENTIFIER LPAREN ArgumentList RPAREN .) - RBRACKET reduce using rule 262 (ExtendedAttributeNamedArgList -> IDENTIFIER EQUALS IDENTIFIER LPAREN ArgumentList RPAREN .) - - -state 316 - - (265) Identifiers -> COMMA IDENTIFIER . Identifiers - (265) Identifiers -> . COMMA IDENTIFIER Identifiers - (266) Identifiers -> . - - COMMA shift and go to state 234 - RPAREN reduce using rule 266 (Identifiers -> .) - - Identifiers shift and go to state 349 - -state 317 - - (67) CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN . SEMICOLON - - SEMICOLON shift and go to state 350 - - -state 318 - - (68) CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList . RPAREN SEMICOLON - - RPAREN shift and go to state 351 - - -state 319 - - (19) InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - ENUM reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - $end reduce using rule 19 (InterfaceRest -> IDENTIFIER Inheritance LBRACE InterfaceMembers RBRACE SEMICOLON .) - - -state 320 - - (21) MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - ENUM reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - $end reduce using rule 21 (MixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - - -state 321 - - (45) MixinMembers -> ExtendedAttributeList MixinMember MixinMembers . - - RBRACE reduce using rule 45 (MixinMembers -> ExtendedAttributeList MixinMember MixinMembers .) - - -state 322 - - (39) Constructor -> CONSTRUCTOR LPAREN ArgumentList . RPAREN SEMICOLON - - RPAREN shift and go to state 352 - - -state 323 - - (73) Const -> CONST ConstType IDENTIFIER . EQUALS ConstValue SEMICOLON - - EQUALS shift and go to state 353 - - -state 324 - - (88) Maplike -> ReadOnly MAPLIKE LT . TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 354 - ExtendedAttributeList shift and go to state 59 - -state 325 - - (87) Setlike -> ReadOnly SETLIKE LT . TypeWithExtendedAttributes GT SEMICOLON - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 355 - ExtendedAttributeList shift and go to state 59 - -state 326 - - (92) AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes . AttributeName SEMICOLON - (147) AttributeName -> . IDENTIFIER - (148) AttributeName -> . AttributeNameKeyword - (149) AttributeNameKeyword -> . ASYNC - (150) AttributeNameKeyword -> . REQUIRED - - IDENTIFIER shift and go to state 357 - ASYNC shift and go to state 359 - REQUIRED shift and go to state 360 - - AttributeName shift and go to state 356 - AttributeNameKeyword shift and go to state 358 - -state 327 - - (85) Iterable -> ITERABLE LT TypeWithExtendedAttributes . GT SEMICOLON - (86) Iterable -> ITERABLE LT TypeWithExtendedAttributes . COMMA TypeWithExtendedAttributes GT SEMICOLON - - GT shift and go to state 361 - COMMA shift and go to state 362 - - -state 328 - - (107) OperationRest -> ReturnType OptionalIdentifier . LPAREN ArgumentList RPAREN SEMICOLON - - LPAREN shift and go to state 363 - - -state 329 - - (108) OptionalIdentifier -> IDENTIFIER . - - LPAREN reduce using rule 108 (OptionalIdentifier -> IDENTIFIER .) - - -state 330 - - (29) PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - ENUM reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - $end reduce using rule 29 (PartialInterfaceRest -> IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON .) - - -state 331 - - (40) PartialInterfaceMembers -> ExtendedAttributeList PartialInterfaceMember PartialInterfaceMembers . - - RBRACE reduce using rule 40 (PartialInterfaceMembers -> ExtendedAttributeList PartialInterfaceMember PartialInterfaceMembers .) - - -state 332 - - (30) PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE . SEMICOLON - - SEMICOLON shift and go to state 364 - - -state 333 - - (31) PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - ENUM reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - $end reduce using rule 31 (PartialNamespace -> NAMESPACE IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON .) - - -state 334 - - (32) PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - ENUM reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - $end reduce using rule 32 (PartialDictionary -> DICTIONARY IDENTIFIER LBRACE DictionaryMembers RBRACE SEMICOLON .) - - -state 335 - - (50) DictionaryMembers -> ExtendedAttributeList DictionaryMember DictionaryMembers . - - RBRACE reduce using rule 50 (DictionaryMembers -> ExtendedAttributeList DictionaryMember DictionaryMembers .) - - -state 336 - - (52) DictionaryMember -> REQUIRED TypeWithExtendedAttributes . IDENTIFIER SEMICOLON - - IDENTIFIER shift and go to state 365 - - -state 337 - - (53) DictionaryMember -> Type IDENTIFIER . Default SEMICOLON - (54) Default -> . EQUALS DefaultValue - (55) Default -> . - - EQUALS shift and go to state 348 - SEMICOLON reduce using rule 55 (Default -> .) - - Default shift and go to state 366 - -state 338 - - (49) Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - ENUM reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - $end reduce using rule 49 (Dictionary -> DICTIONARY IDENTIFIER Inheritance LBRACE DictionaryMembers RBRACE SEMICOLON .) - - -state 339 - - (60) Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - ENUM reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - $end reduce using rule 60 (Exception -> EXCEPTION IDENTIFIER Inheritance LBRACE ExceptionMembers RBRACE SEMICOLON .) - - -state 340 - - (69) ExceptionMembers -> ExtendedAttributeList ExceptionMember ExceptionMembers . - - RBRACE reduce using rule 69 (ExceptionMembers -> ExtendedAttributeList ExceptionMember ExceptionMembers .) - - -state 341 - - (155) ExceptionField -> Type IDENTIFIER . SEMICOLON - - SEMICOLON shift and go to state 367 - - -state 342 - - (65) EnumValueListString -> STRING EnumValueListComma . - - RBRACE reduce using rule 65 (EnumValueListString -> STRING EnumValueListComma .) - - -state 343 - - (216) UnionMemberTypes -> OR . UnionMemberType UnionMemberTypes - (214) UnionMemberType -> . ExtendedAttributeList DistinguishableType - (215) UnionMemberType -> . UnionType Null - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - (213) UnionType -> . LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN - - LBRACKET shift and go to state 3 - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN shift and go to state 92 - - UnionMemberType shift and go to state 368 - ExtendedAttributeList shift and go to state 151 - UnionType shift and go to state 152 - -state 344 - - (213) UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes . RPAREN - - RPAREN shift and go to state 369 - - -state 345 - - (223) DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null . - - IDENTIFIER reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - GT reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - ASYNC reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - ATTRIBUTE reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - CALLBACK reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - CONST reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - CONSTRUCTOR reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - DELETER reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - DICTIONARY reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - ENUM reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - EXCEPTION reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - GETTER reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - INCLUDES reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - INHERIT reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - INTERFACE reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - ITERABLE reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - LEGACYCALLER reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - MAPLIKE reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - MIXIN reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - NAMESPACE reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - PARTIAL reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - READONLY reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - REQUIRED reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - SERIALIZER reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - SETLIKE reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - SETTER reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - STATIC reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - STRINGIFIER reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - TYPEDEF reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - UNRESTRICTED reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - COMMA reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - LPAREN reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - ELLIPSIS reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - OR reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - RPAREN reduce using rule 223 (DistinguishableType -> SEQUENCE LT TypeWithExtendedAttributes GT Null .) - - -state 346 - - (224) DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes . GT Null - - GT shift and go to state 370 - - -state 347 - - (115) ArgumentRest -> OPTIONAL TypeWithExtendedAttributes ArgumentName Default . - - COMMA reduce using rule 115 (ArgumentRest -> OPTIONAL TypeWithExtendedAttributes ArgumentName Default .) - RPAREN reduce using rule 115 (ArgumentRest -> OPTIONAL TypeWithExtendedAttributes ArgumentName Default .) - - -state 348 - - (54) Default -> EQUALS . DefaultValue - (56) DefaultValue -> . ConstValue - (57) DefaultValue -> . LBRACKET RBRACKET - (58) DefaultValue -> . LBRACE RBRACE - (59) DefaultValue -> . NULL - (74) ConstValue -> . BooleanLiteral - (75) ConstValue -> . INTEGER - (76) ConstValue -> . FLOATLITERAL - (77) ConstValue -> . STRING - (78) BooleanLiteral -> . TRUE - (79) BooleanLiteral -> . FALSE - - LBRACKET shift and go to state 373 - LBRACE shift and go to state 374 - NULL shift and go to state 375 - INTEGER shift and go to state 377 - FLOATLITERAL shift and go to state 378 - STRING shift and go to state 379 - TRUE shift and go to state 380 - FALSE shift and go to state 381 - - DefaultValue shift and go to state 371 - ConstValue shift and go to state 372 - BooleanLiteral shift and go to state 376 - -state 349 - - (265) Identifiers -> COMMA IDENTIFIER Identifiers . - - RPAREN reduce using rule 265 (Identifiers -> COMMA IDENTIFIER Identifiers .) - - -state 350 - - (67) CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON . - - LBRACKET reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - CALLBACK reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - INTERFACE reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - NAMESPACE reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - PARTIAL reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - DICTIONARY reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - EXCEPTION reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - ENUM reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - TYPEDEF reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - SCOPE reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - IDENTIFIER reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - $end reduce using rule 67 (CallbackRest -> IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - - -state 351 - - (68) CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN . SEMICOLON - - SEMICOLON shift and go to state 382 - - -state 352 - - (39) Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN . SEMICOLON - - SEMICOLON shift and go to state 383 - - -state 353 - - (73) Const -> CONST ConstType IDENTIFIER EQUALS . ConstValue SEMICOLON - (74) ConstValue -> . BooleanLiteral - (75) ConstValue -> . INTEGER - (76) ConstValue -> . FLOATLITERAL - (77) ConstValue -> . STRING - (78) BooleanLiteral -> . TRUE - (79) BooleanLiteral -> . FALSE - - INTEGER shift and go to state 377 - FLOATLITERAL shift and go to state 378 - STRING shift and go to state 379 - TRUE shift and go to state 380 - FALSE shift and go to state 381 - - ConstValue shift and go to state 384 - BooleanLiteral shift and go to state 376 - -state 354 - - (88) Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes . COMMA TypeWithExtendedAttributes GT SEMICOLON - - COMMA shift and go to state 385 - - -state 355 - - (87) Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes . GT SEMICOLON - - GT shift and go to state 386 - - -state 356 - - (92) AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName . SEMICOLON - - SEMICOLON shift and go to state 387 - - -state 357 - - (147) AttributeName -> IDENTIFIER . - - SEMICOLON reduce using rule 147 (AttributeName -> IDENTIFIER .) - - -state 358 - - (148) AttributeName -> AttributeNameKeyword . - - SEMICOLON reduce using rule 148 (AttributeName -> AttributeNameKeyword .) - - -state 359 - - (149) AttributeNameKeyword -> ASYNC . - - SEMICOLON reduce using rule 149 (AttributeNameKeyword -> ASYNC .) - - -state 360 - - (150) AttributeNameKeyword -> REQUIRED . - - SEMICOLON reduce using rule 150 (AttributeNameKeyword -> REQUIRED .) - - -state 361 - - (85) Iterable -> ITERABLE LT TypeWithExtendedAttributes GT . SEMICOLON - - SEMICOLON shift and go to state 388 - - -state 362 - - (86) Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA . TypeWithExtendedAttributes GT SEMICOLON - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 389 - ExtendedAttributeList shift and go to state 59 - -state 363 - - (107) OperationRest -> ReturnType OptionalIdentifier LPAREN . ArgumentList RPAREN SEMICOLON - (110) ArgumentList -> . Argument Arguments - (111) ArgumentList -> . - (114) Argument -> . ExtendedAttributeList ArgumentRest - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - RPAREN reduce using rule 111 (ArgumentList -> .) - LBRACKET shift and go to state 3 - OPTIONAL reduce using rule 157 (ExtendedAttributeList -> .) - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - ArgumentList shift and go to state 390 - Argument shift and go to state 123 - ExtendedAttributeList shift and go to state 124 - -state 364 - - (30) PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON . - - LBRACKET reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - CALLBACK reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - INTERFACE reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - NAMESPACE reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - PARTIAL reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - DICTIONARY reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - EXCEPTION reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - ENUM reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - TYPEDEF reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - SCOPE reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - IDENTIFIER reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - $end reduce using rule 30 (PartialMixinRest -> MIXIN IDENTIFIER LBRACE MixinMembers RBRACE SEMICOLON .) - - -state 365 - - (52) DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER . SEMICOLON - - SEMICOLON shift and go to state 391 - - -state 366 - - (53) DictionaryMember -> Type IDENTIFIER Default . SEMICOLON - - SEMICOLON shift and go to state 392 - - -state 367 - - (155) ExceptionField -> Type IDENTIFIER SEMICOLON . - - LBRACKET reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - CONST reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - ANY reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - PROMISE reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - LPAREN reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - ARRAYBUFFER reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - READABLESTREAM reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - OBJECT reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - SEQUENCE reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - RECORD reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - BOOLEAN reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - BYTE reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - OCTET reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - FLOAT reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - UNRESTRICTED reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - DOUBLE reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - UNSIGNED reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - DOMSTRING reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - BYTESTRING reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - USVSTRING reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - UTF8STRING reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - JSSTRING reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - SCOPE reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - IDENTIFIER reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - SHORT reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - LONG reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - RBRACE reduce using rule 155 (ExceptionField -> Type IDENTIFIER SEMICOLON .) - - -state 368 - - (216) UnionMemberTypes -> OR UnionMemberType . UnionMemberTypes - (216) UnionMemberTypes -> . OR UnionMemberType UnionMemberTypes - (217) UnionMemberTypes -> . - - OR shift and go to state 343 - RPAREN reduce using rule 217 (UnionMemberTypes -> .) - - UnionMemberTypes shift and go to state 393 - -state 369 - - (213) UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN . - - QUESTIONMARK reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - IDENTIFIER reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - GT reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - ASYNC reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - ATTRIBUTE reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - CALLBACK reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - CONST reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - CONSTRUCTOR reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - DELETER reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - DICTIONARY reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - ENUM reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - EXCEPTION reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - GETTER reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - INCLUDES reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - INHERIT reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - INTERFACE reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - ITERABLE reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - LEGACYCALLER reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - MAPLIKE reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - MIXIN reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - NAMESPACE reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - PARTIAL reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - READONLY reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - REQUIRED reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - SERIALIZER reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - SETLIKE reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - SETTER reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - STATIC reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - STRINGIFIER reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - TYPEDEF reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - UNRESTRICTED reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - COMMA reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - LPAREN reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - OR reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - ELLIPSIS reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - RPAREN reduce using rule 213 (UnionType -> LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN .) - - -state 370 - - (224) DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT . Null - (248) Null -> . QUESTIONMARK - (249) Null -> . - - QUESTIONMARK shift and go to state 148 - IDENTIFIER reduce using rule 249 (Null -> .) - GT reduce using rule 249 (Null -> .) - ASYNC reduce using rule 249 (Null -> .) - ATTRIBUTE reduce using rule 249 (Null -> .) - CALLBACK reduce using rule 249 (Null -> .) - CONST reduce using rule 249 (Null -> .) - CONSTRUCTOR reduce using rule 249 (Null -> .) - DELETER reduce using rule 249 (Null -> .) - DICTIONARY reduce using rule 249 (Null -> .) - ENUM reduce using rule 249 (Null -> .) - EXCEPTION reduce using rule 249 (Null -> .) - GETTER reduce using rule 249 (Null -> .) - INCLUDES reduce using rule 249 (Null -> .) - INHERIT reduce using rule 249 (Null -> .) - INTERFACE reduce using rule 249 (Null -> .) - ITERABLE reduce using rule 249 (Null -> .) - LEGACYCALLER reduce using rule 249 (Null -> .) - MAPLIKE reduce using rule 249 (Null -> .) - MIXIN reduce using rule 249 (Null -> .) - NAMESPACE reduce using rule 249 (Null -> .) - PARTIAL reduce using rule 249 (Null -> .) - READONLY reduce using rule 249 (Null -> .) - REQUIRED reduce using rule 249 (Null -> .) - SERIALIZER reduce using rule 249 (Null -> .) - SETLIKE reduce using rule 249 (Null -> .) - SETTER reduce using rule 249 (Null -> .) - STATIC reduce using rule 249 (Null -> .) - STRINGIFIER reduce using rule 249 (Null -> .) - TYPEDEF reduce using rule 249 (Null -> .) - UNRESTRICTED reduce using rule 249 (Null -> .) - COMMA reduce using rule 249 (Null -> .) - LPAREN reduce using rule 249 (Null -> .) - ELLIPSIS reduce using rule 249 (Null -> .) - OR reduce using rule 249 (Null -> .) - RPAREN reduce using rule 249 (Null -> .) - - Null shift and go to state 394 - -state 371 - - (54) Default -> EQUALS DefaultValue . - - COMMA reduce using rule 54 (Default -> EQUALS DefaultValue .) - RPAREN reduce using rule 54 (Default -> EQUALS DefaultValue .) - SEMICOLON reduce using rule 54 (Default -> EQUALS DefaultValue .) - - -state 372 - - (56) DefaultValue -> ConstValue . - - COMMA reduce using rule 56 (DefaultValue -> ConstValue .) - RPAREN reduce using rule 56 (DefaultValue -> ConstValue .) - SEMICOLON reduce using rule 56 (DefaultValue -> ConstValue .) - - -state 373 - - (57) DefaultValue -> LBRACKET . RBRACKET - - RBRACKET shift and go to state 395 - - -state 374 - - (58) DefaultValue -> LBRACE . RBRACE - - RBRACE shift and go to state 396 - - -state 375 - - (59) DefaultValue -> NULL . - - COMMA reduce using rule 59 (DefaultValue -> NULL .) - RPAREN reduce using rule 59 (DefaultValue -> NULL .) - SEMICOLON reduce using rule 59 (DefaultValue -> NULL .) - - -state 376 - - (74) ConstValue -> BooleanLiteral . - - COMMA reduce using rule 74 (ConstValue -> BooleanLiteral .) - RPAREN reduce using rule 74 (ConstValue -> BooleanLiteral .) - SEMICOLON reduce using rule 74 (ConstValue -> BooleanLiteral .) - - -state 377 - - (75) ConstValue -> INTEGER . - - COMMA reduce using rule 75 (ConstValue -> INTEGER .) - RPAREN reduce using rule 75 (ConstValue -> INTEGER .) - SEMICOLON reduce using rule 75 (ConstValue -> INTEGER .) - - -state 378 - - (76) ConstValue -> FLOATLITERAL . - - COMMA reduce using rule 76 (ConstValue -> FLOATLITERAL .) - RPAREN reduce using rule 76 (ConstValue -> FLOATLITERAL .) - SEMICOLON reduce using rule 76 (ConstValue -> FLOATLITERAL .) - - -state 379 - - (77) ConstValue -> STRING . - - COMMA reduce using rule 77 (ConstValue -> STRING .) - RPAREN reduce using rule 77 (ConstValue -> STRING .) - SEMICOLON reduce using rule 77 (ConstValue -> STRING .) - - -state 380 - - (78) BooleanLiteral -> TRUE . - - COMMA reduce using rule 78 (BooleanLiteral -> TRUE .) - RPAREN reduce using rule 78 (BooleanLiteral -> TRUE .) - SEMICOLON reduce using rule 78 (BooleanLiteral -> TRUE .) - - -state 381 - - (79) BooleanLiteral -> FALSE . - - COMMA reduce using rule 79 (BooleanLiteral -> FALSE .) - RPAREN reduce using rule 79 (BooleanLiteral -> FALSE .) - SEMICOLON reduce using rule 79 (BooleanLiteral -> FALSE .) - - -state 382 - - (68) CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON . - - LBRACKET reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - CALLBACK reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - INTERFACE reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - NAMESPACE reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - PARTIAL reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - DICTIONARY reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - EXCEPTION reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - ENUM reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - TYPEDEF reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - SCOPE reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - IDENTIFIER reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - $end reduce using rule 68 (CallbackConstructorRest -> CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON .) - - -state 383 - - (39) Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON . - - LBRACKET reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - CONSTRUCTOR reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - CONST reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - INHERIT reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - ITERABLE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - STRINGIFIER reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - STATIC reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - READONLY reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - GETTER reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - SETTER reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - DELETER reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - LEGACYCALLER reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - MAPLIKE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - SETLIKE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - ATTRIBUTE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - VOID reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - ANY reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - PROMISE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - LPAREN reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - ARRAYBUFFER reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - READABLESTREAM reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - OBJECT reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - SEQUENCE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - RECORD reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - BOOLEAN reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - BYTE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - OCTET reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - FLOAT reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - UNRESTRICTED reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - DOUBLE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - UNSIGNED reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - DOMSTRING reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - BYTESTRING reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - USVSTRING reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - UTF8STRING reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - JSSTRING reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - SCOPE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - IDENTIFIER reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - SHORT reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - LONG reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - RBRACE reduce using rule 39 (Constructor -> CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON .) - - -state 384 - - (73) Const -> CONST ConstType IDENTIFIER EQUALS ConstValue . SEMICOLON - - SEMICOLON shift and go to state 397 - - -state 385 - - (88) Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA . TypeWithExtendedAttributes GT SEMICOLON - (209) TypeWithExtendedAttributes -> . ExtendedAttributeList Type - (156) ExtendedAttributeList -> . LBRACKET ExtendedAttribute ExtendedAttributes RBRACKET - (157) ExtendedAttributeList -> . - - LBRACKET shift and go to state 3 - ANY reduce using rule 157 (ExtendedAttributeList -> .) - PROMISE reduce using rule 157 (ExtendedAttributeList -> .) - LPAREN reduce using rule 157 (ExtendedAttributeList -> .) - ARRAYBUFFER reduce using rule 157 (ExtendedAttributeList -> .) - READABLESTREAM reduce using rule 157 (ExtendedAttributeList -> .) - OBJECT reduce using rule 157 (ExtendedAttributeList -> .) - SEQUENCE reduce using rule 157 (ExtendedAttributeList -> .) - RECORD reduce using rule 157 (ExtendedAttributeList -> .) - BOOLEAN reduce using rule 157 (ExtendedAttributeList -> .) - BYTE reduce using rule 157 (ExtendedAttributeList -> .) - OCTET reduce using rule 157 (ExtendedAttributeList -> .) - FLOAT reduce using rule 157 (ExtendedAttributeList -> .) - UNRESTRICTED reduce using rule 157 (ExtendedAttributeList -> .) - DOUBLE reduce using rule 157 (ExtendedAttributeList -> .) - UNSIGNED reduce using rule 157 (ExtendedAttributeList -> .) - DOMSTRING reduce using rule 157 (ExtendedAttributeList -> .) - BYTESTRING reduce using rule 157 (ExtendedAttributeList -> .) - USVSTRING reduce using rule 157 (ExtendedAttributeList -> .) - UTF8STRING reduce using rule 157 (ExtendedAttributeList -> .) - JSSTRING reduce using rule 157 (ExtendedAttributeList -> .) - SCOPE reduce using rule 157 (ExtendedAttributeList -> .) - IDENTIFIER reduce using rule 157 (ExtendedAttributeList -> .) - SHORT reduce using rule 157 (ExtendedAttributeList -> .) - LONG reduce using rule 157 (ExtendedAttributeList -> .) - - TypeWithExtendedAttributes shift and go to state 398 - ExtendedAttributeList shift and go to state 59 - -state 386 - - (87) Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT . SEMICOLON - - SEMICOLON shift and go to state 399 - - -state 387 - - (92) AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON . - - LBRACKET reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - CONSTRUCTOR reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - CONST reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - INHERIT reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - ITERABLE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - STRINGIFIER reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - STATIC reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - READONLY reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - GETTER reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - SETTER reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - DELETER reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - LEGACYCALLER reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - MAPLIKE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - SETLIKE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - ATTRIBUTE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - VOID reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - ANY reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - PROMISE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - LPAREN reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - ARRAYBUFFER reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - READABLESTREAM reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - OBJECT reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - SEQUENCE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - RECORD reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - BOOLEAN reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - BYTE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - OCTET reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - FLOAT reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - UNRESTRICTED reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - DOUBLE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - UNSIGNED reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - DOMSTRING reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - BYTESTRING reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - USVSTRING reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - UTF8STRING reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - JSSTRING reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - SCOPE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - IDENTIFIER reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - SHORT reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - LONG reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - RBRACE reduce using rule 92 (AttributeRest -> ReadOnly ATTRIBUTE TypeWithExtendedAttributes AttributeName SEMICOLON .) - - -state 388 - - (85) Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON . - - LBRACKET reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - CONSTRUCTOR reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - CONST reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - INHERIT reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - ITERABLE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - STRINGIFIER reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - STATIC reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - READONLY reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - GETTER reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - SETTER reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - DELETER reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - LEGACYCALLER reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - MAPLIKE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - SETLIKE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - ATTRIBUTE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - VOID reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - ANY reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - PROMISE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - LPAREN reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - ARRAYBUFFER reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - READABLESTREAM reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - OBJECT reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - SEQUENCE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - RECORD reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - BOOLEAN reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - BYTE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - OCTET reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - FLOAT reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - UNRESTRICTED reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - DOUBLE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - UNSIGNED reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - DOMSTRING reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - BYTESTRING reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - USVSTRING reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - UTF8STRING reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - JSSTRING reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - SCOPE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - IDENTIFIER reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - SHORT reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - LONG reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - RBRACE reduce using rule 85 (Iterable -> ITERABLE LT TypeWithExtendedAttributes GT SEMICOLON .) - - -state 389 - - (86) Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes . GT SEMICOLON - - GT shift and go to state 400 - - -state 390 - - (107) OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList . RPAREN SEMICOLON - - RPAREN shift and go to state 401 - - -state 391 - - (52) DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON . - - LBRACKET reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - REQUIRED reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - ANY reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - PROMISE reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - LPAREN reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - ARRAYBUFFER reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - READABLESTREAM reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - OBJECT reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - SEQUENCE reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - RECORD reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - BOOLEAN reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - BYTE reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - OCTET reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - FLOAT reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - UNRESTRICTED reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - DOUBLE reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - UNSIGNED reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - DOMSTRING reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - BYTESTRING reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - USVSTRING reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - UTF8STRING reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - JSSTRING reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - SCOPE reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - IDENTIFIER reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - SHORT reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - LONG reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - RBRACE reduce using rule 52 (DictionaryMember -> REQUIRED TypeWithExtendedAttributes IDENTIFIER SEMICOLON .) - - -state 392 - - (53) DictionaryMember -> Type IDENTIFIER Default SEMICOLON . - - LBRACKET reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - REQUIRED reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - ANY reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - PROMISE reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - LPAREN reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - ARRAYBUFFER reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - READABLESTREAM reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - OBJECT reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - SEQUENCE reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - RECORD reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - BOOLEAN reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - BYTE reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - OCTET reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - FLOAT reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - UNRESTRICTED reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - DOUBLE reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - UNSIGNED reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - DOMSTRING reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - BYTESTRING reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - USVSTRING reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - UTF8STRING reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - JSSTRING reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - SCOPE reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - IDENTIFIER reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - SHORT reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - LONG reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - RBRACE reduce using rule 53 (DictionaryMember -> Type IDENTIFIER Default SEMICOLON .) - - -state 393 - - (216) UnionMemberTypes -> OR UnionMemberType UnionMemberTypes . - - RPAREN reduce using rule 216 (UnionMemberTypes -> OR UnionMemberType UnionMemberTypes .) - - -state 394 - - (224) DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null . - - IDENTIFIER reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - GT reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - ASYNC reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - ATTRIBUTE reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - CALLBACK reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - CONST reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - CONSTRUCTOR reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - DELETER reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - DICTIONARY reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - ENUM reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - EXCEPTION reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - GETTER reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - INCLUDES reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - INHERIT reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - INTERFACE reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - ITERABLE reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - LEGACYCALLER reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - MAPLIKE reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - MIXIN reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - NAMESPACE reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - PARTIAL reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - READONLY reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - REQUIRED reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - SERIALIZER reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - SETLIKE reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - SETTER reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - STATIC reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - STRINGIFIER reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - TYPEDEF reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - UNRESTRICTED reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - COMMA reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - LPAREN reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - ELLIPSIS reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - OR reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - RPAREN reduce using rule 224 (DistinguishableType -> RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null .) - - -state 395 - - (57) DefaultValue -> LBRACKET RBRACKET . - - COMMA reduce using rule 57 (DefaultValue -> LBRACKET RBRACKET .) - RPAREN reduce using rule 57 (DefaultValue -> LBRACKET RBRACKET .) - SEMICOLON reduce using rule 57 (DefaultValue -> LBRACKET RBRACKET .) - - -state 396 - - (58) DefaultValue -> LBRACE RBRACE . - - COMMA reduce using rule 58 (DefaultValue -> LBRACE RBRACE .) - RPAREN reduce using rule 58 (DefaultValue -> LBRACE RBRACE .) - SEMICOLON reduce using rule 58 (DefaultValue -> LBRACE RBRACE .) - - -state 397 - - (73) Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON . - - LBRACKET reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - CONSTRUCTOR reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - CONST reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - INHERIT reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - ITERABLE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - STRINGIFIER reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - STATIC reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - READONLY reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - GETTER reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - SETTER reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - DELETER reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - LEGACYCALLER reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - MAPLIKE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - SETLIKE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - ATTRIBUTE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - VOID reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - ANY reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - PROMISE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - LPAREN reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - ARRAYBUFFER reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - READABLESTREAM reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - OBJECT reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - SEQUENCE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - RECORD reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - BOOLEAN reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - BYTE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - OCTET reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - FLOAT reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - UNRESTRICTED reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - DOUBLE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - UNSIGNED reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - DOMSTRING reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - BYTESTRING reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - USVSTRING reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - UTF8STRING reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - JSSTRING reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - SCOPE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - IDENTIFIER reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - SHORT reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - LONG reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - RBRACE reduce using rule 73 (Const -> CONST ConstType IDENTIFIER EQUALS ConstValue SEMICOLON .) - - -state 398 - - (88) Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes . GT SEMICOLON - - GT shift and go to state 402 - - -state 399 - - (87) Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON . - - LBRACKET reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - CONSTRUCTOR reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - CONST reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - INHERIT reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - ITERABLE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - STRINGIFIER reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - STATIC reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - READONLY reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - GETTER reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - SETTER reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - DELETER reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - LEGACYCALLER reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - MAPLIKE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - SETLIKE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - ATTRIBUTE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - VOID reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - ANY reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - PROMISE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - LPAREN reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - ARRAYBUFFER reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - READABLESTREAM reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - OBJECT reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - SEQUENCE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - RECORD reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - BOOLEAN reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - BYTE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - OCTET reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - FLOAT reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - UNRESTRICTED reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - DOUBLE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - UNSIGNED reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - DOMSTRING reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - BYTESTRING reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - USVSTRING reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - UTF8STRING reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - JSSTRING reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - SCOPE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - IDENTIFIER reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - SHORT reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - LONG reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - RBRACE reduce using rule 87 (Setlike -> ReadOnly SETLIKE LT TypeWithExtendedAttributes GT SEMICOLON .) - - -state 400 - - (86) Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT . SEMICOLON - - SEMICOLON shift and go to state 403 - - -state 401 - - (107) OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN . SEMICOLON - - SEMICOLON shift and go to state 404 - - -state 402 - - (88) Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT . SEMICOLON - - SEMICOLON shift and go to state 405 - - -state 403 - - (86) Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON . - - LBRACKET reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - CONSTRUCTOR reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - CONST reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - INHERIT reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - ITERABLE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - STRINGIFIER reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - STATIC reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - READONLY reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - GETTER reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SETTER reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - DELETER reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - LEGACYCALLER reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - MAPLIKE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SETLIKE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - ATTRIBUTE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - VOID reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - ANY reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - PROMISE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - LPAREN reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - ARRAYBUFFER reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - READABLESTREAM reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - OBJECT reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SEQUENCE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - RECORD reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - BOOLEAN reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - BYTE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - OCTET reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - FLOAT reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - UNRESTRICTED reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - DOUBLE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - UNSIGNED reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - DOMSTRING reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - BYTESTRING reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - USVSTRING reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - UTF8STRING reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - JSSTRING reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SCOPE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - IDENTIFIER reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SHORT reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - LONG reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - RBRACE reduce using rule 86 (Iterable -> ITERABLE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - - -state 404 - - (107) OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON . - - LBRACKET reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - CONSTRUCTOR reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - CONST reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - INHERIT reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - ITERABLE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - STRINGIFIER reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - STATIC reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - READONLY reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - GETTER reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - SETTER reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - DELETER reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - LEGACYCALLER reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - MAPLIKE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - SETLIKE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - ATTRIBUTE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - VOID reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - ANY reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - PROMISE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - LPAREN reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - ARRAYBUFFER reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - READABLESTREAM reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - OBJECT reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - SEQUENCE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - RECORD reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - BOOLEAN reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - BYTE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - OCTET reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - FLOAT reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - UNRESTRICTED reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - DOUBLE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - UNSIGNED reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - DOMSTRING reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - BYTESTRING reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - USVSTRING reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - UTF8STRING reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - JSSTRING reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - SCOPE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - IDENTIFIER reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - SHORT reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - LONG reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - RBRACE reduce using rule 107 (OperationRest -> ReturnType OptionalIdentifier LPAREN ArgumentList RPAREN SEMICOLON .) - - -state 405 - - (88) Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON . - - LBRACKET reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - CONSTRUCTOR reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - CONST reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - INHERIT reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - ITERABLE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - STRINGIFIER reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - STATIC reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - READONLY reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - GETTER reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SETTER reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - DELETER reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - LEGACYCALLER reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - MAPLIKE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SETLIKE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - ATTRIBUTE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - VOID reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - ANY reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - PROMISE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - LPAREN reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - ARRAYBUFFER reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - READABLESTREAM reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - OBJECT reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SEQUENCE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - RECORD reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - BOOLEAN reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - BYTE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - OCTET reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - FLOAT reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - UNRESTRICTED reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - DOUBLE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - UNSIGNED reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - DOMSTRING reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - BYTESTRING reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - USVSTRING reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - UTF8STRING reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - JSSTRING reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SCOPE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - IDENTIFIER reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - SHORT reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - LONG reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - RBRACE reduce using rule 88 (Maplike -> ReadOnly MAPLIKE LT TypeWithExtendedAttributes COMMA TypeWithExtendedAttributes GT SEMICOLON .) - diff --git a/idl/ply/ANNOUNCE b/idl/ply/ANNOUNCE deleted file mode 100644 index bdc1c10..0000000 --- a/idl/ply/ANNOUNCE +++ /dev/null @@ -1,40 +0,0 @@ -February 17, 2011 - - Announcing : PLY-3.4 (Python Lex-Yacc) - - http://www.dabeaz.com/ply - -I'm pleased to announce PLY-3.4--a pure Python implementation of the -common parsing tools lex and yacc. PLY-3.4 is a minor bug fix -release. It supports both Python 2 and Python 3. - -If you are new to PLY, here are a few highlights: - -- PLY is closely modeled after traditional lex/yacc. If you know how - to use these or similar tools in other languages, you will find - PLY to be comparable. - -- PLY provides very extensive error reporting and diagnostic - information to assist in parser construction. The original - implementation was developed for instructional purposes. As - a result, the system tries to identify the most common types - of errors made by novice users. - -- PLY provides full support for empty productions, error recovery, - precedence rules, and ambiguous grammars. - -- Parsing is based on LR-parsing which is fast, memory efficient, - better suited to large grammars, and which has a number of nice - properties when dealing with syntax errors and other parsing - problems. Currently, PLY can build its parsing tables using - either SLR or LALR(1) algorithms. - -More information about PLY can be obtained on the PLY webpage at: - - http://www.dabeaz.com/ply - -PLY is freely available. - -Cheers, - -David Beazley (http://www.dabeaz.com) \ No newline at end of file diff --git a/idl/ply/CHANGES b/idl/ply/CHANGES deleted file mode 100644 index 34bf50f..0000000 --- a/idl/ply/CHANGES +++ /dev/null @@ -1,1093 +0,0 @@ -Version 3.4 ---------------------- -02/17/11: beazley - Minor patch to make cpp.py compatible with Python 3. Note: This - is an experimental file not currently used by the rest of PLY. - -02/17/11: beazley - Fixed setup.py trove classifiers to properly list PLY as - Python 3 compatible. - -01/02/11: beazley - Migration of repository to github. - -Version 3.3 ------------------------------ -08/25/09: beazley - Fixed issue 15 related to the set_lineno() method in yacc. Reported by - mdsherry. - -08/25/09: beazley - Fixed a bug related to regular expression compilation flags not being - properly stored in lextab.py files created by the lexer when running - in optimize mode. Reported by Bruce Frederiksen. - - -Version 3.2 ------------------------------ -03/24/09: beazley - Added an extra check to not print duplicated warning messages - about reduce/reduce conflicts. - -03/24/09: beazley - Switched PLY over to a BSD-license. - -03/23/09: beazley - Performance optimization. Discovered a few places to make - speedups in LR table generation. - -03/23/09: beazley - New warning message. PLY now warns about rules never - reduced due to reduce/reduce conflicts. Suggested by - Bruce Frederiksen. - -03/23/09: beazley - Some clean-up of warning messages related to reduce/reduce errors. - -03/23/09: beazley - Added a new picklefile option to yacc() to write the parsing - tables to a filename using the pickle module. Here is how - it works: - - yacc(picklefile="parsetab.p") - - This option can be used if the normal parsetab.py file is - extremely large. For example, on jython, it is impossible - to read parsing tables if the parsetab.py exceeds a certain - threshold. - - The filename supplied to the picklefile option is opened - relative to the current working directory of the Python - interpreter. If you need to refer to the file elsewhere, - you will need to supply an absolute or relative path. - - For maximum portability, the pickle file is written - using protocol 0. - -03/13/09: beazley - Fixed a bug in parser.out generation where the rule numbers - where off by one. - -03/13/09: beazley - Fixed a string formatting bug with one of the error messages. - Reported by Richard Reitmeyer - -Version 3.1 ------------------------------ -02/28/09: beazley - Fixed broken start argument to yacc(). PLY-3.0 broke this - feature by accident. - -02/28/09: beazley - Fixed debugging output. yacc() no longer reports shift/reduce - or reduce/reduce conflicts if debugging is turned off. This - restores similar behavior in PLY-2.5. Reported by Andrew Waters. - -Version 3.0 ------------------------------ -02/03/09: beazley - Fixed missing lexer attribute on certain tokens when - invoking the parser p_error() function. Reported by - Bart Whiteley. - -02/02/09: beazley - The lex() command now does all error-reporting and diagonistics - using the logging module interface. Pass in a Logger object - using the errorlog parameter to specify a different logger. - -02/02/09: beazley - Refactored ply.lex to use a more object-oriented and organized - approach to collecting lexer information. - -02/01/09: beazley - Removed the nowarn option from lex(). All output is controlled - by passing in a logger object. Just pass in a logger with a high - level setting to suppress output. This argument was never - documented to begin with so hopefully no one was relying upon it. - -02/01/09: beazley - Discovered and removed a dead if-statement in the lexer. This - resulted in a 6-7% speedup in lexing when I tested it. - -01/13/09: beazley - Minor change to the procedure for signalling a syntax error in a - production rule. A normal SyntaxError exception should be raised - instead of yacc.SyntaxError. - -01/13/09: beazley - Added a new method p.set_lineno(n,lineno) that can be used to set the - line number of symbol n in grammar rules. This simplifies manual - tracking of line numbers. - -01/11/09: beazley - Vastly improved debugging support for yacc.parse(). Instead of passing - debug as an integer, you can supply a Logging object (see the logging - module). Messages will be generated at the ERROR, INFO, and DEBUG - logging levels, each level providing progressively more information. - The debugging trace also shows states, grammar rule, values passed - into grammar rules, and the result of each reduction. - -01/09/09: beazley - The yacc() command now does all error-reporting and diagnostics using - the interface of the logging module. Use the errorlog parameter to - specify a logging object for error messages. Use the debuglog parameter - to specify a logging object for the 'parser.out' output. - -01/09/09: beazley - *HUGE* refactoring of the the ply.yacc() implementation. The high-level - user interface is backwards compatible, but the internals are completely - reorganized into classes. No more global variables. The internals - are also more extensible. For example, you can use the classes to - construct a LALR(1) parser in an entirely different manner than - what is currently the case. Documentation is forthcoming. - -01/07/09: beazley - Various cleanup and refactoring of yacc internals. - -01/06/09: beazley - Fixed a bug with precedence assignment. yacc was assigning the precedence - each rule based on the left-most token, when in fact, it should have been - using the right-most token. Reported by Bruce Frederiksen. - -11/27/08: beazley - Numerous changes to support Python 3.0 including removal of deprecated - statements (e.g., has_key) and the additional of compatibility code - to emulate features from Python 2 that have been removed, but which - are needed. Fixed the unit testing suite to work with Python 3.0. - The code should be backwards compatible with Python 2. - -11/26/08: beazley - Loosened the rules on what kind of objects can be passed in as the - "module" parameter to lex() and yacc(). Previously, you could only use - a module or an instance. Now, PLY just uses dir() to get a list of - symbols on whatever the object is without regard for its type. - -11/26/08: beazley - Changed all except: statements to be compatible with Python2.x/3.x syntax. - -11/26/08: beazley - Changed all raise Exception, value statements to raise Exception(value) for - forward compatibility. - -11/26/08: beazley - Removed all print statements from lex and yacc, using sys.stdout and sys.stderr - directly. Preparation for Python 3.0 support. - -11/04/08: beazley - Fixed a bug with referring to symbols on the the parsing stack using negative - indices. - -05/29/08: beazley - Completely revamped the testing system to use the unittest module for everything. - Added additional tests to cover new errors/warnings. - -Version 2.5 ------------------------------ -05/28/08: beazley - Fixed a bug with writing lex-tables in optimized mode and start states. - Reported by Kevin Henry. - -Version 2.4 ------------------------------ -05/04/08: beazley - A version number is now embedded in the table file signature so that - yacc can more gracefully accomodate changes to the output format - in the future. - -05/04/08: beazley - Removed undocumented .pushback() method on grammar productions. I'm - not sure this ever worked and can't recall ever using it. Might have - been an abandoned idea that never really got fleshed out. This - feature was never described or tested so removing it is hopefully - harmless. - -05/04/08: beazley - Added extra error checking to yacc() to detect precedence rules defined - for undefined terminal symbols. This allows yacc() to detect a potential - problem that can be really tricky to debug if no warning message or error - message is generated about it. - -05/04/08: beazley - lex() now has an outputdir that can specify the output directory for - tables when running in optimize mode. For example: - - lexer = lex.lex(optimize=True, lextab="ltab", outputdir="foo/bar") - - The behavior of specifying a table module and output directory are - more aligned with the behavior of yacc(). - -05/04/08: beazley - [Issue 9] - Fixed filename bug in when specifying the modulename in lex() and yacc(). - If you specified options such as the following: - - parser = yacc.yacc(tabmodule="foo.bar.parsetab",outputdir="foo/bar") - - yacc would create a file "foo.bar.parsetab.py" in the given directory. - Now, it simply generates a file "parsetab.py" in that directory. - Bug reported by cptbinho. - -05/04/08: beazley - Slight modification to lex() and yacc() to allow their table files - to be loaded from a previously loaded module. This might make - it easier to load the parsing tables from a complicated package - structure. For example: - - import foo.bar.spam.parsetab as parsetab - parser = yacc.yacc(tabmodule=parsetab) - - Note: lex and yacc will never regenerate the table file if used - in the form---you will get a warning message instead. - This idea suggested by Brian Clapper. - - -04/28/08: beazley - Fixed a big with p_error() functions being picked up correctly - when running in yacc(optimize=1) mode. Patch contributed by - Bart Whiteley. - -02/28/08: beazley - Fixed a bug with 'nonassoc' precedence rules. Basically the - non-precedence was being ignored and not producing the correct - run-time behavior in the parser. - -02/16/08: beazley - Slight relaxation of what the input() method to a lexer will - accept as a string. Instead of testing the input to see - if the input is a string or unicode string, it checks to see - if the input object looks like it contains string data. - This change makes it possible to pass string-like objects - in as input. For example, the object returned by mmap. - - import mmap, os - data = mmap.mmap(os.open(filename,os.O_RDONLY), - os.path.getsize(filename), - access=mmap.ACCESS_READ) - lexer.input(data) - - -11/29/07: beazley - Modification of ply.lex to allow token functions to aliased. - This is subtle, but it makes it easier to create libraries and - to reuse token specifications. For example, suppose you defined - a function like this: - - def number(t): - r'\d+' - t.value = int(t.value) - return t - - This change would allow you to define a token rule as follows: - - t_NUMBER = number - - In this case, the token type will be set to 'NUMBER' and use - the associated number() function to process tokens. - -11/28/07: beazley - Slight modification to lex and yacc to grab symbols from both - the local and global dictionaries of the caller. This - modification allows lexers and parsers to be defined using - inner functions and closures. - -11/28/07: beazley - Performance optimization: The lexer.lexmatch and t.lexer - attributes are no longer set for lexer tokens that are not - defined by functions. The only normal use of these attributes - would be in lexer rules that need to perform some kind of - special processing. Thus, it doesn't make any sense to set - them on every token. - - *** POTENTIAL INCOMPATIBILITY *** This might break code - that is mucking around with internal lexer state in some - sort of magical way. - -11/27/07: beazley - Added the ability to put the parser into error-handling mode - from within a normal production. To do this, simply raise - a yacc.SyntaxError exception like this: - - def p_some_production(p): - 'some_production : prod1 prod2' - ... - raise yacc.SyntaxError # Signal an error - - A number of things happen after this occurs: - - - The last symbol shifted onto the symbol stack is discarded - and parser state backed up to what it was before the - the rule reduction. - - - The current lookahead symbol is saved and replaced by - the 'error' symbol. - - - The parser enters error recovery mode where it tries - to either reduce the 'error' rule or it starts - discarding items off of the stack until the parser - resets. - - When an error is manually set, the parser does *not* call - the p_error() function (if any is defined). - *** NEW FEATURE *** Suggested on the mailing list - -11/27/07: beazley - Fixed structure bug in examples/ansic. Reported by Dion Blazakis. - -11/27/07: beazley - Fixed a bug in the lexer related to start conditions and ignored - token rules. If a rule was defined that changed state, but - returned no token, the lexer could be left in an inconsistent - state. Reported by - -11/27/07: beazley - Modified setup.py to support Python Eggs. Patch contributed by - Simon Cross. - -11/09/07: beazely - Fixed a bug in error handling in yacc. If a syntax error occurred and the - parser rolled the entire parse stack back, the parser would be left in in - inconsistent state that would cause it to trigger incorrect actions on - subsequent input. Reported by Ton Biegstraaten, Justin King, and others. - -11/09/07: beazley - Fixed a bug when passing empty input strings to yacc.parse(). This - would result in an error message about "No input given". Reported - by Andrew Dalke. - -Version 2.3 ------------------------------ -02/20/07: beazley - Fixed a bug with character literals if the literal '.' appeared as the - last symbol of a grammar rule. Reported by Ales Smrcka. - -02/19/07: beazley - Warning messages are now redirected to stderr instead of being printed - to standard output. - -02/19/07: beazley - Added a warning message to lex.py if it detects a literal backslash - character inside the t_ignore declaration. This is to help - problems that might occur if someone accidentally defines t_ignore - as a Python raw string. For example: - - t_ignore = r' \t' - - The idea for this is from an email I received from David Cimimi who - reported bizarre behavior in lexing as a result of defining t_ignore - as a raw string by accident. - -02/18/07: beazley - Performance improvements. Made some changes to the internal - table organization and LR parser to improve parsing performance. - -02/18/07: beazley - Automatic tracking of line number and position information must now be - enabled by a special flag to parse(). For example: - - yacc.parse(data,tracking=True) - - In many applications, it's just not that important to have the - parser automatically track all line numbers. By making this an - optional feature, it allows the parser to run significantly faster - (more than a 20% speed increase in many cases). Note: positional - information is always available for raw tokens---this change only - applies to positional information associated with nonterminal - grammar symbols. - *** POTENTIAL INCOMPATIBILITY *** - -02/18/07: beazley - Yacc no longer supports extended slices of grammar productions. - However, it does support regular slices. For example: - - def p_foo(p): - '''foo: a b c d e''' - p[0] = p[1:3] - - This change is a performance improvement to the parser--it streamlines - normal access to the grammar values since slices are now handled in - a __getslice__() method as opposed to __getitem__(). - -02/12/07: beazley - Fixed a bug in the handling of token names when combined with - start conditions. Bug reported by Todd O'Bryan. - -Version 2.2 ------------------------------- -11/01/06: beazley - Added lexpos() and lexspan() methods to grammar symbols. These - mirror the same functionality of lineno() and linespan(). For - example: - - def p_expr(p): - 'expr : expr PLUS expr' - p.lexpos(1) # Lexing position of left-hand-expression - p.lexpos(1) # Lexing position of PLUS - start,end = p.lexspan(3) # Lexing range of right hand expression - -11/01/06: beazley - Minor change to error handling. The recommended way to skip characters - in the input is to use t.lexer.skip() as shown here: - - def t_error(t): - print "Illegal character '%s'" % t.value[0] - t.lexer.skip(1) - - The old approach of just using t.skip(1) will still work, but won't - be documented. - -10/31/06: beazley - Discarded tokens can now be specified as simple strings instead of - functions. To do this, simply include the text "ignore_" in the - token declaration. For example: - - t_ignore_cppcomment = r'//.*' - - Previously, this had to be done with a function. For example: - - def t_ignore_cppcomment(t): - r'//.*' - pass - - If start conditions/states are being used, state names should appear - before the "ignore_" text. - -10/19/06: beazley - The Lex module now provides support for flex-style start conditions - as described at http://www.gnu.org/software/flex/manual/html_chapter/flex_11.html. - Please refer to this document to understand this change note. Refer to - the PLY documentation for PLY-specific explanation of how this works. - - To use start conditions, you first need to declare a set of states in - your lexer file: - - states = ( - ('foo','exclusive'), - ('bar','inclusive') - ) - - This serves the same role as the %s and %x specifiers in flex. - - One a state has been declared, tokens for that state can be - declared by defining rules of the form t_state_TOK. For example: - - t_PLUS = '\+' # Rule defined in INITIAL state - t_foo_NUM = '\d+' # Rule defined in foo state - t_bar_NUM = '\d+' # Rule defined in bar state - - t_foo_bar_NUM = '\d+' # Rule defined in both foo and bar - t_ANY_NUM = '\d+' # Rule defined in all states - - In addition to defining tokens for each state, the t_ignore and t_error - specifications can be customized for specific states. For example: - - t_foo_ignore = " " # Ignored characters for foo state - def t_bar_error(t): - # Handle errors in bar state - - With token rules, the following methods can be used to change states - - def t_TOKNAME(t): - t.lexer.begin('foo') # Begin state 'foo' - t.lexer.push_state('foo') # Begin state 'foo', push old state - # onto a stack - t.lexer.pop_state() # Restore previous state - t.lexer.current_state() # Returns name of current state - - These methods mirror the BEGIN(), yy_push_state(), yy_pop_state(), and - yy_top_state() functions in flex. - - The use of start states can be used as one way to write sub-lexers. - For example, the lexer or parser might instruct the lexer to start - generating a different set of tokens depending on the context. - - example/yply/ylex.py shows the use of start states to grab C/C++ - code fragments out of traditional yacc specification files. - - *** NEW FEATURE *** Suggested by Daniel Larraz with whom I also - discussed various aspects of the design. - -10/19/06: beazley - Minor change to the way in which yacc.py was reporting shift/reduce - conflicts. Although the underlying LALR(1) algorithm was correct, - PLY was under-reporting the number of conflicts compared to yacc/bison - when precedence rules were in effect. This change should make PLY - report the same number of conflicts as yacc. - -10/19/06: beazley - Modified yacc so that grammar rules could also include the '-' - character. For example: - - def p_expr_list(p): - 'expression-list : expression-list expression' - - Suggested by Oldrich Jedlicka. - -10/18/06: beazley - Attribute lexer.lexmatch added so that token rules can access the re - match object that was generated. For example: - - def t_FOO(t): - r'some regex' - m = t.lexer.lexmatch - # Do something with m - - - This may be useful if you want to access named groups specified within - the regex for a specific token. Suggested by Oldrich Jedlicka. - -10/16/06: beazley - Changed the error message that results if an illegal character - is encountered and no default error function is defined in lex. - The exception is now more informative about the actual cause of - the error. - -Version 2.1 ------------------------------- -10/02/06: beazley - The last Lexer object built by lex() can be found in lex.lexer. - The last Parser object built by yacc() can be found in yacc.parser. - -10/02/06: beazley - New example added: examples/yply - - This example uses PLY to convert Unix-yacc specification files to - PLY programs with the same grammar. This may be useful if you - want to convert a grammar from bison/yacc to use with PLY. - -10/02/06: beazley - Added support for a start symbol to be specified in the yacc - input file itself. Just do this: - - start = 'name' - - where 'name' matches some grammar rule. For example: - - def p_name(p): - 'name : A B C' - ... - - This mirrors the functionality of the yacc %start specifier. - -09/30/06: beazley - Some new examples added.: - - examples/GardenSnake : A simple indentation based language similar - to Python. Shows how you might handle - whitespace. Contributed by Andrew Dalke. - - examples/BASIC : An implementation of 1964 Dartmouth BASIC. - Contributed by Dave against his better - judgement. - -09/28/06: beazley - Minor patch to allow named groups to be used in lex regular - expression rules. For example: - - t_QSTRING = r'''(?P['"]).*?(?P=quote)''' - - Patch submitted by Adam Ring. - -09/28/06: beazley - LALR(1) is now the default parsing method. To use SLR, use - yacc.yacc(method="SLR"). Note: there is no performance impact - on parsing when using LALR(1) instead of SLR. However, constructing - the parsing tables will take a little longer. - -09/26/06: beazley - Change to line number tracking. To modify line numbers, modify - the line number of the lexer itself. For example: - - def t_NEWLINE(t): - r'\n' - t.lexer.lineno += 1 - - This modification is both cleanup and a performance optimization. - In past versions, lex was monitoring every token for changes in - the line number. This extra processing is unnecessary for a vast - majority of tokens. Thus, this new approach cleans it up a bit. - - *** POTENTIAL INCOMPATIBILITY *** - You will need to change code in your lexer that updates the line - number. For example, "t.lineno += 1" becomes "t.lexer.lineno += 1" - -09/26/06: beazley - Added the lexing position to tokens as an attribute lexpos. This - is the raw index into the input text at which a token appears. - This information can be used to compute column numbers and other - details (e.g., scan backwards from lexpos to the first newline - to get a column position). - -09/25/06: beazley - Changed the name of the __copy__() method on the Lexer class - to clone(). This is used to clone a Lexer object (e.g., if - you're running different lexers at the same time). - -09/21/06: beazley - Limitations related to the use of the re module have been eliminated. - Several users reported problems with regular expressions exceeding - more than 100 named groups. To solve this, lex.py is now capable - of automatically splitting its master regular regular expression into - smaller expressions as needed. This should, in theory, make it - possible to specify an arbitrarily large number of tokens. - -09/21/06: beazley - Improved error checking in lex.py. Rules that match the empty string - are now rejected (otherwise they cause the lexer to enter an infinite - loop). An extra check for rules containing '#' has also been added. - Since lex compiles regular expressions in verbose mode, '#' is interpreted - as a regex comment, it is critical to use '\#' instead. - -09/18/06: beazley - Added a @TOKEN decorator function to lex.py that can be used to - define token rules where the documentation string might be computed - in some way. - - digit = r'([0-9])' - nondigit = r'([_A-Za-z])' - identifier = r'(' + nondigit + r'(' + digit + r'|' + nondigit + r')*)' - - from ply.lex import TOKEN - - @TOKEN(identifier) - def t_ID(t): - # Do whatever - - The @TOKEN decorator merely sets the documentation string of the - associated token function as needed for lex to work. - - Note: An alternative solution is the following: - - def t_ID(t): - # Do whatever - - t_ID.__doc__ = identifier - - Note: Decorators require the use of Python 2.4 or later. If compatibility - with old versions is needed, use the latter solution. - - The need for this feature was suggested by Cem Karan. - -09/14/06: beazley - Support for single-character literal tokens has been added to yacc. - These literals must be enclosed in quotes. For example: - - def p_expr(p): - "expr : expr '+' expr" - ... - - def p_expr(p): - 'expr : expr "-" expr' - ... - - In addition to this, it is necessary to tell the lexer module about - literal characters. This is done by defining the variable 'literals' - as a list of characters. This should be defined in the module that - invokes the lex.lex() function. For example: - - literals = ['+','-','*','/','(',')','='] - - or simply - - literals = '+=*/()=' - - It is important to note that literals can only be a single character. - When the lexer fails to match a token using its normal regular expression - rules, it will check the current character against the literal list. - If found, it will be returned with a token type set to match the literal - character. Otherwise, an illegal character will be signalled. - - -09/14/06: beazley - Modified PLY to install itself as a proper Python package called 'ply'. - This will make it a little more friendly to other modules. This - changes the usage of PLY only slightly. Just do this to import the - modules - - import ply.lex as lex - import ply.yacc as yacc - - Alternatively, you can do this: - - from ply import * - - Which imports both the lex and yacc modules. - Change suggested by Lee June. - -09/13/06: beazley - Changed the handling of negative indices when used in production rules. - A negative production index now accesses already parsed symbols on the - parsing stack. For example, - - def p_foo(p): - "foo: A B C D" - print p[1] # Value of 'A' symbol - print p[2] # Value of 'B' symbol - print p[-1] # Value of whatever symbol appears before A - # on the parsing stack. - - p[0] = some_val # Sets the value of the 'foo' grammer symbol - - This behavior makes it easier to work with embedded actions within the - parsing rules. For example, in C-yacc, it is possible to write code like - this: - - bar: A { printf("seen an A = %d\n", $1); } B { do_stuff; } - - In this example, the printf() code executes immediately after A has been - parsed. Within the embedded action code, $1 refers to the A symbol on - the stack. - - To perform this equivalent action in PLY, you need to write a pair - of rules like this: - - def p_bar(p): - "bar : A seen_A B" - do_stuff - - def p_seen_A(p): - "seen_A :" - print "seen an A =", p[-1] - - The second rule "seen_A" is merely a empty production which should be - reduced as soon as A is parsed in the "bar" rule above. The use - of the negative index p[-1] is used to access whatever symbol appeared - before the seen_A symbol. - - This feature also makes it possible to support inherited attributes. - For example: - - def p_decl(p): - "decl : scope name" - - def p_scope(p): - """scope : GLOBAL - | LOCAL""" - p[0] = p[1] - - def p_name(p): - "name : ID" - if p[-1] == "GLOBAL": - # ... - else if p[-1] == "LOCAL": - #... - - In this case, the name rule is inheriting an attribute from the - scope declaration that precedes it. - - *** POTENTIAL INCOMPATIBILITY *** - If you are currently using negative indices within existing grammar rules, - your code will break. This should be extremely rare if non-existent in - most cases. The argument to various grammar rules is not usually not - processed in the same way as a list of items. - -Version 2.0 ------------------------------- -09/07/06: beazley - Major cleanup and refactoring of the LR table generation code. Both SLR - and LALR(1) table generation is now performed by the same code base with - only minor extensions for extra LALR(1) processing. - -09/07/06: beazley - Completely reimplemented the entire LALR(1) parsing engine to use the - DeRemer and Pennello algorithm for calculating lookahead sets. This - significantly improves the performance of generating LALR(1) tables - and has the added feature of actually working correctly! If you - experienced weird behavior with LALR(1) in prior releases, this should - hopefully resolve all of those problems. Many thanks to - Andrew Waters and Markus Schoepflin for submitting bug reports - and helping me test out the revised LALR(1) support. - -Version 1.8 ------------------------------- -08/02/06: beazley - Fixed a problem related to the handling of default actions in LALR(1) - parsing. If you experienced subtle and/or bizarre behavior when trying - to use the LALR(1) engine, this may correct those problems. Patch - contributed by Russ Cox. Note: This patch has been superceded by - revisions for LALR(1) parsing in Ply-2.0. - -08/02/06: beazley - Added support for slicing of productions in yacc. - Patch contributed by Patrick Mezard. - -Version 1.7 ------------------------------- -03/02/06: beazley - Fixed infinite recursion problem ReduceToTerminals() function that - would sometimes come up in LALR(1) table generation. Reported by - Markus Schoepflin. - -03/01/06: beazley - Added "reflags" argument to lex(). For example: - - lex.lex(reflags=re.UNICODE) - - This can be used to specify optional flags to the re.compile() function - used inside the lexer. This may be necessary for special situations such - as processing Unicode (e.g., if you want escapes like \w and \b to consult - the Unicode character property database). The need for this suggested by - Andreas Jung. - -03/01/06: beazley - Fixed a bug with an uninitialized variable on repeated instantiations of parser - objects when the write_tables=0 argument was used. Reported by Michael Brown. - -03/01/06: beazley - Modified lex.py to accept Unicode strings both as the regular expressions for - tokens and as input. Hopefully this is the only change needed for Unicode support. - Patch contributed by Johan Dahl. - -03/01/06: beazley - Modified the class-based interface to work with new-style or old-style classes. - Patch contributed by Michael Brown (although I tweaked it slightly so it would work - with older versions of Python). - -Version 1.6 ------------------------------- -05/27/05: beazley - Incorporated patch contributed by Christopher Stawarz to fix an extremely - devious bug in LALR(1) parser generation. This patch should fix problems - numerous people reported with LALR parsing. - -05/27/05: beazley - Fixed problem with lex.py copy constructor. Reported by Dave Aitel, Aaron Lav, - and Thad Austin. - -05/27/05: beazley - Added outputdir option to yacc() to control output directory. Contributed - by Christopher Stawarz. - -05/27/05: beazley - Added rununit.py test script to run tests using the Python unittest module. - Contributed by Miki Tebeka. - -Version 1.5 ------------------------------- -05/26/04: beazley - Major enhancement. LALR(1) parsing support is now working. - This feature was implemented by Elias Ioup (ezioup@alumni.uchicago.edu) - and optimized by David Beazley. To use LALR(1) parsing do - the following: - - yacc.yacc(method="LALR") - - Computing LALR(1) parsing tables takes about twice as long as - the default SLR method. However, LALR(1) allows you to handle - more complex grammars. For example, the ANSI C grammar - (in example/ansic) has 13 shift-reduce conflicts with SLR, but - only has 1 shift-reduce conflict with LALR(1). - -05/20/04: beazley - Added a __len__ method to parser production lists. Can - be used in parser rules like this: - - def p_somerule(p): - """a : B C D - | E F" - if (len(p) == 3): - # Must have been first rule - elif (len(p) == 2): - # Must be second rule - - Suggested by Joshua Gerth and others. - -Version 1.4 ------------------------------- -04/23/04: beazley - Incorporated a variety of patches contributed by Eric Raymond. - These include: - - 0. Cleans up some comments so they don't wrap on an 80-column display. - 1. Directs compiler errors to stderr where they belong. - 2. Implements and documents automatic line counting when \n is ignored. - 3. Changes the way progress messages are dumped when debugging is on. - The new format is both less verbose and conveys more information than - the old, including shift and reduce actions. - -04/23/04: beazley - Added a Python setup.py file to simply installation. Contributed - by Adam Kerrison. - -04/23/04: beazley - Added patches contributed by Adam Kerrison. - - - Some output is now only shown when debugging is enabled. This - means that PLY will be completely silent when not in debugging mode. - - - An optional parameter "write_tables" can be passed to yacc() to - control whether or not parsing tables are written. By default, - it is true, but it can be turned off if you don't want the yacc - table file. Note: disabling this will cause yacc() to regenerate - the parsing table each time. - -04/23/04: beazley - Added patches contributed by David McNab. This patch addes two - features: - - - The parser can be supplied as a class instead of a module. - For an example of this, see the example/classcalc directory. - - - Debugging output can be directed to a filename of the user's - choice. Use - - yacc(debugfile="somefile.out") - - -Version 1.3 ------------------------------- -12/10/02: jmdyck - Various minor adjustments to the code that Dave checked in today. - Updated test/yacc_{inf,unused}.exp to reflect today's changes. - -12/10/02: beazley - Incorporated a variety of minor bug fixes to empty production - handling and infinite recursion checking. Contributed by - Michael Dyck. - -12/10/02: beazley - Removed bogus recover() method call in yacc.restart() - -Version 1.2 ------------------------------- -11/27/02: beazley - Lexer and parser objects are now available as an attribute - of tokens and slices respectively. For example: - - def t_NUMBER(t): - r'\d+' - print t.lexer - - def p_expr_plus(t): - 'expr: expr PLUS expr' - print t.lexer - print t.parser - - This can be used for state management (if needed). - -10/31/02: beazley - Modified yacc.py to work with Python optimize mode. To make - this work, you need to use - - yacc.yacc(optimize=1) - - Furthermore, you need to first run Python in normal mode - to generate the necessary parsetab.py files. After that, - you can use python -O or python -OO. - - Note: optimized mode turns off a lot of error checking. - Only use when you are sure that your grammar is working. - Make sure parsetab.py is up to date! - -10/30/02: beazley - Added cloning of Lexer objects. For example: - - import copy - l = lex.lex() - lc = copy.copy(l) - - l.input("Some text") - lc.input("Some other text") - ... - - This might be useful if the same "lexer" is meant to - be used in different contexts---or if multiple lexers - are running concurrently. - -10/30/02: beazley - Fixed subtle bug with first set computation and empty productions. - Patch submitted by Michael Dyck. - -10/30/02: beazley - Fixed error messages to use "filename:line: message" instead - of "filename:line. message". This makes error reporting more - friendly to emacs. Patch submitted by François Pinard. - -10/30/02: beazley - Improvements to parser.out file. Terminals and nonterminals - are sorted instead of being printed in random order. - Patch submitted by François Pinard. - -10/30/02: beazley - Improvements to parser.out file output. Rules are now printed - in a way that's easier to understand. Contributed by Russ Cox. - -10/30/02: beazley - Added 'nonassoc' associativity support. This can be used - to disable the chaining of operators like a < b < c. - To use, simply specify 'nonassoc' in the precedence table - - precedence = ( - ('nonassoc', 'LESSTHAN', 'GREATERTHAN'), # Nonassociative operators - ('left', 'PLUS', 'MINUS'), - ('left', 'TIMES', 'DIVIDE'), - ('right', 'UMINUS'), # Unary minus operator - ) - - Patch contributed by Russ Cox. - -10/30/02: beazley - Modified the lexer to provide optional support for Python -O and -OO - modes. To make this work, Python *first* needs to be run in - unoptimized mode. This reads the lexing information and creates a - file "lextab.py". Then, run lex like this: - - # module foo.py - ... - ... - lex.lex(optimize=1) - - Once the lextab file has been created, subsequent calls to - lex.lex() will read data from the lextab file instead of using - introspection. In optimized mode (-O, -OO) everything should - work normally despite the loss of doc strings. - - To change the name of the file 'lextab.py' use the following: - - lex.lex(lextab="footab") - - (this creates a file footab.py) - - -Version 1.1 October 25, 2001 ------------------------------- - -10/25/01: beazley - Modified the table generator to produce much more compact data. - This should greatly reduce the size of the parsetab.py[c] file. - Caveat: the tables still need to be constructed so a little more - work is done in parsetab on import. - -10/25/01: beazley - There may be a possible bug in the cycle detector that reports errors - about infinite recursion. I'm having a little trouble tracking it - down, but if you get this problem, you can disable the cycle - detector as follows: - - yacc.yacc(check_recursion = 0) - -10/25/01: beazley - Fixed a bug in lex.py that sometimes caused illegal characters to be - reported incorrectly. Reported by Sverre Jørgensen. - -7/8/01 : beazley - Added a reference to the underlying lexer object when tokens are handled by - functions. The lexer is available as the 'lexer' attribute. This - was added to provide better lexing support for languages such as Fortran - where certain types of tokens can't be conveniently expressed as regular - expressions (and where the tokenizing function may want to perform a - little backtracking). Suggested by Pearu Peterson. - -6/20/01 : beazley - Modified yacc() function so that an optional starting symbol can be specified. - For example: - - yacc.yacc(start="statement") - - Normally yacc always treats the first production rule as the starting symbol. - However, if you are debugging your grammar it may be useful to specify - an alternative starting symbol. Idea suggested by Rich Salz. - -Version 1.0 June 18, 2001 --------------------------- -Initial public offering - diff --git a/idl/ply/PKG-INFO b/idl/ply/PKG-INFO deleted file mode 100644 index 0080e02..0000000 --- a/idl/ply/PKG-INFO +++ /dev/null @@ -1,22 +0,0 @@ -Metadata-Version: 1.0 -Name: ply -Version: 3.4 -Summary: Python Lex & Yacc -Home-page: http://www.dabeaz.com/ply/ -Author: David Beazley -Author-email: dave@dabeaz.com -License: BSD -Description: - PLY is yet another implementation of lex and yacc for Python. Some notable - features include the fact that its implemented entirely in Python and it - uses LALR(1) parsing which is efficient and well suited for larger grammars. - - PLY provides most of the standard lex/yacc features including support for empty - productions, precedence rules, error recovery, and support for ambiguous grammars. - - PLY is extremely easy to use and provides very extensive error checking. - It is compatible with both Python 2 and Python 3. - -Platform: UNKNOWN -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 2 diff --git a/idl/ply/README b/idl/ply/README deleted file mode 100644 index f384d1a..0000000 --- a/idl/ply/README +++ /dev/null @@ -1,271 +0,0 @@ -PLY (Python Lex-Yacc) Version 3.4 - -Copyright (C) 2001-2011, -David M. Beazley (Dabeaz LLC) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of the David Beazley or Dabeaz LLC may be used to - endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Introduction -============ - -PLY is a 100% Python implementation of the common parsing tools lex -and yacc. Here are a few highlights: - - - PLY is very closely modeled after traditional lex/yacc. - If you know how to use these tools in C, you will find PLY - to be similar. - - - PLY provides *very* extensive error reporting and diagnostic - information to assist in parser construction. The original - implementation was developed for instructional purposes. As - a result, the system tries to identify the most common types - of errors made by novice users. - - - PLY provides full support for empty productions, error recovery, - precedence specifiers, and moderately ambiguous grammars. - - - Parsing is based on LR-parsing which is fast, memory efficient, - better suited to large grammars, and which has a number of nice - properties when dealing with syntax errors and other parsing problems. - Currently, PLY builds its parsing tables using the LALR(1) - algorithm used in yacc. - - - PLY uses Python introspection features to build lexers and parsers. - This greatly simplifies the task of parser construction since it reduces - the number of files and eliminates the need to run a separate lex/yacc - tool before running your program. - - - PLY can be used to build parsers for "real" programming languages. - Although it is not ultra-fast due to its Python implementation, - PLY can be used to parse grammars consisting of several hundred - rules (as might be found for a language like C). The lexer and LR - parser are also reasonably efficient when parsing typically - sized programs. People have used PLY to build parsers for - C, C++, ADA, and other real programming languages. - -How to Use -========== - -PLY consists of two files : lex.py and yacc.py. These are contained -within the 'ply' directory which may also be used as a Python package. -To use PLY, simply copy the 'ply' directory to your project and import -lex and yacc from the associated 'ply' package. For example: - - import ply.lex as lex - import ply.yacc as yacc - -Alternatively, you can copy just the files lex.py and yacc.py -individually and use them as modules. For example: - - import lex - import yacc - -The file setup.py can be used to install ply using distutils. - -The file doc/ply.html contains complete documentation on how to use -the system. - -The example directory contains several different examples including a -PLY specification for ANSI C as given in K&R 2nd Ed. - -A simple example is found at the end of this document - -Requirements -============ -PLY requires the use of Python 2.2 or greater. However, you should -use the latest Python release if possible. It should work on just -about any platform. PLY has been tested with both CPython and Jython. -It also seems to work with IronPython. - -Resources -========= -More information about PLY can be obtained on the PLY webpage at: - - http://www.dabeaz.com/ply - -For a detailed overview of parsing theory, consult the excellent -book "Compilers : Principles, Techniques, and Tools" by Aho, Sethi, and -Ullman. The topics found in "Lex & Yacc" by Levine, Mason, and Brown -may also be useful. - -A Google group for PLY can be found at - - http://groups.google.com/group/ply-hack - -Acknowledgments -=============== -A special thanks is in order for all of the students in CS326 who -suffered through about 25 different versions of these tools :-). - -The CHANGES file acknowledges those who have contributed patches. - -Elias Ioup did the first implementation of LALR(1) parsing in PLY-1.x. -Andrew Waters and Markus Schoepflin were instrumental in reporting bugs -and testing a revised LALR(1) implementation for PLY-2.0. - -Special Note for PLY-3.0 -======================== -PLY-3.0 the first PLY release to support Python 3. However, backwards -compatibility with Python 2.2 is still preserved. PLY provides dual -Python 2/3 compatibility by restricting its implementation to a common -subset of basic language features. You should not convert PLY using -2to3--it is not necessary and may in fact break the implementation. - -Example -======= - -Here is a simple example showing a PLY implementation of a calculator -with variables. - -# ----------------------------------------------------------------------------- -# calc.py -# -# A simple calculator with variables. -# ----------------------------------------------------------------------------- - -tokens = ( - 'NAME','NUMBER', - 'PLUS','MINUS','TIMES','DIVIDE','EQUALS', - 'LPAREN','RPAREN', - ) - -# Tokens - -t_PLUS = r'\+' -t_MINUS = r'-' -t_TIMES = r'\*' -t_DIVIDE = r'/' -t_EQUALS = r'=' -t_LPAREN = r'\(' -t_RPAREN = r'\)' -t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*' - -def t_NUMBER(t): - r'\d+' - t.value = int(t.value) - return t - -# Ignored characters -t_ignore = " \t" - -def t_newline(t): - r'\n+' - t.lexer.lineno += t.value.count("\n") - -def t_error(t): - print("Illegal character '%s'" % t.value[0]) - t.lexer.skip(1) - -# Build the lexer -import ply.lex as lex -lex.lex() - -# Precedence rules for the arithmetic operators -precedence = ( - ('left','PLUS','MINUS'), - ('left','TIMES','DIVIDE'), - ('right','UMINUS'), - ) - -# dictionary of names (for storing variables) -names = { } - -def p_statement_assign(p): - 'statement : NAME EQUALS expression' - names[p[1]] = p[3] - -def p_statement_expr(p): - 'statement : expression' - print(p[1]) - -def p_expression_binop(p): - '''expression : expression PLUS expression - | expression MINUS expression - | expression TIMES expression - | expression DIVIDE expression''' - if p[2] == '+' : p[0] = p[1] + p[3] - elif p[2] == '-': p[0] = p[1] - p[3] - elif p[2] == '*': p[0] = p[1] * p[3] - elif p[2] == '/': p[0] = p[1] / p[3] - -def p_expression_uminus(p): - 'expression : MINUS expression %prec UMINUS' - p[0] = -p[2] - -def p_expression_group(p): - 'expression : LPAREN expression RPAREN' - p[0] = p[2] - -def p_expression_number(p): - 'expression : NUMBER' - p[0] = p[1] - -def p_expression_name(p): - 'expression : NAME' - try: - p[0] = names[p[1]] - except LookupError: - print("Undefined name '%s'" % p[1]) - p[0] = 0 - -def p_error(p): - print("Syntax error at '%s'" % p.value) - -import ply.yacc as yacc -yacc.yacc() - -while 1: - try: - s = raw_input('calc > ') # use input() on Python 3 - except EOFError: - break - yacc.parse(s) - - -Bug Reports and Patches -======================= -My goal with PLY is to simply have a decent lex/yacc implementation -for Python. As a general rule, I don't spend huge amounts of time -working on it unless I receive very specific bug reports and/or -patches to fix problems. I also try to incorporate submitted feature -requests and enhancements into each new version. To contact me about -bugs and/or new features, please send email to dave@dabeaz.com. - -In addition there is a Google group for discussing PLY related issues at - - http://groups.google.com/group/ply-hack - --- Dave - - - - - - - - - diff --git a/idl/ply/TODO b/idl/ply/TODO deleted file mode 100644 index f4800aa..0000000 --- a/idl/ply/TODO +++ /dev/null @@ -1,16 +0,0 @@ -The PLY to-do list: - -1. Finish writing the C Preprocessor module. Started in the - file ply/cpp.py - -2. Create and document libraries of useful tokens. - -3. Expand the examples/yply tool that parses bison/yacc - files. - -4. Think of various diabolical things to do with the - new yacc internals. For example, it is now possible - to specify grammrs using completely different schemes - than the reflection approach used by PLY. - - diff --git a/idl/ply/ply/__init__.py b/idl/ply/ply/__init__.py deleted file mode 100644 index 853a985..0000000 --- a/idl/ply/ply/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# PLY package -# Author: David Beazley (dave@dabeaz.com) - -__all__ = ['lex','yacc'] diff --git a/idl/ply/ply/cpp.py b/idl/ply/ply/cpp.py deleted file mode 100644 index 5cad682..0000000 --- a/idl/ply/ply/cpp.py +++ /dev/null @@ -1,898 +0,0 @@ -# ----------------------------------------------------------------------------- -# cpp.py -# -# Author: David Beazley (http://www.dabeaz.com) -# Copyright (C) 2007 -# All rights reserved -# -# This module implements an ANSI-C style lexical preprocessor for PLY. -# ----------------------------------------------------------------------------- -from __future__ import generators - -# ----------------------------------------------------------------------------- -# Default preprocessor lexer definitions. These tokens are enough to get -# a basic preprocessor working. Other modules may import these if they want -# ----------------------------------------------------------------------------- - -tokens = ( - 'CPP_ID','CPP_INTEGER', 'CPP_FLOAT', 'CPP_STRING', 'CPP_CHAR', 'CPP_WS', 'CPP_COMMENT', 'CPP_POUND','CPP_DPOUND' -) - -literals = "+-*/%|&~^<>=!?()[]{}.,;:\\\'\"" - -# Whitespace -def t_CPP_WS(t): - r'\s+' - t.lexer.lineno += t.value.count("\n") - return t - -t_CPP_POUND = r'\#' -t_CPP_DPOUND = r'\#\#' - -# Identifier -t_CPP_ID = r'[A-Za-z_][\w_]*' - -# Integer literal -def CPP_INTEGER(t): - r'(((((0x)|(0X))[0-9a-fA-F]+)|(\d+))([uU]|[lL]|[uU][lL]|[lL][uU])?)' - return t - -t_CPP_INTEGER = CPP_INTEGER - -# Floating literal -t_CPP_FLOAT = r'((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?' - -# String literal -def t_CPP_STRING(t): - r'\"([^\\\n]|(\\(.|\n)))*?\"' - t.lexer.lineno += t.value.count("\n") - return t - -# Character constant 'c' or L'c' -def t_CPP_CHAR(t): - r'(L)?\'([^\\\n]|(\\(.|\n)))*?\'' - t.lexer.lineno += t.value.count("\n") - return t - -# Comment -def t_CPP_COMMENT(t): - r'(/\*(.|\n)*?\*/)|(//.*?\n)' - t.lexer.lineno += t.value.count("\n") - return t - -def t_error(t): - t.type = t.value[0] - t.value = t.value[0] - t.lexer.skip(1) - return t - -import re -import copy -import time -import os.path - -# ----------------------------------------------------------------------------- -# trigraph() -# -# Given an input string, this function replaces all trigraph sequences. -# The following mapping is used: -# -# ??= # -# ??/ \ -# ??' ^ -# ??( [ -# ??) ] -# ??! | -# ??< { -# ??> } -# ??- ~ -# ----------------------------------------------------------------------------- - -_trigraph_pat = re.compile(r'''\?\?[=/\'\(\)\!<>\-]''') -_trigraph_rep = { - '=':'#', - '/':'\\', - "'":'^', - '(':'[', - ')':']', - '!':'|', - '<':'{', - '>':'}', - '-':'~' -} - -def trigraph(input): - return _trigraph_pat.sub(lambda g: _trigraph_rep[g.group()[-1]],input) - -# ------------------------------------------------------------------ -# Macro object -# -# This object holds information about preprocessor macros -# -# .name - Macro name (string) -# .value - Macro value (a list of tokens) -# .arglist - List of argument names -# .variadic - Boolean indicating whether or not variadic macro -# .vararg - Name of the variadic parameter -# -# When a macro is created, the macro replacement token sequence is -# pre-scanned and used to create patch lists that are later used -# during macro expansion -# ------------------------------------------------------------------ - -class Macro(object): - def __init__(self,name,value,arglist=None,variadic=False): - self.name = name - self.value = value - self.arglist = arglist - self.variadic = variadic - if variadic: - self.vararg = arglist[-1] - self.source = None - -# ------------------------------------------------------------------ -# Preprocessor object -# -# Object representing a preprocessor. Contains macro definitions, -# include directories, and other information -# ------------------------------------------------------------------ - -class Preprocessor(object): - def __init__(self,lexer=None): - if lexer is None: - lexer = lex.lexer - self.lexer = lexer - self.macros = { } - self.path = [] - self.temp_path = [] - - # Probe the lexer for selected tokens - self.lexprobe() - - tm = time.localtime() - self.define("__DATE__ \"%s\"" % time.strftime("%b %d %Y",tm)) - self.define("__TIME__ \"%s\"" % time.strftime("%H:%M:%S",tm)) - self.parser = None - - # ----------------------------------------------------------------------------- - # tokenize() - # - # Utility function. Given a string of text, tokenize into a list of tokens - # ----------------------------------------------------------------------------- - - def tokenize(self,text): - tokens = [] - self.lexer.input(text) - while True: - tok = self.lexer.token() - if not tok: break - tokens.append(tok) - return tokens - - # --------------------------------------------------------------------- - # error() - # - # Report a preprocessor error/warning of some kind - # ---------------------------------------------------------------------- - - def error(self,file,line,msg): - print("%s:%d %s" % (file,line,msg)) - - # ---------------------------------------------------------------------- - # lexprobe() - # - # This method probes the preprocessor lexer object to discover - # the token types of symbols that are important to the preprocessor. - # If this works right, the preprocessor will simply "work" - # with any suitable lexer regardless of how tokens have been named. - # ---------------------------------------------------------------------- - - def lexprobe(self): - - # Determine the token type for identifiers - self.lexer.input("identifier") - tok = self.lexer.token() - if not tok or tok.value != "identifier": - print("Couldn't determine identifier type") - else: - self.t_ID = tok.type - - # Determine the token type for integers - self.lexer.input("12345") - tok = self.lexer.token() - if not tok or int(tok.value) != 12345: - print("Couldn't determine integer type") - else: - self.t_INTEGER = tok.type - self.t_INTEGER_TYPE = type(tok.value) - - # Determine the token type for strings enclosed in double quotes - self.lexer.input("\"filename\"") - tok = self.lexer.token() - if not tok or tok.value != "\"filename\"": - print("Couldn't determine string type") - else: - self.t_STRING = tok.type - - # Determine the token type for whitespace--if any - self.lexer.input(" ") - tok = self.lexer.token() - if not tok or tok.value != " ": - self.t_SPACE = None - else: - self.t_SPACE = tok.type - - # Determine the token type for newlines - self.lexer.input("\n") - tok = self.lexer.token() - if not tok or tok.value != "\n": - self.t_NEWLINE = None - print("Couldn't determine token for newlines") - else: - self.t_NEWLINE = tok.type - - self.t_WS = (self.t_SPACE, self.t_NEWLINE) - - # Check for other characters used by the preprocessor - chars = [ '<','>','#','##','\\','(',')',',','.'] - for c in chars: - self.lexer.input(c) - tok = self.lexer.token() - if not tok or tok.value != c: - print("Unable to lex '%s' required for preprocessor" % c) - - # ---------------------------------------------------------------------- - # add_path() - # - # Adds a search path to the preprocessor. - # ---------------------------------------------------------------------- - - def add_path(self,path): - self.path.append(path) - - # ---------------------------------------------------------------------- - # group_lines() - # - # Given an input string, this function splits it into lines. Trailing whitespace - # is removed. Any line ending with \ is grouped with the next line. This - # function forms the lowest level of the preprocessor---grouping into text into - # a line-by-line format. - # ---------------------------------------------------------------------- - - def group_lines(self,input): - lex = self.lexer.clone() - lines = [x.rstrip() for x in input.splitlines()] - for i in xrange(len(lines)): - j = i+1 - while lines[i].endswith('\\') and (j < len(lines)): - lines[i] = lines[i][:-1]+lines[j] - lines[j] = "" - j += 1 - - input = "\n".join(lines) - lex.input(input) - lex.lineno = 1 - - current_line = [] - while True: - tok = lex.token() - if not tok: - break - current_line.append(tok) - if tok.type in self.t_WS and '\n' in tok.value: - yield current_line - current_line = [] - - if current_line: - yield current_line - - # ---------------------------------------------------------------------- - # tokenstrip() - # - # Remove leading/trailing whitespace tokens from a token list - # ---------------------------------------------------------------------- - - def tokenstrip(self,tokens): - i = 0 - while i < len(tokens) and tokens[i].type in self.t_WS: - i += 1 - del tokens[:i] - i = len(tokens)-1 - while i >= 0 and tokens[i].type in self.t_WS: - i -= 1 - del tokens[i+1:] - return tokens - - - # ---------------------------------------------------------------------- - # collect_args() - # - # Collects comma separated arguments from a list of tokens. The arguments - # must be enclosed in parenthesis. Returns a tuple (tokencount,args,positions) - # where tokencount is the number of tokens consumed, args is a list of arguments, - # and positions is a list of integers containing the starting index of each - # argument. Each argument is represented by a list of tokens. - # - # When collecting arguments, leading and trailing whitespace is removed - # from each argument. - # - # This function properly handles nested parenthesis and commas---these do not - # define new arguments. - # ---------------------------------------------------------------------- - - def collect_args(self,tokenlist): - args = [] - positions = [] - current_arg = [] - nesting = 1 - tokenlen = len(tokenlist) - - # Search for the opening '('. - i = 0 - while (i < tokenlen) and (tokenlist[i].type in self.t_WS): - i += 1 - - if (i < tokenlen) and (tokenlist[i].value == '('): - positions.append(i+1) - else: - self.error(self.source,tokenlist[0].lineno,"Missing '(' in macro arguments") - return 0, [], [] - - i += 1 - - while i < tokenlen: - t = tokenlist[i] - if t.value == '(': - current_arg.append(t) - nesting += 1 - elif t.value == ')': - nesting -= 1 - if nesting == 0: - if current_arg: - args.append(self.tokenstrip(current_arg)) - positions.append(i) - return i+1,args,positions - current_arg.append(t) - elif t.value == ',' and nesting == 1: - args.append(self.tokenstrip(current_arg)) - positions.append(i+1) - current_arg = [] - else: - current_arg.append(t) - i += 1 - - # Missing end argument - self.error(self.source,tokenlist[-1].lineno,"Missing ')' in macro arguments") - return 0, [],[] - - # ---------------------------------------------------------------------- - # macro_prescan() - # - # Examine the macro value (token sequence) and identify patch points - # This is used to speed up macro expansion later on---we'll know - # right away where to apply patches to the value to form the expansion - # ---------------------------------------------------------------------- - - def macro_prescan(self,macro): - macro.patch = [] # Standard macro arguments - macro.str_patch = [] # String conversion expansion - macro.var_comma_patch = [] # Variadic macro comma patch - i = 0 - while i < len(macro.value): - if macro.value[i].type == self.t_ID and macro.value[i].value in macro.arglist: - argnum = macro.arglist.index(macro.value[i].value) - # Conversion of argument to a string - if i > 0 and macro.value[i-1].value == '#': - macro.value[i] = copy.copy(macro.value[i]) - macro.value[i].type = self.t_STRING - del macro.value[i-1] - macro.str_patch.append((argnum,i-1)) - continue - # Concatenation - elif (i > 0 and macro.value[i-1].value == '##'): - macro.patch.append(('c',argnum,i-1)) - del macro.value[i-1] - continue - elif ((i+1) < len(macro.value) and macro.value[i+1].value == '##'): - macro.patch.append(('c',argnum,i)) - i += 1 - continue - # Standard expansion - else: - macro.patch.append(('e',argnum,i)) - elif macro.value[i].value == '##': - if macro.variadic and (i > 0) and (macro.value[i-1].value == ',') and \ - ((i+1) < len(macro.value)) and (macro.value[i+1].type == self.t_ID) and \ - (macro.value[i+1].value == macro.vararg): - macro.var_comma_patch.append(i-1) - i += 1 - macro.patch.sort(key=lambda x: x[2],reverse=True) - - # ---------------------------------------------------------------------- - # macro_expand_args() - # - # Given a Macro and list of arguments (each a token list), this method - # returns an expanded version of a macro. The return value is a token sequence - # representing the replacement macro tokens - # ---------------------------------------------------------------------- - - def macro_expand_args(self,macro,args): - # Make a copy of the macro token sequence - rep = [copy.copy(_x) for _x in macro.value] - - # Make string expansion patches. These do not alter the length of the replacement sequence - - str_expansion = {} - for argnum, i in macro.str_patch: - if argnum not in str_expansion: - str_expansion[argnum] = ('"%s"' % "".join([x.value for x in args[argnum]])).replace("\\","\\\\") - rep[i] = copy.copy(rep[i]) - rep[i].value = str_expansion[argnum] - - # Make the variadic macro comma patch. If the variadic macro argument is empty, we get rid - comma_patch = False - if macro.variadic and not args[-1]: - for i in macro.var_comma_patch: - rep[i] = None - comma_patch = True - - # Make all other patches. The order of these matters. It is assumed that the patch list - # has been sorted in reverse order of patch location since replacements will cause the - # size of the replacement sequence to expand from the patch point. - - expanded = { } - for ptype, argnum, i in macro.patch: - # Concatenation. Argument is left unexpanded - if ptype == 'c': - rep[i:i+1] = args[argnum] - # Normal expansion. Argument is macro expanded first - elif ptype == 'e': - if argnum not in expanded: - expanded[argnum] = self.expand_macros(args[argnum]) - rep[i:i+1] = expanded[argnum] - - # Get rid of removed comma if necessary - if comma_patch: - rep = [_i for _i in rep if _i] - - return rep - - - # ---------------------------------------------------------------------- - # expand_macros() - # - # Given a list of tokens, this function performs macro expansion. - # The expanded argument is a dictionary that contains macros already - # expanded. This is used to prevent infinite recursion. - # ---------------------------------------------------------------------- - - def expand_macros(self,tokens,expanded=None): - if expanded is None: - expanded = {} - i = 0 - while i < len(tokens): - t = tokens[i] - if t.type == self.t_ID: - if t.value in self.macros and t.value not in expanded: - # Yes, we found a macro match - expanded[t.value] = True - - m = self.macros[t.value] - if not m.arglist: - # A simple macro - ex = self.expand_macros([copy.copy(_x) for _x in m.value],expanded) - for e in ex: - e.lineno = t.lineno - tokens[i:i+1] = ex - i += len(ex) - else: - # A macro with arguments - j = i + 1 - while j < len(tokens) and tokens[j].type in self.t_WS: - j += 1 - if tokens[j].value == '(': - tokcount,args,positions = self.collect_args(tokens[j:]) - if not m.variadic and len(args) != len(m.arglist): - self.error(self.source,t.lineno,"Macro %s requires %d arguments" % (t.value,len(m.arglist))) - i = j + tokcount - elif m.variadic and len(args) < len(m.arglist)-1: - if len(m.arglist) > 2: - self.error(self.source,t.lineno,"Macro %s must have at least %d arguments" % (t.value, len(m.arglist)-1)) - else: - self.error(self.source,t.lineno,"Macro %s must have at least %d argument" % (t.value, len(m.arglist)-1)) - i = j + tokcount - else: - if m.variadic: - if len(args) == len(m.arglist)-1: - args.append([]) - else: - args[len(m.arglist)-1] = tokens[j+positions[len(m.arglist)-1]:j+tokcount-1] - del args[len(m.arglist):] - - # Get macro replacement text - rep = self.macro_expand_args(m,args) - rep = self.expand_macros(rep,expanded) - for r in rep: - r.lineno = t.lineno - tokens[i:j+tokcount] = rep - i += len(rep) - del expanded[t.value] - continue - elif t.value == '__LINE__': - t.type = self.t_INTEGER - t.value = self.t_INTEGER_TYPE(t.lineno) - - i += 1 - return tokens - - # ---------------------------------------------------------------------- - # evalexpr() - # - # Evaluate an expression token sequence for the purposes of evaluating - # integral expressions. - # ---------------------------------------------------------------------- - - def evalexpr(self,tokens): - # tokens = tokenize(line) - # Search for defined macros - i = 0 - while i < len(tokens): - if tokens[i].type == self.t_ID and tokens[i].value == 'defined': - j = i + 1 - needparen = False - result = "0L" - while j < len(tokens): - if tokens[j].type in self.t_WS: - j += 1 - continue - elif tokens[j].type == self.t_ID: - if tokens[j].value in self.macros: - result = "1L" - else: - result = "0L" - if not needparen: break - elif tokens[j].value == '(': - needparen = True - elif tokens[j].value == ')': - break - else: - self.error(self.source,tokens[i].lineno,"Malformed defined()") - j += 1 - tokens[i].type = self.t_INTEGER - tokens[i].value = self.t_INTEGER_TYPE(result) - del tokens[i+1:j+1] - i += 1 - tokens = self.expand_macros(tokens) - for i,t in enumerate(tokens): - if t.type == self.t_ID: - tokens[i] = copy.copy(t) - tokens[i].type = self.t_INTEGER - tokens[i].value = self.t_INTEGER_TYPE("0L") - elif t.type == self.t_INTEGER: - tokens[i] = copy.copy(t) - # Strip off any trailing suffixes - tokens[i].value = str(tokens[i].value) - while tokens[i].value[-1] not in "0123456789abcdefABCDEF": - tokens[i].value = tokens[i].value[:-1] - - expr = "".join([str(x.value) for x in tokens]) - expr = expr.replace("&&"," and ") - expr = expr.replace("||"," or ") - expr = expr.replace("!"," not ") - try: - result = eval(expr) - except StandardError: - self.error(self.source,tokens[0].lineno,"Couldn't evaluate expression") - result = 0 - return result - - # ---------------------------------------------------------------------- - # parsegen() - # - # Parse an input string/ - # ---------------------------------------------------------------------- - def parsegen(self,input,source=None): - - # Replace trigraph sequences - t = trigraph(input) - lines = self.group_lines(t) - - if not source: - source = "" - - self.define("__FILE__ \"%s\"" % source) - - self.source = source - chunk = [] - enable = True - iftrigger = False - ifstack = [] - - for x in lines: - for i,tok in enumerate(x): - if tok.type not in self.t_WS: break - if tok.value == '#': - # Preprocessor directive - - for tok in x: - if tok in self.t_WS and '\n' in tok.value: - chunk.append(tok) - - dirtokens = self.tokenstrip(x[i+1:]) - if dirtokens: - name = dirtokens[0].value - args = self.tokenstrip(dirtokens[1:]) - else: - name = "" - args = [] - - if name == 'define': - if enable: - for tok in self.expand_macros(chunk): - yield tok - chunk = [] - self.define(args) - elif name == 'include': - if enable: - for tok in self.expand_macros(chunk): - yield tok - chunk = [] - oldfile = self.macros['__FILE__'] - for tok in self.include(args): - yield tok - self.macros['__FILE__'] = oldfile - self.source = source - elif name == 'undef': - if enable: - for tok in self.expand_macros(chunk): - yield tok - chunk = [] - self.undef(args) - elif name == 'ifdef': - ifstack.append((enable,iftrigger)) - if enable: - if not args[0].value in self.macros: - enable = False - iftrigger = False - else: - iftrigger = True - elif name == 'ifndef': - ifstack.append((enable,iftrigger)) - if enable: - if args[0].value in self.macros: - enable = False - iftrigger = False - else: - iftrigger = True - elif name == 'if': - ifstack.append((enable,iftrigger)) - if enable: - result = self.evalexpr(args) - if not result: - enable = False - iftrigger = False - else: - iftrigger = True - elif name == 'elif': - if ifstack: - if ifstack[-1][0]: # We only pay attention if outer "if" allows this - if enable: # If already true, we flip enable False - enable = False - elif not iftrigger: # If False, but not triggered yet, we'll check expression - result = self.evalexpr(args) - if result: - enable = True - iftrigger = True - else: - self.error(self.source,dirtokens[0].lineno,"Misplaced #elif") - - elif name == 'else': - if ifstack: - if ifstack[-1][0]: - if enable: - enable = False - elif not iftrigger: - enable = True - iftrigger = True - else: - self.error(self.source,dirtokens[0].lineno,"Misplaced #else") - - elif name == 'endif': - if ifstack: - enable,iftrigger = ifstack.pop() - else: - self.error(self.source,dirtokens[0].lineno,"Misplaced #endif") - else: - # Unknown preprocessor directive - pass - - else: - # Normal text - if enable: - chunk.extend(x) - - for tok in self.expand_macros(chunk): - yield tok - chunk = [] - - # ---------------------------------------------------------------------- - # include() - # - # Implementation of file-inclusion - # ---------------------------------------------------------------------- - - def include(self,tokens): - # Try to extract the filename and then process an include file - if not tokens: - return - if tokens: - if tokens[0].value != '<' and tokens[0].type != self.t_STRING: - tokens = self.expand_macros(tokens) - - if tokens[0].value == '<': - # Include <...> - i = 1 - while i < len(tokens): - if tokens[i].value == '>': - break - i += 1 - else: - print("Malformed #include <...>") - return - filename = "".join([x.value for x in tokens[1:i]]) - path = self.path + [""] + self.temp_path - elif tokens[0].type == self.t_STRING: - filename = tokens[0].value[1:-1] - path = self.temp_path + [""] + self.path - else: - print("Malformed #include statement") - return - for p in path: - iname = os.path.join(p,filename) - try: - data = open(iname,"r").read() - dname = os.path.dirname(iname) - if dname: - self.temp_path.insert(0,dname) - for tok in self.parsegen(data,filename): - yield tok - if dname: - del self.temp_path[0] - break - except IOError: - pass - else: - print("Couldn't find '%s'" % filename) - - # ---------------------------------------------------------------------- - # define() - # - # Define a new macro - # ---------------------------------------------------------------------- - - def define(self,tokens): - if isinstance(tokens,(str,unicode)): - tokens = self.tokenize(tokens) - - linetok = tokens - try: - name = linetok[0] - if len(linetok) > 1: - mtype = linetok[1] - else: - mtype = None - if not mtype: - m = Macro(name.value,[]) - self.macros[name.value] = m - elif mtype.type in self.t_WS: - # A normal macro - m = Macro(name.value,self.tokenstrip(linetok[2:])) - self.macros[name.value] = m - elif mtype.value == '(': - # A macro with arguments - tokcount, args, positions = self.collect_args(linetok[1:]) - variadic = False - for a in args: - if variadic: - print("No more arguments may follow a variadic argument") - break - astr = "".join([str(_i.value) for _i in a]) - if astr == "...": - variadic = True - a[0].type = self.t_ID - a[0].value = '__VA_ARGS__' - variadic = True - del a[1:] - continue - elif astr[-3:] == "..." and a[0].type == self.t_ID: - variadic = True - del a[1:] - # If, for some reason, "." is part of the identifier, strip off the name for the purposes - # of macro expansion - if a[0].value[-3:] == '...': - a[0].value = a[0].value[:-3] - continue - if len(a) > 1 or a[0].type != self.t_ID: - print("Invalid macro argument") - break - else: - mvalue = self.tokenstrip(linetok[1+tokcount:]) - i = 0 - while i < len(mvalue): - if i+1 < len(mvalue): - if mvalue[i].type in self.t_WS and mvalue[i+1].value == '##': - del mvalue[i] - continue - elif mvalue[i].value == '##' and mvalue[i+1].type in self.t_WS: - del mvalue[i+1] - i += 1 - m = Macro(name.value,mvalue,[x[0].value for x in args],variadic) - self.macro_prescan(m) - self.macros[name.value] = m - else: - print("Bad macro definition") - except LookupError: - print("Bad macro definition") - - # ---------------------------------------------------------------------- - # undef() - # - # Undefine a macro - # ---------------------------------------------------------------------- - - def undef(self,tokens): - id = tokens[0].value - try: - del self.macros[id] - except LookupError: - pass - - # ---------------------------------------------------------------------- - # parse() - # - # Parse input text. - # ---------------------------------------------------------------------- - def parse(self,input,source=None,ignore={}): - self.ignore = ignore - self.parser = self.parsegen(input,source) - - # ---------------------------------------------------------------------- - # token() - # - # Method to return individual tokens - # ---------------------------------------------------------------------- - def token(self): - try: - while True: - tok = next(self.parser) - if tok.type not in self.ignore: return tok - except StopIteration: - self.parser = None - return None - -if __name__ == '__main__': - import ply.lex as lex - lexer = lex.lex() - - # Run a preprocessor - import sys - f = open(sys.argv[1]) - input = f.read() - - p = Preprocessor(lexer) - p.parse(input,sys.argv[1]) - while True: - tok = p.token() - if not tok: break - print(p.source, tok) - - - - - - - - - - - diff --git a/idl/ply/ply/ctokens.py b/idl/ply/ply/ctokens.py deleted file mode 100644 index dd5f102..0000000 --- a/idl/ply/ply/ctokens.py +++ /dev/null @@ -1,133 +0,0 @@ -# ---------------------------------------------------------------------- -# ctokens.py -# -# Token specifications for symbols in ANSI C and C++. This file is -# meant to be used as a library in other tokenizers. -# ---------------------------------------------------------------------- - -# Reserved words - -tokens = [ - # Literals (identifier, integer constant, float constant, string constant, char const) - 'ID', 'TYPEID', 'ICONST', 'FCONST', 'SCONST', 'CCONST', - - # Operators (+,-,*,/,%,|,&,~,^,<<,>>, ||, &&, !, <, <=, >, >=, ==, !=) - 'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'MOD', - 'OR', 'AND', 'NOT', 'XOR', 'LSHIFT', 'RSHIFT', - 'LOR', 'LAND', 'LNOT', - 'LT', 'LE', 'GT', 'GE', 'EQ', 'NE', - - # Assignment (=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=) - 'EQUALS', 'TIMESEQUAL', 'DIVEQUAL', 'MODEQUAL', 'PLUSEQUAL', 'MINUSEQUAL', - 'LSHIFTEQUAL','RSHIFTEQUAL', 'ANDEQUAL', 'XOREQUAL', 'OREQUAL', - - # Increment/decrement (++,--) - 'PLUSPLUS', 'MINUSMINUS', - - # Structure dereference (->) - 'ARROW', - - # Ternary operator (?) - 'TERNARY', - - # Delimeters ( ) [ ] { } , . ; : - 'LPAREN', 'RPAREN', - 'LBRACKET', 'RBRACKET', - 'LBRACE', 'RBRACE', - 'COMMA', 'PERIOD', 'SEMI', 'COLON', - - # Ellipsis (...) - 'ELLIPSIS', -] - -# Operators -t_PLUS = r'\+' -t_MINUS = r'-' -t_TIMES = r'\*' -t_DIVIDE = r'/' -t_MODULO = r'%' -t_OR = r'\|' -t_AND = r'&' -t_NOT = r'~' -t_XOR = r'\^' -t_LSHIFT = r'<<' -t_RSHIFT = r'>>' -t_LOR = r'\|\|' -t_LAND = r'&&' -t_LNOT = r'!' -t_LT = r'<' -t_GT = r'>' -t_LE = r'<=' -t_GE = r'>=' -t_EQ = r'==' -t_NE = r'!=' - -# Assignment operators - -t_EQUALS = r'=' -t_TIMESEQUAL = r'\*=' -t_DIVEQUAL = r'/=' -t_MODEQUAL = r'%=' -t_PLUSEQUAL = r'\+=' -t_MINUSEQUAL = r'-=' -t_LSHIFTEQUAL = r'<<=' -t_RSHIFTEQUAL = r'>>=' -t_ANDEQUAL = r'&=' -t_OREQUAL = r'\|=' -t_XOREQUAL = r'^=' - -# Increment/decrement -t_INCREMENT = r'\+\+' -t_DECREMENT = r'--' - -# -> -t_ARROW = r'->' - -# ? -t_TERNARY = r'\?' - -# Delimeters -t_LPAREN = r'\(' -t_RPAREN = r'\)' -t_LBRACKET = r'\[' -t_RBRACKET = r'\]' -t_LBRACE = r'\{' -t_RBRACE = r'\}' -t_COMMA = r',' -t_PERIOD = r'\.' -t_SEMI = r';' -t_COLON = r':' -t_ELLIPSIS = r'\.\.\.' - -# Identifiers -t_ID = r'[A-Za-z_][A-Za-z0-9_]*' - -# Integer literal -t_INTEGER = r'\d+([uU]|[lL]|[uU][lL]|[lL][uU])?' - -# Floating literal -t_FLOAT = r'((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?' - -# String literal -t_STRING = r'\"([^\\\n]|(\\.))*?\"' - -# Character constant 'c' or L'c' -t_CHARACTER = r'(L)?\'([^\\\n]|(\\.))*?\'' - -# Comment (C-Style) -def t_COMMENT(t): - r'/\*(.|\n)*?\*/' - t.lexer.lineno += t.value.count('\n') - return t - -# Comment (C++-Style) -def t_CPPCOMMENT(t): - r'//.*\n' - t.lexer.lineno += 1 - return t - - - - - - diff --git a/idl/ply/ply/lex.py b/idl/ply/ply/lex.py deleted file mode 100644 index bd32da9..0000000 --- a/idl/ply/ply/lex.py +++ /dev/null @@ -1,1058 +0,0 @@ -# ----------------------------------------------------------------------------- -# ply: lex.py -# -# Copyright (C) 2001-2011, -# David M. Beazley (Dabeaz LLC) -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the David Beazley or Dabeaz LLC may be used to -# endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ----------------------------------------------------------------------------- - -__version__ = "3.4" -__tabversion__ = "3.2" # Version of table file used - -import re, sys, types, copy, os - -# This tuple contains known string types -try: - # Python 2.6 - StringTypes = (types.StringType, types.UnicodeType) -except AttributeError: - # Python 3.0 - StringTypes = (str, bytes) - -# Extract the code attribute of a function. Different implementations -# are for Python 2/3 compatibility. - -if sys.version_info[0] < 3: - def func_code(f): - return f.func_code -else: - def func_code(f): - return f.__code__ - -# This regular expression is used to match valid token names -_is_identifier = re.compile(r'^[a-zA-Z0-9_]+$') - -# Exception thrown when invalid token encountered and no default error -# handler is defined. - -class LexError(Exception): - def __init__(self,message,s): - self.args = (message,) - self.text = s - -# Token class. This class is used to represent the tokens produced. -class LexToken(object): - def __str__(self): - return "LexToken(%s,%r,%d,%d)" % (self.type,self.value,self.lineno,self.lexpos) - def __repr__(self): - return str(self) - -# This object is a stand-in for a logging object created by the -# logging module. - -class PlyLogger(object): - def __init__(self,f): - self.f = f - def critical(self,msg,*args,**kwargs): - self.f.write((msg % args) + "\n") - - def warning(self,msg,*args,**kwargs): - self.f.write("WARNING: "+ (msg % args) + "\n") - - def error(self,msg,*args,**kwargs): - self.f.write("ERROR: " + (msg % args) + "\n") - - info = critical - debug = critical - -# Null logger is used when no output is generated. Does nothing. -class NullLogger(object): - def __getattribute__(self,name): - return self - def __call__(self,*args,**kwargs): - return self - -# ----------------------------------------------------------------------------- -# === Lexing Engine === -# -# The following Lexer class implements the lexer runtime. There are only -# a few public methods and attributes: -# -# input() - Store a new string in the lexer -# token() - Get the next token -# clone() - Clone the lexer -# -# lineno - Current line number -# lexpos - Current position in the input string -# ----------------------------------------------------------------------------- - -class Lexer: - def __init__(self): - self.lexre = None # Master regular expression. This is a list of - # tuples (re,findex) where re is a compiled - # regular expression and findex is a list - # mapping regex group numbers to rules - self.lexretext = None # Current regular expression strings - self.lexstatere = {} # Dictionary mapping lexer states to master regexs - self.lexstateretext = {} # Dictionary mapping lexer states to regex strings - self.lexstaterenames = {} # Dictionary mapping lexer states to symbol names - self.lexstate = "INITIAL" # Current lexer state - self.lexstatestack = [] # Stack of lexer states - self.lexstateinfo = None # State information - self.lexstateignore = {} # Dictionary of ignored characters for each state - self.lexstateerrorf = {} # Dictionary of error functions for each state - self.lexreflags = 0 # Optional re compile flags - self.lexdata = None # Actual input data (as a string) - self.lexpos = 0 # Current position in input text - self.lexlen = 0 # Length of the input text - self.lexerrorf = None # Error rule (if any) - self.lextokens = None # List of valid tokens - self.lexignore = "" # Ignored characters - self.lexliterals = "" # Literal characters that can be passed through - self.lexmodule = None # Module - self.lineno = 1 # Current line number - self.lexoptimize = 0 # Optimized mode - - def clone(self,object=None): - c = copy.copy(self) - - # If the object parameter has been supplied, it means we are attaching the - # lexer to a new object. In this case, we have to rebind all methods in - # the lexstatere and lexstateerrorf tables. - - if object: - newtab = { } - for key, ritem in self.lexstatere.items(): - newre = [] - for cre, findex in ritem: - newfindex = [] - for f in findex: - if not f or not f[0]: - newfindex.append(f) - continue - newfindex.append((getattr(object,f[0].__name__),f[1])) - newre.append((cre,newfindex)) - newtab[key] = newre - c.lexstatere = newtab - c.lexstateerrorf = { } - for key, ef in self.lexstateerrorf.items(): - c.lexstateerrorf[key] = getattr(object,ef.__name__) - c.lexmodule = object - return c - - # ------------------------------------------------------------ - # writetab() - Write lexer information to a table file - # ------------------------------------------------------------ - def writetab(self,tabfile,outputdir=""): - if isinstance(tabfile,types.ModuleType): - return - basetabfilename = tabfile.split(".")[-1] - filename = os.path.join(outputdir,basetabfilename)+".py" - tf = open(filename,"w") - tf.write("# %s.py. This file automatically created by PLY (version %s). Don't edit!\n" % (tabfile,__version__)) - tf.write("_tabversion = %s\n" % repr(__version__)) - tf.write("_lextokens = %s\n" % repr(self.lextokens)) - tf.write("_lexreflags = %s\n" % repr(self.lexreflags)) - tf.write("_lexliterals = %s\n" % repr(self.lexliterals)) - tf.write("_lexstateinfo = %s\n" % repr(self.lexstateinfo)) - - tabre = { } - # Collect all functions in the initial state - initial = self.lexstatere["INITIAL"] - initialfuncs = [] - for part in initial: - for f in part[1]: - if f and f[0]: - initialfuncs.append(f) - - for key, lre in self.lexstatere.items(): - titem = [] - for i in range(len(lre)): - titem.append((self.lexstateretext[key][i],_funcs_to_names(lre[i][1],self.lexstaterenames[key][i]))) - tabre[key] = titem - - tf.write("_lexstatere = %s\n" % repr(tabre)) - tf.write("_lexstateignore = %s\n" % repr(self.lexstateignore)) - - taberr = { } - for key, ef in self.lexstateerrorf.items(): - if ef: - taberr[key] = ef.__name__ - else: - taberr[key] = None - tf.write("_lexstateerrorf = %s\n" % repr(taberr)) - tf.close() - - # ------------------------------------------------------------ - # readtab() - Read lexer information from a tab file - # ------------------------------------------------------------ - def readtab(self,tabfile,fdict): - if isinstance(tabfile,types.ModuleType): - lextab = tabfile - else: - if sys.version_info[0] < 3: - exec("import %s as lextab" % tabfile) - else: - env = { } - exec("import %s as lextab" % tabfile, env,env) - lextab = env['lextab'] - - if getattr(lextab,"_tabversion","0.0") != __version__: - raise ImportError("Inconsistent PLY version") - - self.lextokens = lextab._lextokens - self.lexreflags = lextab._lexreflags - self.lexliterals = lextab._lexliterals - self.lexstateinfo = lextab._lexstateinfo - self.lexstateignore = lextab._lexstateignore - self.lexstatere = { } - self.lexstateretext = { } - for key,lre in lextab._lexstatere.items(): - titem = [] - txtitem = [] - for i in range(len(lre)): - titem.append((re.compile(lre[i][0],lextab._lexreflags | re.VERBOSE),_names_to_funcs(lre[i][1],fdict))) - txtitem.append(lre[i][0]) - self.lexstatere[key] = titem - self.lexstateretext[key] = txtitem - self.lexstateerrorf = { } - for key,ef in lextab._lexstateerrorf.items(): - self.lexstateerrorf[key] = fdict[ef] - self.begin('INITIAL') - - # ------------------------------------------------------------ - # input() - Push a new string into the lexer - # ------------------------------------------------------------ - def input(self,s): - # Pull off the first character to see if s looks like a string - c = s[:1] - if not isinstance(c,StringTypes): - raise ValueError("Expected a string") - self.lexdata = s - self.lexpos = 0 - self.lexlen = len(s) - - # ------------------------------------------------------------ - # begin() - Changes the lexing state - # ------------------------------------------------------------ - def begin(self,state): - if not state in self.lexstatere: - raise ValueError("Undefined state") - self.lexre = self.lexstatere[state] - self.lexretext = self.lexstateretext[state] - self.lexignore = self.lexstateignore.get(state,"") - self.lexerrorf = self.lexstateerrorf.get(state,None) - self.lexstate = state - - # ------------------------------------------------------------ - # push_state() - Changes the lexing state and saves old on stack - # ------------------------------------------------------------ - def push_state(self,state): - self.lexstatestack.append(self.lexstate) - self.begin(state) - - # ------------------------------------------------------------ - # pop_state() - Restores the previous state - # ------------------------------------------------------------ - def pop_state(self): - self.begin(self.lexstatestack.pop()) - - # ------------------------------------------------------------ - # current_state() - Returns the current lexing state - # ------------------------------------------------------------ - def current_state(self): - return self.lexstate - - # ------------------------------------------------------------ - # skip() - Skip ahead n characters - # ------------------------------------------------------------ - def skip(self,n): - self.lexpos += n - - # ------------------------------------------------------------ - # opttoken() - Return the next token from the Lexer - # - # Note: This function has been carefully implemented to be as fast - # as possible. Don't make changes unless you really know what - # you are doing - # ------------------------------------------------------------ - def token(self): - # Make local copies of frequently referenced attributes - lexpos = self.lexpos - lexlen = self.lexlen - lexignore = self.lexignore - lexdata = self.lexdata - - while lexpos < lexlen: - # This code provides some short-circuit code for whitespace, tabs, and other ignored characters - if lexdata[lexpos] in lexignore: - lexpos += 1 - continue - - # Look for a regular expression match - for lexre,lexindexfunc in self.lexre: - m = lexre.match(lexdata,lexpos) - if not m: continue - - # Create a token for return - tok = LexToken() - tok.value = m.group() - tok.lineno = self.lineno - tok.lexpos = lexpos - - i = m.lastindex - func,tok.type = lexindexfunc[i] - - if not func: - # If no token type was set, it's an ignored token - if tok.type: - self.lexpos = m.end() - return tok - else: - lexpos = m.end() - break - - lexpos = m.end() - - # If token is processed by a function, call it - - tok.lexer = self # Set additional attributes useful in token rules - self.lexmatch = m - self.lexpos = lexpos - - newtok = func(tok) - - # Every function must return a token, if nothing, we just move to next token - if not newtok: - lexpos = self.lexpos # This is here in case user has updated lexpos. - lexignore = self.lexignore # This is here in case there was a state change - break - - # Verify type of the token. If not in the token map, raise an error - if not self.lexoptimize: - if not newtok.type in self.lextokens: - raise LexError("%s:%d: Rule '%s' returned an unknown token type '%s'" % ( - func_code(func).co_filename, func_code(func).co_firstlineno, - func.__name__, newtok.type),lexdata[lexpos:]) - - return newtok - else: - # No match, see if in literals - if lexdata[lexpos] in self.lexliterals: - tok = LexToken() - tok.value = lexdata[lexpos] - tok.lineno = self.lineno - tok.type = tok.value - tok.lexpos = lexpos - self.lexpos = lexpos + 1 - return tok - - # No match. Call t_error() if defined. - if self.lexerrorf: - tok = LexToken() - tok.value = self.lexdata[lexpos:] - tok.lineno = self.lineno - tok.type = "error" - tok.lexer = self - tok.lexpos = lexpos - self.lexpos = lexpos - newtok = self.lexerrorf(tok) - if lexpos == self.lexpos: - # Error method didn't change text position at all. This is an error. - raise LexError("Scanning error. Illegal character '%s'" % (lexdata[lexpos]), lexdata[lexpos:]) - lexpos = self.lexpos - if not newtok: continue - return newtok - - self.lexpos = lexpos - raise LexError("Illegal character '%s' at index %d" % (lexdata[lexpos],lexpos), lexdata[lexpos:]) - - self.lexpos = lexpos + 1 - if self.lexdata is None: - raise RuntimeError("No input string given with input()") - return None - - # Iterator interface - def __iter__(self): - return self - - def next(self): - t = self.token() - if t is None: - raise StopIteration - return t - - __next__ = next - -# ----------------------------------------------------------------------------- -# ==== Lex Builder === -# -# The functions and classes below are used to collect lexing information -# and build a Lexer object from it. -# ----------------------------------------------------------------------------- - -# ----------------------------------------------------------------------------- -# get_caller_module_dict() -# -# This function returns a dictionary containing all of the symbols defined within -# a caller further down the call stack. This is used to get the environment -# associated with the yacc() call if none was provided. -# ----------------------------------------------------------------------------- - -def get_caller_module_dict(levels): - try: - raise RuntimeError - except RuntimeError: - e,b,t = sys.exc_info() - f = t.tb_frame - while levels > 0: - f = f.f_back - levels -= 1 - ldict = f.f_globals.copy() - if f.f_globals != f.f_locals: - ldict.update(f.f_locals) - - return ldict - -# ----------------------------------------------------------------------------- -# _funcs_to_names() -# -# Given a list of regular expression functions, this converts it to a list -# suitable for output to a table file -# ----------------------------------------------------------------------------- - -def _funcs_to_names(funclist,namelist): - result = [] - for f,name in zip(funclist,namelist): - if f and f[0]: - result.append((name, f[1])) - else: - result.append(f) - return result - -# ----------------------------------------------------------------------------- -# _names_to_funcs() -# -# Given a list of regular expression function names, this converts it back to -# functions. -# ----------------------------------------------------------------------------- - -def _names_to_funcs(namelist,fdict): - result = [] - for n in namelist: - if n and n[0]: - result.append((fdict[n[0]],n[1])) - else: - result.append(n) - return result - -# ----------------------------------------------------------------------------- -# _form_master_re() -# -# This function takes a list of all of the regex components and attempts to -# form the master regular expression. Given limitations in the Python re -# module, it may be necessary to break the master regex into separate expressions. -# ----------------------------------------------------------------------------- - -def _form_master_re(relist,reflags,ldict,toknames): - if not relist: return [] - regex = "|".join(relist) - try: - lexre = re.compile(regex,re.VERBOSE | reflags) - - # Build the index to function map for the matching engine - lexindexfunc = [ None ] * (max(lexre.groupindex.values())+1) - lexindexnames = lexindexfunc[:] - - for f,i in lexre.groupindex.items(): - handle = ldict.get(f,None) - if type(handle) in (types.FunctionType, types.MethodType): - lexindexfunc[i] = (handle,toknames[f]) - lexindexnames[i] = f - elif handle is not None: - lexindexnames[i] = f - if f.find("ignore_") > 0: - lexindexfunc[i] = (None,None) - else: - lexindexfunc[i] = (None, toknames[f]) - - return [(lexre,lexindexfunc)],[regex],[lexindexnames] - except Exception: - m = int(len(relist)/2) - if m == 0: m = 1 - llist, lre, lnames = _form_master_re(relist[:m],reflags,ldict,toknames) - rlist, rre, rnames = _form_master_re(relist[m:],reflags,ldict,toknames) - return llist+rlist, lre+rre, lnames+rnames - -# ----------------------------------------------------------------------------- -# def _statetoken(s,names) -# -# Given a declaration name s of the form "t_" and a dictionary whose keys are -# state names, this function returns a tuple (states,tokenname) where states -# is a tuple of state names and tokenname is the name of the token. For example, -# calling this with s = "t_foo_bar_SPAM" might return (('foo','bar'),'SPAM') -# ----------------------------------------------------------------------------- - -def _statetoken(s,names): - nonstate = 1 - parts = s.split("_") - for i in range(1,len(parts)): - if not parts[i] in names and parts[i] != 'ANY': break - if i > 1: - states = tuple(parts[1:i]) - else: - states = ('INITIAL',) - - if 'ANY' in states: - states = tuple(names) - - tokenname = "_".join(parts[i:]) - return (states,tokenname) - - -# ----------------------------------------------------------------------------- -# LexerReflect() -# -# This class represents information needed to build a lexer as extracted from a -# user's input file. -# ----------------------------------------------------------------------------- -class LexerReflect(object): - def __init__(self,ldict,log=None,reflags=0): - self.ldict = ldict - self.error_func = None - self.tokens = [] - self.reflags = reflags - self.stateinfo = { 'INITIAL' : 'inclusive'} - self.files = {} - self.error = 0 - - if log is None: - self.log = PlyLogger(sys.stderr) - else: - self.log = log - - # Get all of the basic information - def get_all(self): - self.get_tokens() - self.get_literals() - self.get_states() - self.get_rules() - - # Validate all of the information - def validate_all(self): - self.validate_tokens() - self.validate_literals() - self.validate_rules() - return self.error - - # Get the tokens map - def get_tokens(self): - tokens = self.ldict.get("tokens",None) - if not tokens: - self.log.error("No token list is defined") - self.error = 1 - return - - if not isinstance(tokens,(list, tuple)): - self.log.error("tokens must be a list or tuple") - self.error = 1 - return - - if not tokens: - self.log.error("tokens is empty") - self.error = 1 - return - - self.tokens = tokens - - # Validate the tokens - def validate_tokens(self): - terminals = {} - for n in self.tokens: - if not _is_identifier.match(n): - self.log.error("Bad token name '%s'",n) - self.error = 1 - if n in terminals: - self.log.warning("Token '%s' multiply defined", n) - terminals[n] = 1 - - # Get the literals specifier - def get_literals(self): - self.literals = self.ldict.get("literals","") - - # Validate literals - def validate_literals(self): - try: - for c in self.literals: - if not isinstance(c,StringTypes) or len(c) > 1: - self.log.error("Invalid literal %s. Must be a single character", repr(c)) - self.error = 1 - continue - - except TypeError: - self.log.error("Invalid literals specification. literals must be a sequence of characters") - self.error = 1 - - def get_states(self): - self.states = self.ldict.get("states",None) - # Build statemap - if self.states: - if not isinstance(self.states,(tuple,list)): - self.log.error("states must be defined as a tuple or list") - self.error = 1 - else: - for s in self.states: - if not isinstance(s,tuple) or len(s) != 2: - self.log.error("Invalid state specifier %s. Must be a tuple (statename,'exclusive|inclusive')",repr(s)) - self.error = 1 - continue - name, statetype = s - if not isinstance(name,StringTypes): - self.log.error("State name %s must be a string", repr(name)) - self.error = 1 - continue - if not (statetype == 'inclusive' or statetype == 'exclusive'): - self.log.error("State type for state %s must be 'inclusive' or 'exclusive'",name) - self.error = 1 - continue - if name in self.stateinfo: - self.log.error("State '%s' already defined",name) - self.error = 1 - continue - self.stateinfo[name] = statetype - - # Get all of the symbols with a t_ prefix and sort them into various - # categories (functions, strings, error functions, and ignore characters) - - def get_rules(self): - tsymbols = [f for f in self.ldict if f[:2] == 't_' ] - - # Now build up a list of functions and a list of strings - - self.toknames = { } # Mapping of symbols to token names - self.funcsym = { } # Symbols defined as functions - self.strsym = { } # Symbols defined as strings - self.ignore = { } # Ignore strings by state - self.errorf = { } # Error functions by state - - for s in self.stateinfo: - self.funcsym[s] = [] - self.strsym[s] = [] - - if len(tsymbols) == 0: - self.log.error("No rules of the form t_rulename are defined") - self.error = 1 - return - - for f in tsymbols: - t = self.ldict[f] - states, tokname = _statetoken(f,self.stateinfo) - self.toknames[f] = tokname - - if hasattr(t,"__call__"): - if tokname == 'error': - for s in states: - self.errorf[s] = t - elif tokname == 'ignore': - line = func_code(t).co_firstlineno - file = func_code(t).co_filename - self.log.error("%s:%d: Rule '%s' must be defined as a string",file,line,t.__name__) - self.error = 1 - else: - for s in states: - self.funcsym[s].append((f,t)) - elif isinstance(t, StringTypes): - if tokname == 'ignore': - for s in states: - self.ignore[s] = t - if "\\" in t: - self.log.warning("%s contains a literal backslash '\\'",f) - - elif tokname == 'error': - self.log.error("Rule '%s' must be defined as a function", f) - self.error = 1 - else: - for s in states: - self.strsym[s].append((f,t)) - else: - self.log.error("%s not defined as a function or string", f) - self.error = 1 - - # Sort the functions by line number - for f in self.funcsym.values(): - if sys.version_info[0] < 3: - f.sort(lambda x,y: cmp(func_code(x[1]).co_firstlineno,func_code(y[1]).co_firstlineno)) - else: - # Python 3.0 - f.sort(key=lambda x: func_code(x[1]).co_firstlineno) - - # Sort the strings by regular expression length - for s in self.strsym.values(): - if sys.version_info[0] < 3: - s.sort(lambda x,y: (len(x[1]) < len(y[1])) - (len(x[1]) > len(y[1]))) - else: - # Python 3.0 - s.sort(key=lambda x: len(x[1]),reverse=True) - - # Validate all of the t_rules collected - def validate_rules(self): - for state in self.stateinfo: - # Validate all rules defined by functions - - - - for fname, f in self.funcsym[state]: - line = func_code(f).co_firstlineno - file = func_code(f).co_filename - self.files[file] = 1 - - tokname = self.toknames[fname] - if isinstance(f, types.MethodType): - reqargs = 2 - else: - reqargs = 1 - nargs = func_code(f).co_argcount - if nargs > reqargs: - self.log.error("%s:%d: Rule '%s' has too many arguments",file,line,f.__name__) - self.error = 1 - continue - - if nargs < reqargs: - self.log.error("%s:%d: Rule '%s' requires an argument", file,line,f.__name__) - self.error = 1 - continue - - if not f.__doc__: - self.log.error("%s:%d: No regular expression defined for rule '%s'",file,line,f.__name__) - self.error = 1 - continue - - try: - c = re.compile("(?P<%s>%s)" % (fname,f.__doc__), re.VERBOSE | self.reflags) - if c.match(""): - self.log.error("%s:%d: Regular expression for rule '%s' matches empty string", file,line,f.__name__) - self.error = 1 - except re.error: - _etype, e, _etrace = sys.exc_info() - self.log.error("%s:%d: Invalid regular expression for rule '%s'. %s", file,line,f.__name__,e) - if '#' in f.__doc__: - self.log.error("%s:%d. Make sure '#' in rule '%s' is escaped with '\\#'",file,line, f.__name__) - self.error = 1 - - # Validate all rules defined by strings - for name,r in self.strsym[state]: - tokname = self.toknames[name] - if tokname == 'error': - self.log.error("Rule '%s' must be defined as a function", name) - self.error = 1 - continue - - if not tokname in self.tokens and tokname.find("ignore_") < 0: - self.log.error("Rule '%s' defined for an unspecified token %s",name,tokname) - self.error = 1 - continue - - try: - c = re.compile("(?P<%s>%s)" % (name,r),re.VERBOSE | self.reflags) - if (c.match("")): - self.log.error("Regular expression for rule '%s' matches empty string",name) - self.error = 1 - except re.error: - _etype, e, _etrace = sys.exc_info() - self.log.error("Invalid regular expression for rule '%s'. %s",name,e) - if '#' in r: - self.log.error("Make sure '#' in rule '%s' is escaped with '\\#'",name) - self.error = 1 - - if not self.funcsym[state] and not self.strsym[state]: - self.log.error("No rules defined for state '%s'",state) - self.error = 1 - - # Validate the error function - efunc = self.errorf.get(state,None) - if efunc: - f = efunc - line = func_code(f).co_firstlineno - file = func_code(f).co_filename - self.files[file] = 1 - - if isinstance(f, types.MethodType): - reqargs = 2 - else: - reqargs = 1 - nargs = func_code(f).co_argcount - if nargs > reqargs: - self.log.error("%s:%d: Rule '%s' has too many arguments",file,line,f.__name__) - self.error = 1 - - if nargs < reqargs: - self.log.error("%s:%d: Rule '%s' requires an argument", file,line,f.__name__) - self.error = 1 - - for f in self.files: - self.validate_file(f) - - - # ----------------------------------------------------------------------------- - # validate_file() - # - # This checks to see if there are duplicated t_rulename() functions or strings - # in the parser input file. This is done using a simple regular expression - # match on each line in the given file. - # ----------------------------------------------------------------------------- - - def validate_file(self,filename): - import os.path - base,ext = os.path.splitext(filename) - if ext != '.py': return # No idea what the file is. Return OK - - try: - f = open(filename) - lines = f.readlines() - f.close() - except IOError: - return # Couldn't find the file. Don't worry about it - - fre = re.compile(r'\s*def\s+(t_[a-zA-Z_0-9]*)\(') - sre = re.compile(r'\s*(t_[a-zA-Z_0-9]*)\s*=') - - counthash = { } - linen = 1 - for l in lines: - m = fre.match(l) - if not m: - m = sre.match(l) - if m: - name = m.group(1) - prev = counthash.get(name) - if not prev: - counthash[name] = linen - else: - self.log.error("%s:%d: Rule %s redefined. Previously defined on line %d",filename,linen,name,prev) - self.error = 1 - linen += 1 - -# ----------------------------------------------------------------------------- -# lex(module) -# -# Build all of the regular expression rules from definitions in the supplied module -# ----------------------------------------------------------------------------- -def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,nowarn=0,outputdir="", debuglog=None, errorlog=None): - global lexer - ldict = None - stateinfo = { 'INITIAL' : 'inclusive'} - lexobj = Lexer() - lexobj.lexoptimize = optimize - global token,input - - if errorlog is None: - errorlog = PlyLogger(sys.stderr) - - if debug: - if debuglog is None: - debuglog = PlyLogger(sys.stderr) - - # Get the module dictionary used for the lexer - if object: module = object - - if module: - _items = [(k,getattr(module,k)) for k in dir(module)] - ldict = dict(_items) - else: - ldict = get_caller_module_dict(2) - - # Collect parser information from the dictionary - linfo = LexerReflect(ldict,log=errorlog,reflags=reflags) - linfo.get_all() - if not optimize: - if linfo.validate_all(): - raise SyntaxError("Can't build lexer") - - if optimize and lextab: - try: - lexobj.readtab(lextab,ldict) - token = lexobj.token - input = lexobj.input - lexer = lexobj - return lexobj - - except ImportError: - pass - - # Dump some basic debugging information - if debug: - debuglog.info("lex: tokens = %r", linfo.tokens) - debuglog.info("lex: literals = %r", linfo.literals) - debuglog.info("lex: states = %r", linfo.stateinfo) - - # Build a dictionary of valid token names - lexobj.lextokens = { } - for n in linfo.tokens: - lexobj.lextokens[n] = 1 - - # Get literals specification - if isinstance(linfo.literals,(list,tuple)): - lexobj.lexliterals = type(linfo.literals[0])().join(linfo.literals) - else: - lexobj.lexliterals = linfo.literals - - # Get the stateinfo dictionary - stateinfo = linfo.stateinfo - - regexs = { } - # Build the master regular expressions - for state in stateinfo: - regex_list = [] - - # Add rules defined by functions first - for fname, f in linfo.funcsym[state]: - line = func_code(f).co_firstlineno - file = func_code(f).co_filename - regex_list.append("(?P<%s>%s)" % (fname,f.__doc__)) - if debug: - debuglog.info("lex: Adding rule %s -> '%s' (state '%s')",fname,f.__doc__, state) - - # Now add all of the simple rules - for name,r in linfo.strsym[state]: - regex_list.append("(?P<%s>%s)" % (name,r)) - if debug: - debuglog.info("lex: Adding rule %s -> '%s' (state '%s')",name,r, state) - - regexs[state] = regex_list - - # Build the master regular expressions - - if debug: - debuglog.info("lex: ==== MASTER REGEXS FOLLOW ====") - - for state in regexs: - lexre, re_text, re_names = _form_master_re(regexs[state],reflags,ldict,linfo.toknames) - lexobj.lexstatere[state] = lexre - lexobj.lexstateretext[state] = re_text - lexobj.lexstaterenames[state] = re_names - if debug: - for i in range(len(re_text)): - debuglog.info("lex: state '%s' : regex[%d] = '%s'",state, i, re_text[i]) - - # For inclusive states, we need to add the regular expressions from the INITIAL state - for state,stype in stateinfo.items(): - if state != "INITIAL" and stype == 'inclusive': - lexobj.lexstatere[state].extend(lexobj.lexstatere['INITIAL']) - lexobj.lexstateretext[state].extend(lexobj.lexstateretext['INITIAL']) - lexobj.lexstaterenames[state].extend(lexobj.lexstaterenames['INITIAL']) - - lexobj.lexstateinfo = stateinfo - lexobj.lexre = lexobj.lexstatere["INITIAL"] - lexobj.lexretext = lexobj.lexstateretext["INITIAL"] - lexobj.lexreflags = reflags - - # Set up ignore variables - lexobj.lexstateignore = linfo.ignore - lexobj.lexignore = lexobj.lexstateignore.get("INITIAL","") - - # Set up error functions - lexobj.lexstateerrorf = linfo.errorf - lexobj.lexerrorf = linfo.errorf.get("INITIAL",None) - if not lexobj.lexerrorf: - errorlog.warning("No t_error rule is defined") - - # Check state information for ignore and error rules - for s,stype in stateinfo.items(): - if stype == 'exclusive': - if not s in linfo.errorf: - errorlog.warning("No error rule is defined for exclusive state '%s'", s) - if not s in linfo.ignore and lexobj.lexignore: - errorlog.warning("No ignore rule is defined for exclusive state '%s'", s) - elif stype == 'inclusive': - if not s in linfo.errorf: - linfo.errorf[s] = linfo.errorf.get("INITIAL",None) - if not s in linfo.ignore: - linfo.ignore[s] = linfo.ignore.get("INITIAL","") - - # Create global versions of the token() and input() functions - token = lexobj.token - input = lexobj.input - lexer = lexobj - - # If in optimize mode, we write the lextab - if lextab and optimize: - lexobj.writetab(lextab,outputdir) - - return lexobj - -# ----------------------------------------------------------------------------- -# runmain() -# -# This runs the lexer as a main program -# ----------------------------------------------------------------------------- - -def runmain(lexer=None,data=None): - if not data: - try: - filename = sys.argv[1] - f = open(filename) - data = f.read() - f.close() - except IndexError: - sys.stdout.write("Reading from standard input (type EOF to end):\n") - data = sys.stdin.read() - - if lexer: - _input = lexer.input - else: - _input = input - _input(data) - if lexer: - _token = lexer.token - else: - _token = token - - while 1: - tok = _token() - if not tok: break - sys.stdout.write("(%s,%r,%d,%d)\n" % (tok.type, tok.value, tok.lineno,tok.lexpos)) - -# ----------------------------------------------------------------------------- -# @TOKEN(regex) -# -# This decorator function can be used to set the regex expression on a function -# when its docstring might need to be set in an alternative way -# ----------------------------------------------------------------------------- - -def TOKEN(r): - def set_doc(f): - if hasattr(r,"__call__"): - f.__doc__ = r.__doc__ - else: - f.__doc__ = r - return f - return set_doc - -# Alternative spelling of the TOKEN decorator -Token = TOKEN - diff --git a/idl/ply/ply/yacc.py b/idl/ply/ply/yacc.py deleted file mode 100644 index f70439e..0000000 --- a/idl/ply/ply/yacc.py +++ /dev/null @@ -1,3276 +0,0 @@ -# ----------------------------------------------------------------------------- -# ply: yacc.py -# -# Copyright (C) 2001-2011, -# David M. Beazley (Dabeaz LLC) -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the David Beazley or Dabeaz LLC may be used to -# endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ----------------------------------------------------------------------------- -# -# This implements an LR parser that is constructed from grammar rules defined -# as Python functions. The grammer is specified by supplying the BNF inside -# Python documentation strings. The inspiration for this technique was borrowed -# from John Aycock's Spark parsing system. PLY might be viewed as cross between -# Spark and the GNU bison utility. -# -# The current implementation is only somewhat object-oriented. The -# LR parser itself is defined in terms of an object (which allows multiple -# parsers to co-exist). However, most of the variables used during table -# construction are defined in terms of global variables. Users shouldn't -# notice unless they are trying to define multiple parsers at the same -# time using threads (in which case they should have their head examined). -# -# This implementation supports both SLR and LALR(1) parsing. LALR(1) -# support was originally implemented by Elias Ioup (ezioup@alumni.uchicago.edu), -# using the algorithm found in Aho, Sethi, and Ullman "Compilers: Principles, -# Techniques, and Tools" (The Dragon Book). LALR(1) has since been replaced -# by the more efficient DeRemer and Pennello algorithm. -# -# :::::::: WARNING ::::::: -# -# Construction of LR parsing tables is fairly complicated and expensive. -# To make this module run fast, a *LOT* of work has been put into -# optimization---often at the expensive of readability and what might -# consider to be good Python "coding style." Modify the code at your -# own risk! -# ---------------------------------------------------------------------------- - -__version__ = "3.4" -__tabversion__ = "3.2" # Table version - -#----------------------------------------------------------------------------- -# === User configurable parameters === -# -# Change these to modify the default behavior of yacc (if you wish) -#----------------------------------------------------------------------------- - -yaccdebug = 1 # Debugging mode. If set, yacc generates a - # a 'parser.out' file in the current directory - -debug_file = 'parser.out' # Default name of the debugging file -tab_module = 'parsetab' # Default name of the table module -default_lr = 'LALR' # Default LR table generation method - -error_count = 3 # Number of symbols that must be shifted to leave recovery mode - -yaccdevel = 0 # Set to True if developing yacc. This turns off optimized - # implementations of certain functions. - -resultlimit = 40 # Size limit of results when running in debug mode. - -pickle_protocol = 0 # Protocol to use when writing pickle files - -import re, types, sys, os.path - -# Compatibility function for python 2.6/3.0 -if sys.version_info[0] < 3: - def func_code(f): - return f.func_code -else: - def func_code(f): - return f.__code__ - -# Compatibility -try: - MAXINT = sys.maxint -except AttributeError: - MAXINT = sys.maxsize - -# Python 2.x/3.0 compatibility. -def load_ply_lex(): - if sys.version_info[0] < 3: - import lex - else: - import ply.lex as lex - return lex - -# This object is a stand-in for a logging object created by the -# logging module. PLY will use this by default to create things -# such as the parser.out file. If a user wants more detailed -# information, they can create their own logging object and pass -# it into PLY. - -class PlyLogger(object): - def __init__(self,f): - self.f = f - def debug(self,msg,*args,**kwargs): - self.f.write((msg % args) + "\n") - info = debug - - def warning(self,msg,*args,**kwargs): - self.f.write("WARNING: "+ (msg % args) + "\n") - - def error(self,msg,*args,**kwargs): - self.f.write("ERROR: " + (msg % args) + "\n") - - critical = debug - -# Null logger is used when no output is generated. Does nothing. -class NullLogger(object): - def __getattribute__(self,name): - return self - def __call__(self,*args,**kwargs): - return self - -# Exception raised for yacc-related errors -class YaccError(Exception): pass - -# Format the result message that the parser produces when running in debug mode. -def format_result(r): - repr_str = repr(r) - if '\n' in repr_str: repr_str = repr(repr_str) - if len(repr_str) > resultlimit: - repr_str = repr_str[:resultlimit]+" ..." - result = "<%s @ 0x%x> (%s)" % (type(r).__name__,id(r),repr_str) - return result - - -# Format stack entries when the parser is running in debug mode -def format_stack_entry(r): - repr_str = repr(r) - if '\n' in repr_str: repr_str = repr(repr_str) - if len(repr_str) < 16: - return repr_str - else: - return "<%s @ 0x%x>" % (type(r).__name__,id(r)) - -#----------------------------------------------------------------------------- -# === LR Parsing Engine === -# -# The following classes are used for the LR parser itself. These are not -# used during table construction and are independent of the actual LR -# table generation algorithm -#----------------------------------------------------------------------------- - -# This class is used to hold non-terminal grammar symbols during parsing. -# It normally has the following attributes set: -# .type = Grammar symbol type -# .value = Symbol value -# .lineno = Starting line number -# .endlineno = Ending line number (optional, set automatically) -# .lexpos = Starting lex position -# .endlexpos = Ending lex position (optional, set automatically) - -class YaccSymbol: - def __str__(self): return self.type - def __repr__(self): return str(self) - -# This class is a wrapper around the objects actually passed to each -# grammar rule. Index lookup and assignment actually assign the -# .value attribute of the underlying YaccSymbol object. -# The lineno() method returns the line number of a given -# item (or 0 if not defined). The linespan() method returns -# a tuple of (startline,endline) representing the range of lines -# for a symbol. The lexspan() method returns a tuple (lexpos,endlexpos) -# representing the range of positional information for a symbol. - -class YaccProduction: - def __init__(self,s,stack=None): - self.slice = s - self.stack = stack - self.lexer = None - self.parser= None - def __getitem__(self,n): - if n >= 0: return self.slice[n].value - else: return self.stack[n].value - - def __setitem__(self,n,v): - self.slice[n].value = v - - def __getslice__(self,i,j): - return [s.value for s in self.slice[i:j]] - - def __len__(self): - return len(self.slice) - - def lineno(self,n): - return getattr(self.slice[n],"lineno",0) - - def set_lineno(self,n,lineno): - self.slice[n].lineno = lineno - - def linespan(self,n): - startline = getattr(self.slice[n],"lineno",0) - endline = getattr(self.slice[n],"endlineno",startline) - return startline,endline - - def lexpos(self,n): - return getattr(self.slice[n],"lexpos",0) - - def lexspan(self,n): - startpos = getattr(self.slice[n],"lexpos",0) - endpos = getattr(self.slice[n],"endlexpos",startpos) - return startpos,endpos - - def error(self): - raise SyntaxError - - -# ----------------------------------------------------------------------------- -# == LRParser == -# -# The LR Parsing engine. -# ----------------------------------------------------------------------------- - -class LRParser: - def __init__(self,lrtab,errorf): - self.productions = lrtab.lr_productions - self.action = lrtab.lr_action - self.goto = lrtab.lr_goto - self.errorfunc = errorf - - def errok(self): - self.errorok = 1 - - def restart(self): - del self.statestack[:] - del self.symstack[:] - sym = YaccSymbol() - sym.type = '$end' - self.symstack.append(sym) - self.statestack.append(0) - - def parse(self,input=None,lexer=None,debug=0,tracking=0,tokenfunc=None): - if debug or yaccdevel: - if isinstance(debug,int): - debug = PlyLogger(sys.stderr) - return self.parsedebug(input,lexer,debug,tracking,tokenfunc) - elif tracking: - return self.parseopt(input,lexer,debug,tracking,tokenfunc) - else: - return self.parseopt_notrack(input,lexer,debug,tracking,tokenfunc) - - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # parsedebug(). - # - # This is the debugging enabled version of parse(). All changes made to the - # parsing engine should be made here. For the non-debugging version, - # copy this code to a method parseopt() and delete all of the sections - # enclosed in: - # - # #--! DEBUG - # statements - # #--! DEBUG - # - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - def parsedebug(self,input=None,lexer=None,debug=None,tracking=0,tokenfunc=None): - lookahead = None # Current lookahead symbol - lookaheadstack = [ ] # Stack of lookahead symbols - actions = self.action # Local reference to action table (to avoid lookup on self.) - goto = self.goto # Local reference to goto table (to avoid lookup on self.) - prod = self.productions # Local reference to production list (to avoid lookup on self.) - pslice = YaccProduction(None) # Production object passed to grammar rules - errorcount = 0 # Used during error recovery - - # --! DEBUG - debug.info("PLY: PARSE DEBUG START") - # --! DEBUG - - # If no lexer was given, we will try to use the lex module - if not lexer: - lex = load_ply_lex() - lexer = lex.lexer - - # Set up the lexer and parser objects on pslice - pslice.lexer = lexer - pslice.parser = self - - # If input was supplied, pass to lexer - if input is not None: - lexer.input(input) - - if tokenfunc is None: - # Tokenize function - get_token = lexer.token - else: - get_token = tokenfunc - - # Set up the state and symbol stacks - - statestack = [ ] # Stack of parsing states - self.statestack = statestack - symstack = [ ] # Stack of grammar symbols - self.symstack = symstack - - pslice.stack = symstack # Put in the production - errtoken = None # Err token - - # The start state is assumed to be (0,$end) - - statestack.append(0) - sym = YaccSymbol() - sym.type = "$end" - symstack.append(sym) - state = 0 - while 1: - # Get the next symbol on the input. If a lookahead symbol - # is already set, we just use that. Otherwise, we'll pull - # the next token off of the lookaheadstack or from the lexer - - # --! DEBUG - debug.debug('') - debug.debug('State : %s', state) - # --! DEBUG - - if not lookahead: - if not lookaheadstack: - lookahead = get_token() # Get the next token - else: - lookahead = lookaheadstack.pop() - if not lookahead: - lookahead = YaccSymbol() - lookahead.type = "$end" - - # --! DEBUG - debug.debug('Stack : %s', - ("%s . %s" % (" ".join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()) - # --! DEBUG - - # Check the action table - ltype = lookahead.type - t = actions[state].get(ltype) - - if t is not None: - if t > 0: - # shift a symbol on the stack - statestack.append(t) - state = t - - # --! DEBUG - debug.debug("Action : Shift and goto state %s", t) - # --! DEBUG - - symstack.append(lookahead) - lookahead = None - - # Decrease error count on successful shift - if errorcount: errorcount -=1 - continue - - if t < 0: - # reduce a symbol on the stack, emit a production - p = prod[-t] - pname = p.name - plen = p.len - - # Get production function - sym = YaccSymbol() - sym.type = pname # Production name - sym.value = None - - # --! DEBUG - if plen: - debug.info("Action : Reduce rule [%s] with %s and goto state %d", p.str, "["+",".join([format_stack_entry(_v.value) for _v in symstack[-plen:]])+"]",-t) - else: - debug.info("Action : Reduce rule [%s] with %s and goto state %d", p.str, [],-t) - - # --! DEBUG - - if plen: - targ = symstack[-plen-1:] - targ[0] = sym - - # --! TRACKING - if tracking: - t1 = targ[1] - sym.lineno = t1.lineno - sym.lexpos = t1.lexpos - t1 = targ[-1] - sym.endlineno = getattr(t1,"endlineno",t1.lineno) - sym.endlexpos = getattr(t1,"endlexpos",t1.lexpos) - - # --! TRACKING - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # The code enclosed in this section is duplicated - # below as a performance optimization. Make sure - # changes get made in both locations. - - pslice.slice = targ - - try: - # Call the grammar rule with our special slice object - del symstack[-plen:] - del statestack[-plen:] - p.callable(pslice) - # --! DEBUG - debug.info("Result : %s", format_result(pslice[0])) - # --! DEBUG - symstack.append(sym) - state = goto[statestack[-1]][pname] - statestack.append(state) - except SyntaxError: - # If an error was set. Enter error recovery state - lookaheadstack.append(lookahead) - symstack.pop() - statestack.pop() - state = statestack[-1] - sym.type = 'error' - lookahead = sym - errorcount = error_count - self.errorok = 0 - continue - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - else: - - # --! TRACKING - if tracking: - sym.lineno = lexer.lineno - sym.lexpos = lexer.lexpos - # --! TRACKING - - targ = [ sym ] - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # The code enclosed in this section is duplicated - # above as a performance optimization. Make sure - # changes get made in both locations. - - pslice.slice = targ - - try: - # Call the grammar rule with our special slice object - p.callable(pslice) - # --! DEBUG - debug.info("Result : %s", format_result(pslice[0])) - # --! DEBUG - symstack.append(sym) - state = goto[statestack[-1]][pname] - statestack.append(state) - except SyntaxError: - # If an error was set. Enter error recovery state - lookaheadstack.append(lookahead) - symstack.pop() - statestack.pop() - state = statestack[-1] - sym.type = 'error' - lookahead = sym - errorcount = error_count - self.errorok = 0 - continue - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - if t == 0: - n = symstack[-1] - result = getattr(n,"value",None) - # --! DEBUG - debug.info("Done : Returning %s", format_result(result)) - debug.info("PLY: PARSE DEBUG END") - # --! DEBUG - return result - - if t == None: - - # --! DEBUG - debug.error('Error : %s', - ("%s . %s" % (" ".join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()) - # --! DEBUG - - # We have some kind of parsing error here. To handle - # this, we are going to push the current token onto - # the tokenstack and replace it with an 'error' token. - # If there are any synchronization rules, they may - # catch it. - # - # In addition to pushing the error token, we call call - # the user defined p_error() function if this is the - # first syntax error. This function is only called if - # errorcount == 0. - if errorcount == 0 or self.errorok: - errorcount = error_count - self.errorok = 0 - errtoken = lookahead - if errtoken.type == "$end": - errtoken = None # End of file! - if self.errorfunc: - global errok,token,restart - errok = self.errok # Set some special functions available in error recovery - token = get_token - restart = self.restart - if errtoken and not hasattr(errtoken,'lexer'): - errtoken.lexer = lexer - tok = self.errorfunc(errtoken) - del errok, token, restart # Delete special functions - - if self.errorok: - # User must have done some kind of panic - # mode recovery on their own. The - # returned token is the next lookahead - lookahead = tok - errtoken = None - continue - else: - if errtoken: - if hasattr(errtoken,"lineno"): lineno = lookahead.lineno - else: lineno = 0 - if lineno: - sys.stderr.write("yacc: Syntax error at line %d, token=%s\n" % (lineno, errtoken.type)) - else: - sys.stderr.write("yacc: Syntax error, token=%s" % errtoken.type) - else: - sys.stderr.write("yacc: Parse error in input. EOF\n") - return - - else: - errorcount = error_count - - # case 1: the statestack only has 1 entry on it. If we're in this state, the - # entire parse has been rolled back and we're completely hosed. The token is - # discarded and we just keep going. - - if len(statestack) <= 1 and lookahead.type != "$end": - lookahead = None - errtoken = None - state = 0 - # Nuke the pushback stack - del lookaheadstack[:] - continue - - # case 2: the statestack has a couple of entries on it, but we're - # at the end of the file. nuke the top entry and generate an error token - - # Start nuking entries on the stack - if lookahead.type == "$end": - # Whoa. We're really hosed here. Bail out - return - - if lookahead.type != 'error': - sym = symstack[-1] - if sym.type == 'error': - # Hmmm. Error is on top of stack, we'll just nuke input - # symbol and continue - lookahead = None - continue - t = YaccSymbol() - t.type = 'error' - if hasattr(lookahead,"lineno"): - t.lineno = lookahead.lineno - t.value = lookahead - lookaheadstack.append(lookahead) - lookahead = t - else: - symstack.pop() - statestack.pop() - state = statestack[-1] # Potential bug fix - - continue - - # Call an error function here - raise RuntimeError("yacc: internal parser error!!!\n") - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # parseopt(). - # - # Optimized version of parse() method. DO NOT EDIT THIS CODE DIRECTLY. - # Edit the debug version above, then copy any modifications to the method - # below while removing #--! DEBUG sections. - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - - def parseopt(self,input=None,lexer=None,debug=0,tracking=0,tokenfunc=None): - lookahead = None # Current lookahead symbol - lookaheadstack = [ ] # Stack of lookahead symbols - actions = self.action # Local reference to action table (to avoid lookup on self.) - goto = self.goto # Local reference to goto table (to avoid lookup on self.) - prod = self.productions # Local reference to production list (to avoid lookup on self.) - pslice = YaccProduction(None) # Production object passed to grammar rules - errorcount = 0 # Used during error recovery - - # If no lexer was given, we will try to use the lex module - if not lexer: - lex = load_ply_lex() - lexer = lex.lexer - - # Set up the lexer and parser objects on pslice - pslice.lexer = lexer - pslice.parser = self - - # If input was supplied, pass to lexer - if input is not None: - lexer.input(input) - - if tokenfunc is None: - # Tokenize function - get_token = lexer.token - else: - get_token = tokenfunc - - # Set up the state and symbol stacks - - statestack = [ ] # Stack of parsing states - self.statestack = statestack - symstack = [ ] # Stack of grammar symbols - self.symstack = symstack - - pslice.stack = symstack # Put in the production - errtoken = None # Err token - - # The start state is assumed to be (0,$end) - - statestack.append(0) - sym = YaccSymbol() - sym.type = '$end' - symstack.append(sym) - state = 0 - while 1: - # Get the next symbol on the input. If a lookahead symbol - # is already set, we just use that. Otherwise, we'll pull - # the next token off of the lookaheadstack or from the lexer - - if not lookahead: - if not lookaheadstack: - lookahead = get_token() # Get the next token - else: - lookahead = lookaheadstack.pop() - if not lookahead: - lookahead = YaccSymbol() - lookahead.type = '$end' - - # Check the action table - ltype = lookahead.type - t = actions[state].get(ltype) - - if t is not None: - if t > 0: - # shift a symbol on the stack - statestack.append(t) - state = t - - symstack.append(lookahead) - lookahead = None - - # Decrease error count on successful shift - if errorcount: errorcount -=1 - continue - - if t < 0: - # reduce a symbol on the stack, emit a production - p = prod[-t] - pname = p.name - plen = p.len - - # Get production function - sym = YaccSymbol() - sym.type = pname # Production name - sym.value = None - - if plen: - targ = symstack[-plen-1:] - targ[0] = sym - - # --! TRACKING - if tracking: - t1 = targ[1] - sym.lineno = t1.lineno - sym.lexpos = t1.lexpos - t1 = targ[-1] - sym.endlineno = getattr(t1,"endlineno",t1.lineno) - sym.endlexpos = getattr(t1,"endlexpos",t1.lexpos) - - # --! TRACKING - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # The code enclosed in this section is duplicated - # below as a performance optimization. Make sure - # changes get made in both locations. - - pslice.slice = targ - - try: - # Call the grammar rule with our special slice object - del symstack[-plen:] - del statestack[-plen:] - p.callable(pslice) - symstack.append(sym) - state = goto[statestack[-1]][pname] - statestack.append(state) - except SyntaxError: - # If an error was set. Enter error recovery state - lookaheadstack.append(lookahead) - symstack.pop() - statestack.pop() - state = statestack[-1] - sym.type = 'error' - lookahead = sym - errorcount = error_count - self.errorok = 0 - continue - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - else: - - # --! TRACKING - if tracking: - sym.lineno = lexer.lineno - sym.lexpos = lexer.lexpos - # --! TRACKING - - targ = [ sym ] - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # The code enclosed in this section is duplicated - # above as a performance optimization. Make sure - # changes get made in both locations. - - pslice.slice = targ - - try: - # Call the grammar rule with our special slice object - p.callable(pslice) - symstack.append(sym) - state = goto[statestack[-1]][pname] - statestack.append(state) - except SyntaxError: - # If an error was set. Enter error recovery state - lookaheadstack.append(lookahead) - symstack.pop() - statestack.pop() - state = statestack[-1] - sym.type = 'error' - lookahead = sym - errorcount = error_count - self.errorok = 0 - continue - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - if t == 0: - n = symstack[-1] - return getattr(n,"value",None) - - if t == None: - - # We have some kind of parsing error here. To handle - # this, we are going to push the current token onto - # the tokenstack and replace it with an 'error' token. - # If there are any synchronization rules, they may - # catch it. - # - # In addition to pushing the error token, we call call - # the user defined p_error() function if this is the - # first syntax error. This function is only called if - # errorcount == 0. - if errorcount == 0 or self.errorok: - errorcount = error_count - self.errorok = 0 - errtoken = lookahead - if errtoken.type == '$end': - errtoken = None # End of file! - if self.errorfunc: - global errok,token,restart - errok = self.errok # Set some special functions available in error recovery - token = get_token - restart = self.restart - if errtoken and not hasattr(errtoken,'lexer'): - errtoken.lexer = lexer - tok = self.errorfunc(errtoken) - del errok, token, restart # Delete special functions - - if self.errorok: - # User must have done some kind of panic - # mode recovery on their own. The - # returned token is the next lookahead - lookahead = tok - errtoken = None - continue - else: - if errtoken: - if hasattr(errtoken,"lineno"): lineno = lookahead.lineno - else: lineno = 0 - if lineno: - sys.stderr.write("yacc: Syntax error at line %d, token=%s\n" % (lineno, errtoken.type)) - else: - sys.stderr.write("yacc: Syntax error, token=%s" % errtoken.type) - else: - sys.stderr.write("yacc: Parse error in input. EOF\n") - return - - else: - errorcount = error_count - - # case 1: the statestack only has 1 entry on it. If we're in this state, the - # entire parse has been rolled back and we're completely hosed. The token is - # discarded and we just keep going. - - if len(statestack) <= 1 and lookahead.type != '$end': - lookahead = None - errtoken = None - state = 0 - # Nuke the pushback stack - del lookaheadstack[:] - continue - - # case 2: the statestack has a couple of entries on it, but we're - # at the end of the file. nuke the top entry and generate an error token - - # Start nuking entries on the stack - if lookahead.type == '$end': - # Whoa. We're really hosed here. Bail out - return - - if lookahead.type != 'error': - sym = symstack[-1] - if sym.type == 'error': - # Hmmm. Error is on top of stack, we'll just nuke input - # symbol and continue - lookahead = None - continue - t = YaccSymbol() - t.type = 'error' - if hasattr(lookahead,"lineno"): - t.lineno = lookahead.lineno - t.value = lookahead - lookaheadstack.append(lookahead) - lookahead = t - else: - symstack.pop() - statestack.pop() - state = statestack[-1] # Potential bug fix - - continue - - # Call an error function here - raise RuntimeError("yacc: internal parser error!!!\n") - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # parseopt_notrack(). - # - # Optimized version of parseopt() with line number tracking removed. - # DO NOT EDIT THIS CODE DIRECTLY. Copy the optimized version and remove - # code in the #--! TRACKING sections - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - def parseopt_notrack(self,input=None,lexer=None,debug=0,tracking=0,tokenfunc=None): - lookahead = None # Current lookahead symbol - lookaheadstack = [ ] # Stack of lookahead symbols - actions = self.action # Local reference to action table (to avoid lookup on self.) - goto = self.goto # Local reference to goto table (to avoid lookup on self.) - prod = self.productions # Local reference to production list (to avoid lookup on self.) - pslice = YaccProduction(None) # Production object passed to grammar rules - errorcount = 0 # Used during error recovery - - # If no lexer was given, we will try to use the lex module - if not lexer: - lex = load_ply_lex() - lexer = lex.lexer - - # Set up the lexer and parser objects on pslice - pslice.lexer = lexer - pslice.parser = self - - # If input was supplied, pass to lexer - if input is not None: - lexer.input(input) - - if tokenfunc is None: - # Tokenize function - get_token = lexer.token - else: - get_token = tokenfunc - - # Set up the state and symbol stacks - - statestack = [ ] # Stack of parsing states - self.statestack = statestack - symstack = [ ] # Stack of grammar symbols - self.symstack = symstack - - pslice.stack = symstack # Put in the production - errtoken = None # Err token - - # The start state is assumed to be (0,$end) - - statestack.append(0) - sym = YaccSymbol() - sym.type = '$end' - symstack.append(sym) - state = 0 - while 1: - # Get the next symbol on the input. If a lookahead symbol - # is already set, we just use that. Otherwise, we'll pull - # the next token off of the lookaheadstack or from the lexer - - if not lookahead: - if not lookaheadstack: - lookahead = get_token() # Get the next token - else: - lookahead = lookaheadstack.pop() - if not lookahead: - lookahead = YaccSymbol() - lookahead.type = '$end' - - # Check the action table - ltype = lookahead.type - t = actions[state].get(ltype) - - if t is not None: - if t > 0: - # shift a symbol on the stack - statestack.append(t) - state = t - - symstack.append(lookahead) - lookahead = None - - # Decrease error count on successful shift - if errorcount: errorcount -=1 - continue - - if t < 0: - # reduce a symbol on the stack, emit a production - p = prod[-t] - pname = p.name - plen = p.len - - # Get production function - sym = YaccSymbol() - sym.type = pname # Production name - sym.value = None - - if plen: - targ = symstack[-plen-1:] - targ[0] = sym - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # The code enclosed in this section is duplicated - # below as a performance optimization. Make sure - # changes get made in both locations. - - pslice.slice = targ - - try: - # Call the grammar rule with our special slice object - del symstack[-plen:] - del statestack[-plen:] - p.callable(pslice) - symstack.append(sym) - state = goto[statestack[-1]][pname] - statestack.append(state) - except SyntaxError: - # If an error was set. Enter error recovery state - lookaheadstack.append(lookahead) - symstack.pop() - statestack.pop() - state = statestack[-1] - sym.type = 'error' - lookahead = sym - errorcount = error_count - self.errorok = 0 - continue - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - else: - - targ = [ sym ] - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # The code enclosed in this section is duplicated - # above as a performance optimization. Make sure - # changes get made in both locations. - - pslice.slice = targ - - try: - # Call the grammar rule with our special slice object - p.callable(pslice) - symstack.append(sym) - state = goto[statestack[-1]][pname] - statestack.append(state) - except SyntaxError: - # If an error was set. Enter error recovery state - lookaheadstack.append(lookahead) - symstack.pop() - statestack.pop() - state = statestack[-1] - sym.type = 'error' - lookahead = sym - errorcount = error_count - self.errorok = 0 - continue - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - if t == 0: - n = symstack[-1] - return getattr(n,"value",None) - - if t == None: - - # We have some kind of parsing error here. To handle - # this, we are going to push the current token onto - # the tokenstack and replace it with an 'error' token. - # If there are any synchronization rules, they may - # catch it. - # - # In addition to pushing the error token, we call call - # the user defined p_error() function if this is the - # first syntax error. This function is only called if - # errorcount == 0. - if errorcount == 0 or self.errorok: - errorcount = error_count - self.errorok = 0 - errtoken = lookahead - if errtoken.type == '$end': - errtoken = None # End of file! - if self.errorfunc: - global errok,token,restart - errok = self.errok # Set some special functions available in error recovery - token = get_token - restart = self.restart - if errtoken and not hasattr(errtoken,'lexer'): - errtoken.lexer = lexer - tok = self.errorfunc(errtoken) - del errok, token, restart # Delete special functions - - if self.errorok: - # User must have done some kind of panic - # mode recovery on their own. The - # returned token is the next lookahead - lookahead = tok - errtoken = None - continue - else: - if errtoken: - if hasattr(errtoken,"lineno"): lineno = lookahead.lineno - else: lineno = 0 - if lineno: - sys.stderr.write("yacc: Syntax error at line %d, token=%s\n" % (lineno, errtoken.type)) - else: - sys.stderr.write("yacc: Syntax error, token=%s" % errtoken.type) - else: - sys.stderr.write("yacc: Parse error in input. EOF\n") - return - - else: - errorcount = error_count - - # case 1: the statestack only has 1 entry on it. If we're in this state, the - # entire parse has been rolled back and we're completely hosed. The token is - # discarded and we just keep going. - - if len(statestack) <= 1 and lookahead.type != '$end': - lookahead = None - errtoken = None - state = 0 - # Nuke the pushback stack - del lookaheadstack[:] - continue - - # case 2: the statestack has a couple of entries on it, but we're - # at the end of the file. nuke the top entry and generate an error token - - # Start nuking entries on the stack - if lookahead.type == '$end': - # Whoa. We're really hosed here. Bail out - return - - if lookahead.type != 'error': - sym = symstack[-1] - if sym.type == 'error': - # Hmmm. Error is on top of stack, we'll just nuke input - # symbol and continue - lookahead = None - continue - t = YaccSymbol() - t.type = 'error' - if hasattr(lookahead,"lineno"): - t.lineno = lookahead.lineno - t.value = lookahead - lookaheadstack.append(lookahead) - lookahead = t - else: - symstack.pop() - statestack.pop() - state = statestack[-1] # Potential bug fix - - continue - - # Call an error function here - raise RuntimeError("yacc: internal parser error!!!\n") - -# ----------------------------------------------------------------------------- -# === Grammar Representation === -# -# The following functions, classes, and variables are used to represent and -# manipulate the rules that make up a grammar. -# ----------------------------------------------------------------------------- - -import re - -# regex matching identifiers -_is_identifier = re.compile(r'^[a-zA-Z0-9_-]+$') - -# ----------------------------------------------------------------------------- -# class Production: -# -# This class stores the raw information about a single production or grammar rule. -# A grammar rule refers to a specification such as this: -# -# expr : expr PLUS term -# -# Here are the basic attributes defined on all productions -# -# name - Name of the production. For example 'expr' -# prod - A list of symbols on the right side ['expr','PLUS','term'] -# prec - Production precedence level -# number - Production number. -# func - Function that executes on reduce -# file - File where production function is defined -# lineno - Line number where production function is defined -# -# The following attributes are defined or optional. -# -# len - Length of the production (number of symbols on right hand side) -# usyms - Set of unique symbols found in the production -# ----------------------------------------------------------------------------- - -class Production(object): - reduced = 0 - def __init__(self,number,name,prod,precedence=('right',0),func=None,file='',line=0): - self.name = name - self.prod = tuple(prod) - self.number = number - self.func = func - self.callable = None - self.file = file - self.line = line - self.prec = precedence - - # Internal settings used during table construction - - self.len = len(self.prod) # Length of the production - - # Create a list of unique production symbols used in the production - self.usyms = [ ] - for s in self.prod: - if s not in self.usyms: - self.usyms.append(s) - - # List of all LR items for the production - self.lr_items = [] - self.lr_next = None - - # Create a string representation - if self.prod: - self.str = "%s -> %s" % (self.name," ".join(self.prod)) - else: - self.str = "%s -> " % self.name - - def __str__(self): - return self.str - - def __repr__(self): - return "Production("+str(self)+")" - - def __len__(self): - return len(self.prod) - - def __nonzero__(self): - return 1 - - def __getitem__(self,index): - return self.prod[index] - - # Return the nth lr_item from the production (or None if at the end) - def lr_item(self,n): - if n > len(self.prod): return None - p = LRItem(self,n) - - # Precompute the list of productions immediately following. Hack. Remove later - try: - p.lr_after = Prodnames[p.prod[n+1]] - except (IndexError,KeyError): - p.lr_after = [] - try: - p.lr_before = p.prod[n-1] - except IndexError: - p.lr_before = None - - return p - - # Bind the production function name to a callable - def bind(self,pdict): - if self.func: - self.callable = pdict[self.func] - -# This class serves as a minimal standin for Production objects when -# reading table data from files. It only contains information -# actually used by the LR parsing engine, plus some additional -# debugging information. -class MiniProduction(object): - def __init__(self,str,name,len,func,file,line): - self.name = name - self.len = len - self.func = func - self.callable = None - self.file = file - self.line = line - self.str = str - def __str__(self): - return self.str - def __repr__(self): - return "MiniProduction(%s)" % self.str - - # Bind the production function name to a callable - def bind(self,pdict): - if self.func: - self.callable = pdict[self.func] - - -# ----------------------------------------------------------------------------- -# class LRItem -# -# This class represents a specific stage of parsing a production rule. For -# example: -# -# expr : expr . PLUS term -# -# In the above, the "." represents the current location of the parse. Here -# basic attributes: -# -# name - Name of the production. For example 'expr' -# prod - A list of symbols on the right side ['expr','.', 'PLUS','term'] -# number - Production number. -# -# lr_next Next LR item. Example, if we are ' expr -> expr . PLUS term' -# then lr_next refers to 'expr -> expr PLUS . term' -# lr_index - LR item index (location of the ".") in the prod list. -# lookaheads - LALR lookahead symbols for this item -# len - Length of the production (number of symbols on right hand side) -# lr_after - List of all productions that immediately follow -# lr_before - Grammar symbol immediately before -# ----------------------------------------------------------------------------- - -class LRItem(object): - def __init__(self,p,n): - self.name = p.name - self.prod = list(p.prod) - self.number = p.number - self.lr_index = n - self.lookaheads = { } - self.prod.insert(n,".") - self.prod = tuple(self.prod) - self.len = len(self.prod) - self.usyms = p.usyms - - def __str__(self): - if self.prod: - s = "%s -> %s" % (self.name," ".join(self.prod)) - else: - s = "%s -> " % self.name - return s - - def __repr__(self): - return "LRItem("+str(self)+")" - -# ----------------------------------------------------------------------------- -# rightmost_terminal() -# -# Return the rightmost terminal from a list of symbols. Used in add_production() -# ----------------------------------------------------------------------------- -def rightmost_terminal(symbols, terminals): - i = len(symbols) - 1 - while i >= 0: - if symbols[i] in terminals: - return symbols[i] - i -= 1 - return None - -# ----------------------------------------------------------------------------- -# === GRAMMAR CLASS === -# -# The following class represents the contents of the specified grammar along -# with various computed properties such as first sets, follow sets, LR items, etc. -# This data is used for critical parts of the table generation process later. -# ----------------------------------------------------------------------------- - -class GrammarError(YaccError): pass - -class Grammar(object): - def __init__(self,terminals): - self.Productions = [None] # A list of all of the productions. The first - # entry is always reserved for the purpose of - # building an augmented grammar - - self.Prodnames = { } # A dictionary mapping the names of nonterminals to a list of all - # productions of that nonterminal. - - self.Prodmap = { } # A dictionary that is only used to detect duplicate - # productions. - - self.Terminals = { } # A dictionary mapping the names of terminal symbols to a - # list of the rules where they are used. - - for term in terminals: - self.Terminals[term] = [] - - self.Terminals['error'] = [] - - self.Nonterminals = { } # A dictionary mapping names of nonterminals to a list - # of rule numbers where they are used. - - self.First = { } # A dictionary of precomputed FIRST(x) symbols - - self.Follow = { } # A dictionary of precomputed FOLLOW(x) symbols - - self.Precedence = { } # Precedence rules for each terminal. Contains tuples of the - # form ('right',level) or ('nonassoc', level) or ('left',level) - - self.UsedPrecedence = { } # Precedence rules that were actually used by the grammer. - # This is only used to provide error checking and to generate - # a warning about unused precedence rules. - - self.Start = None # Starting symbol for the grammar - - - def __len__(self): - return len(self.Productions) - - def __getitem__(self,index): - return self.Productions[index] - - # ----------------------------------------------------------------------------- - # set_precedence() - # - # Sets the precedence for a given terminal. assoc is the associativity such as - # 'left','right', or 'nonassoc'. level is a numeric level. - # - # ----------------------------------------------------------------------------- - - def set_precedence(self,term,assoc,level): - assert self.Productions == [None],"Must call set_precedence() before add_production()" - if term in self.Precedence: - raise GrammarError("Precedence already specified for terminal '%s'" % term) - if assoc not in ['left','right','nonassoc']: - raise GrammarError("Associativity must be one of 'left','right', or 'nonassoc'") - self.Precedence[term] = (assoc,level) - - # ----------------------------------------------------------------------------- - # add_production() - # - # Given an action function, this function assembles a production rule and - # computes its precedence level. - # - # The production rule is supplied as a list of symbols. For example, - # a rule such as 'expr : expr PLUS term' has a production name of 'expr' and - # symbols ['expr','PLUS','term']. - # - # Precedence is determined by the precedence of the right-most non-terminal - # or the precedence of a terminal specified by %prec. - # - # A variety of error checks are performed to make sure production symbols - # are valid and that %prec is used correctly. - # ----------------------------------------------------------------------------- - - def add_production(self,prodname,syms,func=None,file='',line=0): - - if prodname in self.Terminals: - raise GrammarError("%s:%d: Illegal rule name '%s'. Already defined as a token" % (file,line,prodname)) - if prodname == 'error': - raise GrammarError("%s:%d: Illegal rule name '%s'. error is a reserved word" % (file,line,prodname)) - if not _is_identifier.match(prodname): - raise GrammarError("%s:%d: Illegal rule name '%s'" % (file,line,prodname)) - - # Look for literal tokens - for n,s in enumerate(syms): - if s[0] in "'\"": - try: - c = eval(s) - if (len(c) > 1): - raise GrammarError("%s:%d: Literal token %s in rule '%s' may only be a single character" % (file,line,s, prodname)) - if not c in self.Terminals: - self.Terminals[c] = [] - syms[n] = c - continue - except SyntaxError: - pass - if not _is_identifier.match(s) and s != '%prec': - raise GrammarError("%s:%d: Illegal name '%s' in rule '%s'" % (file,line,s, prodname)) - - # Determine the precedence level - if '%prec' in syms: - if syms[-1] == '%prec': - raise GrammarError("%s:%d: Syntax error. Nothing follows %%prec" % (file,line)) - if syms[-2] != '%prec': - raise GrammarError("%s:%d: Syntax error. %%prec can only appear at the end of a grammar rule" % (file,line)) - precname = syms[-1] - prodprec = self.Precedence.get(precname,None) - if not prodprec: - raise GrammarError("%s:%d: Nothing known about the precedence of '%s'" % (file,line,precname)) - else: - self.UsedPrecedence[precname] = 1 - del syms[-2:] # Drop %prec from the rule - else: - # If no %prec, precedence is determined by the rightmost terminal symbol - precname = rightmost_terminal(syms,self.Terminals) - prodprec = self.Precedence.get(precname,('right',0)) - - # See if the rule is already in the rulemap - map = "%s -> %s" % (prodname,syms) - if map in self.Prodmap: - m = self.Prodmap[map] - raise GrammarError("%s:%d: Duplicate rule %s. " % (file,line, m) + - "Previous definition at %s:%d" % (m.file, m.line)) - - # From this point on, everything is valid. Create a new Production instance - pnumber = len(self.Productions) - if not prodname in self.Nonterminals: - self.Nonterminals[prodname] = [ ] - - # Add the production number to Terminals and Nonterminals - for t in syms: - if t in self.Terminals: - self.Terminals[t].append(pnumber) - else: - if not t in self.Nonterminals: - self.Nonterminals[t] = [ ] - self.Nonterminals[t].append(pnumber) - - # Create a production and add it to the list of productions - p = Production(pnumber,prodname,syms,prodprec,func,file,line) - self.Productions.append(p) - self.Prodmap[map] = p - - # Add to the global productions list - try: - self.Prodnames[prodname].append(p) - except KeyError: - self.Prodnames[prodname] = [ p ] - return 0 - - # ----------------------------------------------------------------------------- - # set_start() - # - # Sets the starting symbol and creates the augmented grammar. Production - # rule 0 is S' -> start where start is the start symbol. - # ----------------------------------------------------------------------------- - - def set_start(self,start=None): - if not start: - start = self.Productions[1].name - if start not in self.Nonterminals: - raise GrammarError("start symbol %s undefined" % start) - self.Productions[0] = Production(0,"S'",[start]) - self.Nonterminals[start].append(0) - self.Start = start - - # ----------------------------------------------------------------------------- - # find_unreachable() - # - # Find all of the nonterminal symbols that can't be reached from the starting - # symbol. Returns a list of nonterminals that can't be reached. - # ----------------------------------------------------------------------------- - - def find_unreachable(self): - - # Mark all symbols that are reachable from a symbol s - def mark_reachable_from(s): - if reachable[s]: - # We've already reached symbol s. - return - reachable[s] = 1 - for p in self.Prodnames.get(s,[]): - for r in p.prod: - mark_reachable_from(r) - - reachable = { } - for s in list(self.Terminals) + list(self.Nonterminals): - reachable[s] = 0 - - mark_reachable_from( self.Productions[0].prod[0] ) - - return [s for s in list(self.Nonterminals) - if not reachable[s]] - - # ----------------------------------------------------------------------------- - # infinite_cycles() - # - # This function looks at the various parsing rules and tries to detect - # infinite recursion cycles (grammar rules where there is no possible way - # to derive a string of only terminals). - # ----------------------------------------------------------------------------- - - def infinite_cycles(self): - terminates = {} - - # Terminals: - for t in self.Terminals: - terminates[t] = 1 - - terminates['$end'] = 1 - - # Nonterminals: - - # Initialize to false: - for n in self.Nonterminals: - terminates[n] = 0 - - # Then propagate termination until no change: - while 1: - some_change = 0 - for (n,pl) in self.Prodnames.items(): - # Nonterminal n terminates iff any of its productions terminates. - for p in pl: - # Production p terminates iff all of its rhs symbols terminate. - for s in p.prod: - if not terminates[s]: - # The symbol s does not terminate, - # so production p does not terminate. - p_terminates = 0 - break - else: - # didn't break from the loop, - # so every symbol s terminates - # so production p terminates. - p_terminates = 1 - - if p_terminates: - # symbol n terminates! - if not terminates[n]: - terminates[n] = 1 - some_change = 1 - # Don't need to consider any more productions for this n. - break - - if not some_change: - break - - infinite = [] - for (s,term) in terminates.items(): - if not term: - if not s in self.Prodnames and not s in self.Terminals and s != 'error': - # s is used-but-not-defined, and we've already warned of that, - # so it would be overkill to say that it's also non-terminating. - pass - else: - infinite.append(s) - - return infinite - - - # ----------------------------------------------------------------------------- - # undefined_symbols() - # - # Find all symbols that were used the grammar, but not defined as tokens or - # grammar rules. Returns a list of tuples (sym, prod) where sym in the symbol - # and prod is the production where the symbol was used. - # ----------------------------------------------------------------------------- - def undefined_symbols(self): - result = [] - for p in self.Productions: - if not p: continue - - for s in p.prod: - if not s in self.Prodnames and not s in self.Terminals and s != 'error': - result.append((s,p)) - return result - - # ----------------------------------------------------------------------------- - # unused_terminals() - # - # Find all terminals that were defined, but not used by the grammar. Returns - # a list of all symbols. - # ----------------------------------------------------------------------------- - def unused_terminals(self): - unused_tok = [] - for s,v in self.Terminals.items(): - if s != 'error' and not v: - unused_tok.append(s) - - return unused_tok - - # ------------------------------------------------------------------------------ - # unused_rules() - # - # Find all grammar rules that were defined, but not used (maybe not reachable) - # Returns a list of productions. - # ------------------------------------------------------------------------------ - - def unused_rules(self): - unused_prod = [] - for s,v in self.Nonterminals.items(): - if not v: - p = self.Prodnames[s][0] - unused_prod.append(p) - return unused_prod - - # ----------------------------------------------------------------------------- - # unused_precedence() - # - # Returns a list of tuples (term,precedence) corresponding to precedence - # rules that were never used by the grammar. term is the name of the terminal - # on which precedence was applied and precedence is a string such as 'left' or - # 'right' corresponding to the type of precedence. - # ----------------------------------------------------------------------------- - - def unused_precedence(self): - unused = [] - for termname in self.Precedence: - if not (termname in self.Terminals or termname in self.UsedPrecedence): - unused.append((termname,self.Precedence[termname][0])) - - return unused - - # ------------------------------------------------------------------------- - # _first() - # - # Compute the value of FIRST1(beta) where beta is a tuple of symbols. - # - # During execution of compute_first1, the result may be incomplete. - # Afterward (e.g., when called from compute_follow()), it will be complete. - # ------------------------------------------------------------------------- - def _first(self,beta): - - # We are computing First(x1,x2,x3,...,xn) - result = [ ] - for x in beta: - x_produces_empty = 0 - - # Add all the non- symbols of First[x] to the result. - for f in self.First[x]: - if f == '': - x_produces_empty = 1 - else: - if f not in result: result.append(f) - - if x_produces_empty: - # We have to consider the next x in beta, - # i.e. stay in the loop. - pass - else: - # We don't have to consider any further symbols in beta. - break - else: - # There was no 'break' from the loop, - # so x_produces_empty was true for all x in beta, - # so beta produces empty as well. - result.append('') - - return result - - # ------------------------------------------------------------------------- - # compute_first() - # - # Compute the value of FIRST1(X) for all symbols - # ------------------------------------------------------------------------- - def compute_first(self): - if self.First: - return self.First - - # Terminals: - for t in self.Terminals: - self.First[t] = [t] - - self.First['$end'] = ['$end'] - - # Nonterminals: - - # Initialize to the empty set: - for n in self.Nonterminals: - self.First[n] = [] - - # Then propagate symbols until no change: - while 1: - some_change = 0 - for n in self.Nonterminals: - for p in self.Prodnames[n]: - for f in self._first(p.prod): - if f not in self.First[n]: - self.First[n].append( f ) - some_change = 1 - if not some_change: - break - - return self.First - - # --------------------------------------------------------------------- - # compute_follow() - # - # Computes all of the follow sets for every non-terminal symbol. The - # follow set is the set of all symbols that might follow a given - # non-terminal. See the Dragon book, 2nd Ed. p. 189. - # --------------------------------------------------------------------- - def compute_follow(self,start=None): - # If already computed, return the result - if self.Follow: - return self.Follow - - # If first sets not computed yet, do that first. - if not self.First: - self.compute_first() - - # Add '$end' to the follow list of the start symbol - for k in self.Nonterminals: - self.Follow[k] = [ ] - - if not start: - start = self.Productions[1].name - - self.Follow[start] = [ '$end' ] - - while 1: - didadd = 0 - for p in self.Productions[1:]: - # Here is the production set - for i in range(len(p.prod)): - B = p.prod[i] - if B in self.Nonterminals: - # Okay. We got a non-terminal in a production - fst = self._first(p.prod[i+1:]) - hasempty = 0 - for f in fst: - if f != '' and f not in self.Follow[B]: - self.Follow[B].append(f) - didadd = 1 - if f == '': - hasempty = 1 - if hasempty or i == (len(p.prod)-1): - # Add elements of follow(a) to follow(b) - for f in self.Follow[p.name]: - if f not in self.Follow[B]: - self.Follow[B].append(f) - didadd = 1 - if not didadd: break - return self.Follow - - - # ----------------------------------------------------------------------------- - # build_lritems() - # - # This function walks the list of productions and builds a complete set of the - # LR items. The LR items are stored in two ways: First, they are uniquely - # numbered and placed in the list _lritems. Second, a linked list of LR items - # is built for each production. For example: - # - # E -> E PLUS E - # - # Creates the list - # - # [E -> . E PLUS E, E -> E . PLUS E, E -> E PLUS . E, E -> E PLUS E . ] - # ----------------------------------------------------------------------------- - - def build_lritems(self): - for p in self.Productions: - lastlri = p - i = 0 - lr_items = [] - while 1: - if i > len(p): - lri = None - else: - lri = LRItem(p,i) - # Precompute the list of productions immediately following - try: - lri.lr_after = self.Prodnames[lri.prod[i+1]] - except (IndexError,KeyError): - lri.lr_after = [] - try: - lri.lr_before = lri.prod[i-1] - except IndexError: - lri.lr_before = None - - lastlri.lr_next = lri - if not lri: break - lr_items.append(lri) - lastlri = lri - i += 1 - p.lr_items = lr_items - -# ----------------------------------------------------------------------------- -# == Class LRTable == -# -# This basic class represents a basic table of LR parsing information. -# Methods for generating the tables are not defined here. They are defined -# in the derived class LRGeneratedTable. -# ----------------------------------------------------------------------------- - -class VersionError(YaccError): pass - -class LRTable(object): - def __init__(self): - self.lr_action = None - self.lr_goto = None - self.lr_productions = None - self.lr_method = None - - def read_table(self,module): - if isinstance(module,types.ModuleType): - parsetab = module - else: - if sys.version_info[0] < 3: - exec("import %s as parsetab" % module) - else: - env = { } - exec("import %s as parsetab" % module, env, env) - parsetab = env['parsetab'] - - if parsetab._tabversion != __tabversion__: - raise VersionError("yacc table file version is out of date") - - self.lr_action = parsetab._lr_action - self.lr_goto = parsetab._lr_goto - - self.lr_productions = [] - for p in parsetab._lr_productions: - self.lr_productions.append(MiniProduction(*p)) - - self.lr_method = parsetab._lr_method - return parsetab._lr_signature - - def read_pickle(self,filename): - try: - import cPickle as pickle - except ImportError: - import pickle - - in_f = open(filename,"rb") - - tabversion = pickle.load(in_f) - if tabversion != __tabversion__: - raise VersionError("yacc table file version is out of date") - self.lr_method = pickle.load(in_f) - signature = pickle.load(in_f) - self.lr_action = pickle.load(in_f) - self.lr_goto = pickle.load(in_f) - productions = pickle.load(in_f) - - self.lr_productions = [] - for p in productions: - self.lr_productions.append(MiniProduction(*p)) - - in_f.close() - return signature - - # Bind all production function names to callable objects in pdict - def bind_callables(self,pdict): - for p in self.lr_productions: - p.bind(pdict) - -# ----------------------------------------------------------------------------- -# === LR Generator === -# -# The following classes and functions are used to generate LR parsing tables on -# a grammar. -# ----------------------------------------------------------------------------- - -# ----------------------------------------------------------------------------- -# digraph() -# traverse() -# -# The following two functions are used to compute set valued functions -# of the form: -# -# F(x) = F'(x) U U{F(y) | x R y} -# -# This is used to compute the values of Read() sets as well as FOLLOW sets -# in LALR(1) generation. -# -# Inputs: X - An input set -# R - A relation -# FP - Set-valued function -# ------------------------------------------------------------------------------ - -def digraph(X,R,FP): - N = { } - for x in X: - N[x] = 0 - stack = [] - F = { } - for x in X: - if N[x] == 0: traverse(x,N,stack,F,X,R,FP) - return F - -def traverse(x,N,stack,F,X,R,FP): - stack.append(x) - d = len(stack) - N[x] = d - F[x] = FP(x) # F(X) <- F'(x) - - rel = R(x) # Get y's related to x - for y in rel: - if N[y] == 0: - traverse(y,N,stack,F,X,R,FP) - N[x] = min(N[x],N[y]) - for a in F.get(y,[]): - if a not in F[x]: F[x].append(a) - if N[x] == d: - N[stack[-1]] = MAXINT - F[stack[-1]] = F[x] - element = stack.pop() - while element != x: - N[stack[-1]] = MAXINT - F[stack[-1]] = F[x] - element = stack.pop() - -class LALRError(YaccError): pass - -# ----------------------------------------------------------------------------- -# == LRGeneratedTable == -# -# This class implements the LR table generation algorithm. There are no -# public methods except for write() -# ----------------------------------------------------------------------------- - -class LRGeneratedTable(LRTable): - def __init__(self,grammar,method='LALR',log=None): - if method not in ['SLR','LALR']: - raise LALRError("Unsupported method %s" % method) - - self.grammar = grammar - self.lr_method = method - - # Set up the logger - if not log: - log = NullLogger() - self.log = log - - # Internal attributes - self.lr_action = {} # Action table - self.lr_goto = {} # Goto table - self.lr_productions = grammar.Productions # Copy of grammar Production array - self.lr_goto_cache = {} # Cache of computed gotos - self.lr0_cidhash = {} # Cache of closures - - self._add_count = 0 # Internal counter used to detect cycles - - # Diagonistic information filled in by the table generator - self.sr_conflict = 0 - self.rr_conflict = 0 - self.conflicts = [] # List of conflicts - - self.sr_conflicts = [] - self.rr_conflicts = [] - - # Build the tables - self.grammar.build_lritems() - self.grammar.compute_first() - self.grammar.compute_follow() - self.lr_parse_table() - - # Compute the LR(0) closure operation on I, where I is a set of LR(0) items. - - def lr0_closure(self,I): - self._add_count += 1 - - # Add everything in I to J - J = I[:] - didadd = 1 - while didadd: - didadd = 0 - for j in J: - for x in j.lr_after: - if getattr(x,"lr0_added",0) == self._add_count: continue - # Add B --> .G to J - J.append(x.lr_next) - x.lr0_added = self._add_count - didadd = 1 - - return J - - # Compute the LR(0) goto function goto(I,X) where I is a set - # of LR(0) items and X is a grammar symbol. This function is written - # in a way that guarantees uniqueness of the generated goto sets - # (i.e. the same goto set will never be returned as two different Python - # objects). With uniqueness, we can later do fast set comparisons using - # id(obj) instead of element-wise comparison. - - def lr0_goto(self,I,x): - # First we look for a previously cached entry - g = self.lr_goto_cache.get((id(I),x),None) - if g: return g - - # Now we generate the goto set in a way that guarantees uniqueness - # of the result - - s = self.lr_goto_cache.get(x,None) - if not s: - s = { } - self.lr_goto_cache[x] = s - - gs = [ ] - for p in I: - n = p.lr_next - if n and n.lr_before == x: - s1 = s.get(id(n),None) - if not s1: - s1 = { } - s[id(n)] = s1 - gs.append(n) - s = s1 - g = s.get('$end',None) - if not g: - if gs: - g = self.lr0_closure(gs) - s['$end'] = g - else: - s['$end'] = gs - self.lr_goto_cache[(id(I),x)] = g - return g - - # Compute the LR(0) sets of item function - def lr0_items(self): - - C = [ self.lr0_closure([self.grammar.Productions[0].lr_next]) ] - i = 0 - for I in C: - self.lr0_cidhash[id(I)] = i - i += 1 - - # Loop over the items in C and each grammar symbols - i = 0 - while i < len(C): - I = C[i] - i += 1 - - # Collect all of the symbols that could possibly be in the goto(I,X) sets - asyms = { } - for ii in I: - for s in ii.usyms: - asyms[s] = None - - for x in asyms: - g = self.lr0_goto(I,x) - if not g: continue - if id(g) in self.lr0_cidhash: continue - self.lr0_cidhash[id(g)] = len(C) - C.append(g) - - return C - - # ----------------------------------------------------------------------------- - # ==== LALR(1) Parsing ==== - # - # LALR(1) parsing is almost exactly the same as SLR except that instead of - # relying upon Follow() sets when performing reductions, a more selective - # lookahead set that incorporates the state of the LR(0) machine is utilized. - # Thus, we mainly just have to focus on calculating the lookahead sets. - # - # The method used here is due to DeRemer and Pennelo (1982). - # - # DeRemer, F. L., and T. J. Pennelo: "Efficient Computation of LALR(1) - # Lookahead Sets", ACM Transactions on Programming Languages and Systems, - # Vol. 4, No. 4, Oct. 1982, pp. 615-649 - # - # Further details can also be found in: - # - # J. Tremblay and P. Sorenson, "The Theory and Practice of Compiler Writing", - # McGraw-Hill Book Company, (1985). - # - # ----------------------------------------------------------------------------- - - # ----------------------------------------------------------------------------- - # compute_nullable_nonterminals() - # - # Creates a dictionary containing all of the non-terminals that might produce - # an empty production. - # ----------------------------------------------------------------------------- - - def compute_nullable_nonterminals(self): - nullable = {} - num_nullable = 0 - while 1: - for p in self.grammar.Productions[1:]: - if p.len == 0: - nullable[p.name] = 1 - continue - for t in p.prod: - if not t in nullable: break - else: - nullable[p.name] = 1 - if len(nullable) == num_nullable: break - num_nullable = len(nullable) - return nullable - - # ----------------------------------------------------------------------------- - # find_nonterminal_trans(C) - # - # Given a set of LR(0) items, this functions finds all of the non-terminal - # transitions. These are transitions in which a dot appears immediately before - # a non-terminal. Returns a list of tuples of the form (state,N) where state - # is the state number and N is the nonterminal symbol. - # - # The input C is the set of LR(0) items. - # ----------------------------------------------------------------------------- - - def find_nonterminal_transitions(self,C): - trans = [] - for state in range(len(C)): - for p in C[state]: - if p.lr_index < p.len - 1: - t = (state,p.prod[p.lr_index+1]) - if t[1] in self.grammar.Nonterminals: - if t not in trans: trans.append(t) - state = state + 1 - return trans - - # ----------------------------------------------------------------------------- - # dr_relation() - # - # Computes the DR(p,A) relationships for non-terminal transitions. The input - # is a tuple (state,N) where state is a number and N is a nonterminal symbol. - # - # Returns a list of terminals. - # ----------------------------------------------------------------------------- - - def dr_relation(self,C,trans,nullable): - dr_set = { } - state,N = trans - terms = [] - - g = self.lr0_goto(C[state],N) - for p in g: - if p.lr_index < p.len - 1: - a = p.prod[p.lr_index+1] - if a in self.grammar.Terminals: - if a not in terms: terms.append(a) - - # This extra bit is to handle the start state - if state == 0 and N == self.grammar.Productions[0].prod[0]: - terms.append('$end') - - return terms - - # ----------------------------------------------------------------------------- - # reads_relation() - # - # Computes the READS() relation (p,A) READS (t,C). - # ----------------------------------------------------------------------------- - - def reads_relation(self,C, trans, empty): - # Look for empty transitions - rel = [] - state, N = trans - - g = self.lr0_goto(C[state],N) - j = self.lr0_cidhash.get(id(g),-1) - for p in g: - if p.lr_index < p.len - 1: - a = p.prod[p.lr_index + 1] - if a in empty: - rel.append((j,a)) - - return rel - - # ----------------------------------------------------------------------------- - # compute_lookback_includes() - # - # Determines the lookback and includes relations - # - # LOOKBACK: - # - # This relation is determined by running the LR(0) state machine forward. - # For example, starting with a production "N : . A B C", we run it forward - # to obtain "N : A B C ." We then build a relationship between this final - # state and the starting state. These relationships are stored in a dictionary - # lookdict. - # - # INCLUDES: - # - # Computes the INCLUDE() relation (p,A) INCLUDES (p',B). - # - # This relation is used to determine non-terminal transitions that occur - # inside of other non-terminal transition states. (p,A) INCLUDES (p', B) - # if the following holds: - # - # B -> LAT, where T -> epsilon and p' -L-> p - # - # L is essentially a prefix (which may be empty), T is a suffix that must be - # able to derive an empty string. State p' must lead to state p with the string L. - # - # ----------------------------------------------------------------------------- - - def compute_lookback_includes(self,C,trans,nullable): - - lookdict = {} # Dictionary of lookback relations - includedict = {} # Dictionary of include relations - - # Make a dictionary of non-terminal transitions - dtrans = {} - for t in trans: - dtrans[t] = 1 - - # Loop over all transitions and compute lookbacks and includes - for state,N in trans: - lookb = [] - includes = [] - for p in C[state]: - if p.name != N: continue - - # Okay, we have a name match. We now follow the production all the way - # through the state machine until we get the . on the right hand side - - lr_index = p.lr_index - j = state - while lr_index < p.len - 1: - lr_index = lr_index + 1 - t = p.prod[lr_index] - - # Check to see if this symbol and state are a non-terminal transition - if (j,t) in dtrans: - # Yes. Okay, there is some chance that this is an includes relation - # the only way to know for certain is whether the rest of the - # production derives empty - - li = lr_index + 1 - while li < p.len: - if p.prod[li] in self.grammar.Terminals: break # No forget it - if not p.prod[li] in nullable: break - li = li + 1 - else: - # Appears to be a relation between (j,t) and (state,N) - includes.append((j,t)) - - g = self.lr0_goto(C[j],t) # Go to next set - j = self.lr0_cidhash.get(id(g),-1) # Go to next state - - # When we get here, j is the final state, now we have to locate the production - for r in C[j]: - if r.name != p.name: continue - if r.len != p.len: continue - i = 0 - # This look is comparing a production ". A B C" with "A B C ." - while i < r.lr_index: - if r.prod[i] != p.prod[i+1]: break - i = i + 1 - else: - lookb.append((j,r)) - for i in includes: - if not i in includedict: includedict[i] = [] - includedict[i].append((state,N)) - lookdict[(state,N)] = lookb - - return lookdict,includedict - - # ----------------------------------------------------------------------------- - # compute_read_sets() - # - # Given a set of LR(0) items, this function computes the read sets. - # - # Inputs: C = Set of LR(0) items - # ntrans = Set of nonterminal transitions - # nullable = Set of empty transitions - # - # Returns a set containing the read sets - # ----------------------------------------------------------------------------- - - def compute_read_sets(self,C, ntrans, nullable): - FP = lambda x: self.dr_relation(C,x,nullable) - R = lambda x: self.reads_relation(C,x,nullable) - F = digraph(ntrans,R,FP) - return F - - # ----------------------------------------------------------------------------- - # compute_follow_sets() - # - # Given a set of LR(0) items, a set of non-terminal transitions, a readset, - # and an include set, this function computes the follow sets - # - # Follow(p,A) = Read(p,A) U U {Follow(p',B) | (p,A) INCLUDES (p',B)} - # - # Inputs: - # ntrans = Set of nonterminal transitions - # readsets = Readset (previously computed) - # inclsets = Include sets (previously computed) - # - # Returns a set containing the follow sets - # ----------------------------------------------------------------------------- - - def compute_follow_sets(self,ntrans,readsets,inclsets): - FP = lambda x: readsets[x] - R = lambda x: inclsets.get(x,[]) - F = digraph(ntrans,R,FP) - return F - - # ----------------------------------------------------------------------------- - # add_lookaheads() - # - # Attaches the lookahead symbols to grammar rules. - # - # Inputs: lookbacks - Set of lookback relations - # followset - Computed follow set - # - # This function directly attaches the lookaheads to productions contained - # in the lookbacks set - # ----------------------------------------------------------------------------- - - def add_lookaheads(self,lookbacks,followset): - for trans,lb in lookbacks.items(): - # Loop over productions in lookback - for state,p in lb: - if not state in p.lookaheads: - p.lookaheads[state] = [] - f = followset.get(trans,[]) - for a in f: - if a not in p.lookaheads[state]: p.lookaheads[state].append(a) - - # ----------------------------------------------------------------------------- - # add_lalr_lookaheads() - # - # This function does all of the work of adding lookahead information for use - # with LALR parsing - # ----------------------------------------------------------------------------- - - def add_lalr_lookaheads(self,C): - # Determine all of the nullable nonterminals - nullable = self.compute_nullable_nonterminals() - - # Find all non-terminal transitions - trans = self.find_nonterminal_transitions(C) - - # Compute read sets - readsets = self.compute_read_sets(C,trans,nullable) - - # Compute lookback/includes relations - lookd, included = self.compute_lookback_includes(C,trans,nullable) - - # Compute LALR FOLLOW sets - followsets = self.compute_follow_sets(trans,readsets,included) - - # Add all of the lookaheads - self.add_lookaheads(lookd,followsets) - - # ----------------------------------------------------------------------------- - # lr_parse_table() - # - # This function constructs the parse tables for SLR or LALR - # ----------------------------------------------------------------------------- - def lr_parse_table(self): - Productions = self.grammar.Productions - Precedence = self.grammar.Precedence - goto = self.lr_goto # Goto array - action = self.lr_action # Action array - log = self.log # Logger for output - - actionp = { } # Action production array (temporary) - - log.info("Parsing method: %s", self.lr_method) - - # Step 1: Construct C = { I0, I1, ... IN}, collection of LR(0) items - # This determines the number of states - - C = self.lr0_items() - - if self.lr_method == 'LALR': - self.add_lalr_lookaheads(C) - - # Build the parser table, state by state - st = 0 - for I in C: - # Loop over each production in I - actlist = [ ] # List of actions - st_action = { } - st_actionp = { } - st_goto = { } - log.info("") - log.info("state %d", st) - log.info("") - for p in I: - log.info(" (%d) %s", p.number, str(p)) - log.info("") - - for p in I: - if p.len == p.lr_index + 1: - if p.name == "S'": - # Start symbol. Accept! - st_action["$end"] = 0 - st_actionp["$end"] = p - else: - # We are at the end of a production. Reduce! - if self.lr_method == 'LALR': - laheads = p.lookaheads[st] - else: - laheads = self.grammar.Follow[p.name] - for a in laheads: - actlist.append((a,p,"reduce using rule %d (%s)" % (p.number,p))) - r = st_action.get(a,None) - if r is not None: - # Whoa. Have a shift/reduce or reduce/reduce conflict - if r > 0: - # Need to decide on shift or reduce here - # By default we favor shifting. Need to add - # some precedence rules here. - sprec,slevel = Productions[st_actionp[a].number].prec - rprec,rlevel = Precedence.get(a,('right',0)) - if (slevel < rlevel) or ((slevel == rlevel) and (rprec == 'left')): - # We really need to reduce here. - st_action[a] = -p.number - st_actionp[a] = p - if not slevel and not rlevel: - log.info(" ! shift/reduce conflict for %s resolved as reduce",a) - self.sr_conflicts.append((st,a,'reduce')) - Productions[p.number].reduced += 1 - elif (slevel == rlevel) and (rprec == 'nonassoc'): - st_action[a] = None - else: - # Hmmm. Guess we'll keep the shift - if not rlevel: - log.info(" ! shift/reduce conflict for %s resolved as shift",a) - self.sr_conflicts.append((st,a,'shift')) - elif r < 0: - # Reduce/reduce conflict. In this case, we favor the rule - # that was defined first in the grammar file - oldp = Productions[-r] - pp = Productions[p.number] - if oldp.line > pp.line: - st_action[a] = -p.number - st_actionp[a] = p - chosenp,rejectp = pp,oldp - Productions[p.number].reduced += 1 - Productions[oldp.number].reduced -= 1 - else: - chosenp,rejectp = oldp,pp - self.rr_conflicts.append((st,chosenp,rejectp)) - log.info(" ! reduce/reduce conflict for %s resolved using rule %d (%s)", a,st_actionp[a].number, st_actionp[a]) - else: - raise LALRError("Unknown conflict in state %d" % st) - else: - st_action[a] = -p.number - st_actionp[a] = p - Productions[p.number].reduced += 1 - else: - i = p.lr_index - a = p.prod[i+1] # Get symbol right after the "." - if a in self.grammar.Terminals: - g = self.lr0_goto(I,a) - j = self.lr0_cidhash.get(id(g),-1) - if j >= 0: - # We are in a shift state - actlist.append((a,p,"shift and go to state %d" % j)) - r = st_action.get(a,None) - if r is not None: - # Whoa have a shift/reduce or shift/shift conflict - if r > 0: - if r != j: - raise LALRError("Shift/shift conflict in state %d" % st) - elif r < 0: - # Do a precedence check. - # - if precedence of reduce rule is higher, we reduce. - # - if precedence of reduce is same and left assoc, we reduce. - # - otherwise we shift - rprec,rlevel = Productions[st_actionp[a].number].prec - sprec,slevel = Precedence.get(a,('right',0)) - if (slevel > rlevel) or ((slevel == rlevel) and (rprec == 'right')): - # We decide to shift here... highest precedence to shift - Productions[st_actionp[a].number].reduced -= 1 - st_action[a] = j - st_actionp[a] = p - if not rlevel: - log.info(" ! shift/reduce conflict for %s resolved as shift",a) - self.sr_conflicts.append((st,a,'shift')) - elif (slevel == rlevel) and (rprec == 'nonassoc'): - st_action[a] = None - else: - # Hmmm. Guess we'll keep the reduce - if not slevel and not rlevel: - log.info(" ! shift/reduce conflict for %s resolved as reduce",a) - self.sr_conflicts.append((st,a,'reduce')) - - else: - raise LALRError("Unknown conflict in state %d" % st) - else: - st_action[a] = j - st_actionp[a] = p - - # Print the actions associated with each terminal - _actprint = { } - for a,p,m in actlist: - if a in st_action: - if p is st_actionp[a]: - log.info(" %-15s %s",a,m) - _actprint[(a,m)] = 1 - log.info("") - # Print the actions that were not used. (debugging) - not_used = 0 - for a,p,m in actlist: - if a in st_action: - if p is not st_actionp[a]: - if not (a,m) in _actprint: - log.debug(" ! %-15s [ %s ]",a,m) - not_used = 1 - _actprint[(a,m)] = 1 - if not_used: - log.debug("") - - # Construct the goto table for this state - - nkeys = { } - for ii in I: - for s in ii.usyms: - if s in self.grammar.Nonterminals: - nkeys[s] = None - for n in nkeys: - g = self.lr0_goto(I,n) - j = self.lr0_cidhash.get(id(g),-1) - if j >= 0: - st_goto[n] = j - log.info(" %-30s shift and go to state %d",n,j) - - action[st] = st_action - actionp[st] = st_actionp - goto[st] = st_goto - st += 1 - - - # ----------------------------------------------------------------------------- - # write() - # - # This function writes the LR parsing tables to a file - # ----------------------------------------------------------------------------- - - def write_table(self,modulename,outputdir='',signature=""): - basemodulename = modulename.split(".")[-1] - filename = os.path.join(outputdir,basemodulename) + ".py" - try: - f = open(filename,"w") - - f.write(""" -# %s -# This file is automatically generated. Do not edit. -_tabversion = %r - -_lr_method = %r - -_lr_signature = %r - """ % (filename, __tabversion__, self.lr_method, signature)) - - # Change smaller to 0 to go back to original tables - smaller = 1 - - # Factor out names to try and make smaller - if smaller: - items = { } - - for s,nd in self.lr_action.items(): - for name,v in nd.items(): - i = items.get(name) - if not i: - i = ([],[]) - items[name] = i - i[0].append(s) - i[1].append(v) - - f.write("\n_lr_action_items = {") - for k,v in items.items(): - f.write("%r:([" % k) - for i in v[0]: - f.write("%r," % i) - f.write("],[") - for i in v[1]: - f.write("%r," % i) - - f.write("]),") - f.write("}\n") - - f.write(""" -_lr_action = { } -for _k, _v in _lr_action_items.items(): - for _x,_y in zip(_v[0],_v[1]): - if not _x in _lr_action: _lr_action[_x] = { } - _lr_action[_x][_k] = _y -del _lr_action_items -""") - - else: - f.write("\n_lr_action = { "); - for k,v in self.lr_action.items(): - f.write("(%r,%r):%r," % (k[0],k[1],v)) - f.write("}\n"); - - if smaller: - # Factor out names to try and make smaller - items = { } - - for s,nd in self.lr_goto.items(): - for name,v in nd.items(): - i = items.get(name) - if not i: - i = ([],[]) - items[name] = i - i[0].append(s) - i[1].append(v) - - f.write("\n_lr_goto_items = {") - for k,v in items.items(): - f.write("%r:([" % k) - for i in v[0]: - f.write("%r," % i) - f.write("],[") - for i in v[1]: - f.write("%r," % i) - - f.write("]),") - f.write("}\n") - - f.write(""" -_lr_goto = { } -for _k, _v in _lr_goto_items.items(): - for _x,_y in zip(_v[0],_v[1]): - if not _x in _lr_goto: _lr_goto[_x] = { } - _lr_goto[_x][_k] = _y -del _lr_goto_items -""") - else: - f.write("\n_lr_goto = { "); - for k,v in self.lr_goto.items(): - f.write("(%r,%r):%r," % (k[0],k[1],v)) - f.write("}\n"); - - # Write production table - f.write("_lr_productions = [\n") - for p in self.lr_productions: - if p.func: - f.write(" (%r,%r,%d,%r,%r,%d),\n" % (p.str,p.name, p.len, p.func,p.file,p.line)) - else: - f.write(" (%r,%r,%d,None,None,None),\n" % (str(p),p.name, p.len)) - f.write("]\n") - f.close() - - except IOError: - e = sys.exc_info()[1] - sys.stderr.write("Unable to create '%s'\n" % filename) - sys.stderr.write(str(e)+"\n") - return - - - # ----------------------------------------------------------------------------- - # pickle_table() - # - # This function pickles the LR parsing tables to a supplied file object - # ----------------------------------------------------------------------------- - - def pickle_table(self,filename,signature=""): - try: - import cPickle as pickle - except ImportError: - import pickle - outf = open(filename,"wb") - pickle.dump(__tabversion__,outf,pickle_protocol) - pickle.dump(self.lr_method,outf,pickle_protocol) - pickle.dump(signature,outf,pickle_protocol) - pickle.dump(self.lr_action,outf,pickle_protocol) - pickle.dump(self.lr_goto,outf,pickle_protocol) - - outp = [] - for p in self.lr_productions: - if p.func: - outp.append((p.str,p.name, p.len, p.func,p.file,p.line)) - else: - outp.append((str(p),p.name,p.len,None,None,None)) - pickle.dump(outp,outf,pickle_protocol) - outf.close() - -# ----------------------------------------------------------------------------- -# === INTROSPECTION === -# -# The following functions and classes are used to implement the PLY -# introspection features followed by the yacc() function itself. -# ----------------------------------------------------------------------------- - -# ----------------------------------------------------------------------------- -# get_caller_module_dict() -# -# This function returns a dictionary containing all of the symbols defined within -# a caller further down the call stack. This is used to get the environment -# associated with the yacc() call if none was provided. -# ----------------------------------------------------------------------------- - -def get_caller_module_dict(levels): - try: - raise RuntimeError - except RuntimeError: - e,b,t = sys.exc_info() - f = t.tb_frame - while levels > 0: - f = f.f_back - levels -= 1 - ldict = f.f_globals.copy() - if f.f_globals != f.f_locals: - ldict.update(f.f_locals) - - return ldict - -# ----------------------------------------------------------------------------- -# parse_grammar() -# -# This takes a raw grammar rule string and parses it into production data -# ----------------------------------------------------------------------------- -def parse_grammar(doc,file,line): - grammar = [] - # Split the doc string into lines - pstrings = doc.splitlines() - lastp = None - dline = line - for ps in pstrings: - dline += 1 - p = ps.split() - if not p: continue - try: - if p[0] == '|': - # This is a continuation of a previous rule - if not lastp: - raise SyntaxError("%s:%d: Misplaced '|'" % (file,dline)) - prodname = lastp - syms = p[1:] - else: - prodname = p[0] - lastp = prodname - syms = p[2:] - assign = p[1] - if assign != ':' and assign != '::=': - raise SyntaxError("%s:%d: Syntax error. Expected ':'" % (file,dline)) - - grammar.append((file,dline,prodname,syms)) - except SyntaxError: - raise - except Exception: - raise SyntaxError("%s:%d: Syntax error in rule '%s'" % (file,dline,ps.strip())) - - return grammar - -# ----------------------------------------------------------------------------- -# ParserReflect() -# -# This class represents information extracted for building a parser including -# start symbol, error function, tokens, precedence list, action functions, -# etc. -# ----------------------------------------------------------------------------- -class ParserReflect(object): - def __init__(self,pdict,log=None): - self.pdict = pdict - self.start = None - self.error_func = None - self.tokens = None - self.files = {} - self.grammar = [] - self.error = 0 - - if log is None: - self.log = PlyLogger(sys.stderr) - else: - self.log = log - - # Get all of the basic information - def get_all(self): - self.get_start() - self.get_error_func() - self.get_tokens() - self.get_precedence() - self.get_pfunctions() - - # Validate all of the information - def validate_all(self): - self.validate_start() - self.validate_error_func() - self.validate_tokens() - self.validate_precedence() - self.validate_pfunctions() - self.validate_files() - return self.error - - # Compute a signature over the grammar - def signature(self): - try: - from hashlib import md5 - except ImportError: - from md5 import md5 - try: - sig = md5() - if self.start: - sig.update(self.start.encode('latin-1')) - if self.prec: - sig.update("".join(["".join(p) for p in self.prec]).encode('latin-1')) - if self.tokens: - sig.update(" ".join(self.tokens).encode('latin-1')) - for f in self.pfuncs: - if f[3]: - sig.update(f[3].encode('latin-1')) - except (TypeError,ValueError): - pass - return sig.digest() - - # ----------------------------------------------------------------------------- - # validate_file() - # - # This method checks to see if there are duplicated p_rulename() functions - # in the parser module file. Without this function, it is really easy for - # users to make mistakes by cutting and pasting code fragments (and it's a real - # bugger to try and figure out why the resulting parser doesn't work). Therefore, - # we just do a little regular expression pattern matching of def statements - # to try and detect duplicates. - # ----------------------------------------------------------------------------- - - def validate_files(self): - # Match def p_funcname( - fre = re.compile(r'\s*def\s+(p_[a-zA-Z_0-9]*)\(') - - for filename in self.files.keys(): - base,ext = os.path.splitext(filename) - if ext != '.py': return 1 # No idea. Assume it's okay. - - try: - f = open(filename) - lines = f.readlines() - f.close() - except IOError: - continue - - counthash = { } - for linen,l in enumerate(lines): - linen += 1 - m = fre.match(l) - if m: - name = m.group(1) - prev = counthash.get(name) - if not prev: - counthash[name] = linen - else: - self.log.warning("%s:%d: Function %s redefined. Previously defined on line %d", filename,linen,name,prev) - - # Get the start symbol - def get_start(self): - self.start = self.pdict.get('start') - - # Validate the start symbol - def validate_start(self): - if self.start is not None: - if not isinstance(self.start,str): - self.log.error("'start' must be a string") - - # Look for error handler - def get_error_func(self): - self.error_func = self.pdict.get('p_error') - - # Validate the error function - def validate_error_func(self): - if self.error_func: - if isinstance(self.error_func,types.FunctionType): - ismethod = 0 - elif isinstance(self.error_func, types.MethodType): - ismethod = 1 - else: - self.log.error("'p_error' defined, but is not a function or method") - self.error = 1 - return - - eline = func_code(self.error_func).co_firstlineno - efile = func_code(self.error_func).co_filename - self.files[efile] = 1 - - if (func_code(self.error_func).co_argcount != 1+ismethod): - self.log.error("%s:%d: p_error() requires 1 argument",efile,eline) - self.error = 1 - - # Get the tokens map - def get_tokens(self): - tokens = self.pdict.get("tokens",None) - if not tokens: - self.log.error("No token list is defined") - self.error = 1 - return - - if not isinstance(tokens,(list, tuple)): - self.log.error("tokens must be a list or tuple") - self.error = 1 - return - - if not tokens: - self.log.error("tokens is empty") - self.error = 1 - return - - self.tokens = tokens - - # Validate the tokens - def validate_tokens(self): - # Validate the tokens. - if 'error' in self.tokens: - self.log.error("Illegal token name 'error'. Is a reserved word") - self.error = 1 - return - - terminals = {} - for n in self.tokens: - if n in terminals: - self.log.warning("Token '%s' multiply defined", n) - terminals[n] = 1 - - # Get the precedence map (if any) - def get_precedence(self): - self.prec = self.pdict.get("precedence",None) - - # Validate and parse the precedence map - def validate_precedence(self): - preclist = [] - if self.prec: - if not isinstance(self.prec,(list,tuple)): - self.log.error("precedence must be a list or tuple") - self.error = 1 - return - for level,p in enumerate(self.prec): - if not isinstance(p,(list,tuple)): - self.log.error("Bad precedence table") - self.error = 1 - return - - if len(p) < 2: - self.log.error("Malformed precedence entry %s. Must be (assoc, term, ..., term)",p) - self.error = 1 - return - assoc = p[0] - if not isinstance(assoc,str): - self.log.error("precedence associativity must be a string") - self.error = 1 - return - for term in p[1:]: - if not isinstance(term,str): - self.log.error("precedence items must be strings") - self.error = 1 - return - preclist.append((term,assoc,level+1)) - self.preclist = preclist - - # Get all p_functions from the grammar - def get_pfunctions(self): - p_functions = [] - for name, item in self.pdict.items(): - if name[:2] != 'p_': continue - if name == 'p_error': continue - if isinstance(item,(types.FunctionType,types.MethodType)): - line = func_code(item).co_firstlineno - file = func_code(item).co_filename - p_functions.append((line,file,name,item.__doc__)) - - # Sort all of the actions by line number - p_functions.sort() - self.pfuncs = p_functions - - - # Validate all of the p_functions - def validate_pfunctions(self): - grammar = [] - # Check for non-empty symbols - if len(self.pfuncs) == 0: - self.log.error("no rules of the form p_rulename are defined") - self.error = 1 - return - - for line, file, name, doc in self.pfuncs: - func = self.pdict[name] - if isinstance(func, types.MethodType): - reqargs = 2 - else: - reqargs = 1 - if func_code(func).co_argcount > reqargs: - self.log.error("%s:%d: Rule '%s' has too many arguments",file,line,func.__name__) - self.error = 1 - elif func_code(func).co_argcount < reqargs: - self.log.error("%s:%d: Rule '%s' requires an argument",file,line,func.__name__) - self.error = 1 - elif not func.__doc__: - self.log.warning("%s:%d: No documentation string specified in function '%s' (ignored)",file,line,func.__name__) - else: - try: - parsed_g = parse_grammar(doc,file,line) - for g in parsed_g: - grammar.append((name, g)) - except SyntaxError: - e = sys.exc_info()[1] - self.log.error(str(e)) - self.error = 1 - - # Looks like a valid grammar rule - # Mark the file in which defined. - self.files[file] = 1 - - # Secondary validation step that looks for p_ definitions that are not functions - # or functions that look like they might be grammar rules. - - for n,v in self.pdict.items(): - if n[0:2] == 'p_' and isinstance(v, (types.FunctionType, types.MethodType)): continue - if n[0:2] == 't_': continue - if n[0:2] == 'p_' and n != 'p_error': - self.log.warning("'%s' not defined as a function", n) - if ((isinstance(v,types.FunctionType) and func_code(v).co_argcount == 1) or - (isinstance(v,types.MethodType) and func_code(v).co_argcount == 2)): - try: - doc = v.__doc__.split(" ") - if doc[1] == ':': - self.log.warning("%s:%d: Possible grammar rule '%s' defined without p_ prefix", - func_code(v).co_filename, func_code(v).co_firstlineno,n) - except Exception: - pass - - self.grammar = grammar - -# ----------------------------------------------------------------------------- -# yacc(module) -# -# Build a parser -# ----------------------------------------------------------------------------- - -def yacc(method='LALR', debug=yaccdebug, module=None, tabmodule=tab_module, start=None, - check_recursion=1, optimize=0, write_tables=1, debugfile=debug_file,outputdir='', - debuglog=None, errorlog = None, picklefile=None): - - global parse # Reference to the parsing method of the last built parser - - # If pickling is enabled, table files are not created - - if picklefile: - write_tables = 0 - - if errorlog is None: - errorlog = PlyLogger(sys.stderr) - - # Get the module dictionary used for the parser - if module: - _items = [(k,getattr(module,k)) for k in dir(module)] - pdict = dict(_items) - else: - pdict = get_caller_module_dict(2) - - # Collect parser information from the dictionary - pinfo = ParserReflect(pdict,log=errorlog) - pinfo.get_all() - - if pinfo.error: - raise YaccError("Unable to build parser") - - # Check signature against table files (if any) - signature = pinfo.signature() - - # Read the tables - try: - lr = LRTable() - if picklefile: - read_signature = lr.read_pickle(picklefile) - else: - read_signature = lr.read_table(tabmodule) - if optimize or (read_signature == signature): - try: - lr.bind_callables(pinfo.pdict) - parser = LRParser(lr,pinfo.error_func) - parse = parser.parse - return parser - except Exception: - e = sys.exc_info()[1] - errorlog.warning("There was a problem loading the table file: %s", repr(e)) - except VersionError: - e = sys.exc_info() - errorlog.warning(str(e)) - except Exception: - pass - - if debuglog is None: - if debug: - debuglog = PlyLogger(open(debugfile,"w")) - else: - debuglog = NullLogger() - - debuglog.info("Created by PLY version %s (http://www.dabeaz.com/ply)", __version__) - - - errors = 0 - - # Validate the parser information - if pinfo.validate_all(): - raise YaccError("Unable to build parser") - - if not pinfo.error_func: - errorlog.warning("no p_error() function is defined") - - # Create a grammar object - grammar = Grammar(pinfo.tokens) - - # Set precedence level for terminals - for term, assoc, level in pinfo.preclist: - try: - grammar.set_precedence(term,assoc,level) - except GrammarError: - e = sys.exc_info()[1] - errorlog.warning("%s",str(e)) - - # Add productions to the grammar - for funcname, gram in pinfo.grammar: - file, line, prodname, syms = gram - try: - grammar.add_production(prodname,syms,funcname,file,line) - except GrammarError: - e = sys.exc_info()[1] - errorlog.error("%s",str(e)) - errors = 1 - - # Set the grammar start symbols - try: - if start is None: - grammar.set_start(pinfo.start) - else: - grammar.set_start(start) - except GrammarError: - e = sys.exc_info()[1] - errorlog.error(str(e)) - errors = 1 - - if errors: - raise YaccError("Unable to build parser") - - # Verify the grammar structure - undefined_symbols = grammar.undefined_symbols() - for sym, prod in undefined_symbols: - errorlog.error("%s:%d: Symbol '%s' used, but not defined as a token or a rule",prod.file,prod.line,sym) - errors = 1 - - unused_terminals = grammar.unused_terminals() - if unused_terminals: - debuglog.info("") - debuglog.info("Unused terminals:") - debuglog.info("") - for term in unused_terminals: - errorlog.warning("Token '%s' defined, but not used", term) - debuglog.info(" %s", term) - - # Print out all productions to the debug log - if debug: - debuglog.info("") - debuglog.info("Grammar") - debuglog.info("") - for n,p in enumerate(grammar.Productions): - debuglog.info("Rule %-5d %s", n, p) - - # Find unused non-terminals - unused_rules = grammar.unused_rules() - for prod in unused_rules: - errorlog.warning("%s:%d: Rule '%s' defined, but not used", prod.file, prod.line, prod.name) - - if len(unused_terminals) == 1: - errorlog.warning("There is 1 unused token") - if len(unused_terminals) > 1: - errorlog.warning("There are %d unused tokens", len(unused_terminals)) - - if len(unused_rules) == 1: - errorlog.warning("There is 1 unused rule") - if len(unused_rules) > 1: - errorlog.warning("There are %d unused rules", len(unused_rules)) - - if debug: - debuglog.info("") - debuglog.info("Terminals, with rules where they appear") - debuglog.info("") - terms = list(grammar.Terminals) - terms.sort() - for term in terms: - debuglog.info("%-20s : %s", term, " ".join([str(s) for s in grammar.Terminals[term]])) - - debuglog.info("") - debuglog.info("Nonterminals, with rules where they appear") - debuglog.info("") - nonterms = list(grammar.Nonterminals) - nonterms.sort() - for nonterm in nonterms: - debuglog.info("%-20s : %s", nonterm, " ".join([str(s) for s in grammar.Nonterminals[nonterm]])) - debuglog.info("") - - if check_recursion: - unreachable = grammar.find_unreachable() - for u in unreachable: - errorlog.warning("Symbol '%s' is unreachable",u) - - infinite = grammar.infinite_cycles() - for inf in infinite: - errorlog.error("Infinite recursion detected for symbol '%s'", inf) - errors = 1 - - unused_prec = grammar.unused_precedence() - for term, assoc in unused_prec: - errorlog.error("Precedence rule '%s' defined for unknown symbol '%s'", assoc, term) - errors = 1 - - if errors: - raise YaccError("Unable to build parser") - - # Run the LRGeneratedTable on the grammar - if debug: - errorlog.debug("Generating %s tables", method) - - lr = LRGeneratedTable(grammar,method,debuglog) - - if debug: - num_sr = len(lr.sr_conflicts) - - # Report shift/reduce and reduce/reduce conflicts - if num_sr == 1: - errorlog.warning("1 shift/reduce conflict") - elif num_sr > 1: - errorlog.warning("%d shift/reduce conflicts", num_sr) - - num_rr = len(lr.rr_conflicts) - if num_rr == 1: - errorlog.warning("1 reduce/reduce conflict") - elif num_rr > 1: - errorlog.warning("%d reduce/reduce conflicts", num_rr) - - # Write out conflicts to the output file - if debug and (lr.sr_conflicts or lr.rr_conflicts): - debuglog.warning("") - debuglog.warning("Conflicts:") - debuglog.warning("") - - for state, tok, resolution in lr.sr_conflicts: - debuglog.warning("shift/reduce conflict for %s in state %d resolved as %s", tok, state, resolution) - - already_reported = {} - for state, rule, rejected in lr.rr_conflicts: - if (state,id(rule),id(rejected)) in already_reported: - continue - debuglog.warning("reduce/reduce conflict in state %d resolved using rule (%s)", state, rule) - debuglog.warning("rejected rule (%s) in state %d", rejected,state) - errorlog.warning("reduce/reduce conflict in state %d resolved using rule (%s)", state, rule) - errorlog.warning("rejected rule (%s) in state %d", rejected, state) - already_reported[state,id(rule),id(rejected)] = 1 - - warned_never = [] - for state, rule, rejected in lr.rr_conflicts: - if not rejected.reduced and (rejected not in warned_never): - debuglog.warning("Rule (%s) is never reduced", rejected) - errorlog.warning("Rule (%s) is never reduced", rejected) - warned_never.append(rejected) - - # Write the table file if requested - if write_tables: - lr.write_table(tabmodule,outputdir,signature) - - # Write a pickled version of the tables - if picklefile: - lr.pickle_table(picklefile,signature) - - # Build the parser - lr.bind_callables(pinfo.pdict) - parser = LRParser(lr,pinfo.error_func) - - parse = parser.parse - return parser diff --git a/idl/webgpu_api_generator.py b/idl/webgpu_api_generator.py deleted file mode 100644 index 5bed914..0000000 --- a/idl/webgpu_api_generator.py +++ /dev/null @@ -1,78 +0,0 @@ -import sys - -sys.path.append('ply') - -import WebIDL -import re - -p = WebIDL.Parser() -def load_and_fixup_idl(filename): - src = open(filename, 'r').read() - src = src.replace('readonly attribute FrozenArray messages;', '') - src = re.sub(r'\[..*?\]', '', src) - src = src.replace('''[ - Exposed=(Window, DedicatedWorker) -]''', '') - src = src.replace('record nonGuaranteedLimits = {};', '') - print(src) - return src - -p.parse(load_and_fixup_idl('common.idl'), filename='common.idl') -p.parse('''interface EventTarget {}; interface EventHandler {}; interface Navigator {}; interface WorkerNavigator {}; -''' + load_and_fixup_idl('webgpu.idl'), filename='webgpu.idl') -data = p.finish(); - -enums = {} - -for d in data: - if isinstance(d, WebIDL.IDLIncludesStatement): - continue - - if isinstance(d, WebIDL.IDLEnum): - enums[d.identifier.name] = []; - for v in d.values(): - enums[d.identifier.name] += [str(v)] - -# Generate headers -webgpu_strings_h = '''#pragma once - -'''; - -wgpu_strings = [0] - -def enum_name_to_cpp_identifier(enum_name, enum_value): - val = 'WGPU'+re.sub(r'([A-Z])', '_\\1', enum_name.replace('GPU', '')).upper() - if enum_value: val += '_' + enum_value.upper().replace('-', '_'); - return val - -for key, values in enums.items(): - webgpu_strings_h += 'typedef int %s;\n' % enum_name_to_cpp_identifier(key, '') - webgpu_strings_h += '#define %s 0\n' % enum_name_to_cpp_identifier(key, 'INVALID') - - for v in values: - try: - existing_index = wgpu_strings.index(v) - except: - existing_index = len(wgpu_strings) - wgpu_strings += [v] - webgpu_strings_h += '#define %s %d\n' % (enum_name_to_cpp_identifier(key, v), existing_index) - - webgpu_strings_h += '\n' - -open('../lib/lib_webgpu_strings.h', 'w').write(webgpu_strings_h) - -wgpu_strings = ["'%s'" % x for x in wgpu_strings] -wgpu_strings[0] = '' -wgpu_strings_string = ','.join(wgpu_strings) - -js_lib = open('../lib/lib_webgpu.js', 'r').read() - -new_strings = 'wgpuStrings: [%s]' % wgpu_strings_string -js_lib = re.sub(r'wgpuStrings: \[,.*?\]', new_strings, js_lib) -assert(new_strings in js_lib) - -new_comment = '// Global constant string table for all WebGPU strings. Contains %d entries, using %d bytes.' % (len(wgpu_strings), len(wgpu_strings_string)) -js_lib = re.sub(r'// Global constant string table for all WebGPU strings.*', new_comment, js_lib) -assert(new_comment in js_lib) - -open('../lib/lib_webgpu.js', 'w').write(js_lib)