Skip to content


Browse files Browse the repository at this point in the history
Improve webidl precision
Allow enum variants staring with digit
  • Loading branch information
kunalmohan committed Jun 1, 2020
1 parent e0f3e9b commit d9db350
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions components/script/dom/bindings/codegen/
Expand Up @@ -4328,7 +4328,7 @@ def getEnumValueName(value):
if re.match("[^\x20-\x7E]", value):
raise SyntaxError('Enum value "' + value + '" contains non-ASCII characters')
if re.match("^[0-9]", value):
raise SyntaxError('Enum value "' + value + '" starts with a digit')
value = '_' + value
value = re.sub(r'[^0-9A-Za-z_]', '_', value)
if re.match("^_[A-Z]|__", value):
raise SyntaxError('Enum value "' + value + '" is reserved by the C++ spec')
Expand Down Expand Up @@ -4650,20 +4650,24 @@ def get_match(name):
# "object" is not distinguishable from other types
assert not object or not (interfaceObject or arrayObject or callbackObject or mozMapObject)
templateBody = CGList([], "\n")
if object:
if arrayObject or callbackObject:
# An object can be both an sequence object and a callback or
# dictionary, but we shouldn't have both in the union's members
# because they are not distinguishable.
assert not (arrayObject and callbackObject)
templateBody.append(arrayObject if arrayObject else callbackObject)
if interfaceObject:
assert not object
if arrayObject:
if callbackObject:
elif object:
if mozMapObject:

conversions.append(CGIfWrapper("value.get().is_object()", templateBody))

if dictionaryObject:
assert not hasObjectTypes
assert not object

stringTypes = [t for t in memberTypes if t.isString() or t.isEnum()]
Expand Down

0 comments on commit d9db350

Please sign in to comment.