Update the WebIDL parser

This commit is contained in:
Anthony Ramine 2017-08-30 13:20:34 +02:00
parent afb874becd
commit f16a046623

View file

@ -2064,6 +2064,9 @@ class IDLType(IDLObject):
def isRecord(self): def isRecord(self):
return False return False
def isReadableStream(self):
return False
def isArrayBuffer(self): def isArrayBuffer(self):
return False return False
@ -2091,12 +2094,12 @@ class IDLType(IDLObject):
def isSpiderMonkeyInterface(self): def isSpiderMonkeyInterface(self):
""" Returns a boolean indicating whether this type is an 'interface' """ Returns a boolean indicating whether this type is an 'interface'
type that is implemented in Spidermonkey. At the moment, this type that is implemented in SpiderMonkey. """
only returns true for the types from the TypedArray spec. """
return self.isInterface() and (self.isArrayBuffer() or return self.isInterface() and (self.isArrayBuffer() or
self.isArrayBufferView() or self.isArrayBufferView() or
self.isSharedArrayBuffer() or self.isSharedArrayBuffer() or
self.isTypedArray()) self.isTypedArray() or
self.isReadableStream())
def isDictionary(self): def isDictionary(self):
return False return False
@ -2289,6 +2292,9 @@ class IDLNullableType(IDLParametrizedType):
def isRecord(self): def isRecord(self):
return self.inner.isRecord() return self.inner.isRecord()
def isReadableStream(self):
return self.inner.isReadableStream()
def isArrayBuffer(self): def isArrayBuffer(self):
return self.inner.isArrayBuffer() return self.inner.isArrayBuffer()
@ -2656,6 +2662,9 @@ class IDLTypedefType(IDLType):
def isRecord(self): def isRecord(self):
return self.inner.isRecord() return self.inner.isRecord()
def isReadableStream(self):
return self.inner.isReadableStream()
def isDictionary(self): def isDictionary(self):
return self.inner.isDictionary() return self.inner.isDictionary()
@ -2970,7 +2979,8 @@ class IDLBuiltinType(IDLType):
'Int32Array', 'Int32Array',
'Uint32Array', 'Uint32Array',
'Float32Array', 'Float32Array',
'Float64Array' 'Float64Array',
'ReadableStream',
) )
TagLookup = { TagLookup = {
@ -3005,7 +3015,8 @@ class IDLBuiltinType(IDLType):
Types.Int32Array: IDLType.Tags.interface, Types.Int32Array: IDLType.Tags.interface,
Types.Uint32Array: IDLType.Tags.interface, Types.Uint32Array: IDLType.Tags.interface,
Types.Float32Array: IDLType.Tags.interface, Types.Float32Array: IDLType.Tags.interface,
Types.Float64Array: IDLType.Tags.interface Types.Float64Array: IDLType.Tags.interface,
Types.ReadableStream: IDLType.Tags.interface,
} }
def __init__(self, location, name, type): def __init__(self, location, name, type):
@ -3052,6 +3063,9 @@ class IDLBuiltinType(IDLType):
return (self._typeTag >= IDLBuiltinType.Types.Int8Array and return (self._typeTag >= IDLBuiltinType.Types.Int8Array and
self._typeTag <= IDLBuiltinType.Types.Float64Array) self._typeTag <= IDLBuiltinType.Types.Float64Array)
def isReadableStream(self):
return self._typeTag == IDLBuiltinType.Types.ReadableStream
def isInterface(self): def isInterface(self):
# TypedArray things are interface types per the TypedArray spec, # TypedArray things are interface types per the TypedArray spec,
# but we handle them as builtins because SpiderMonkey implements # but we handle them as builtins because SpiderMonkey implements
@ -3059,7 +3073,8 @@ class IDLBuiltinType(IDLType):
return (self.isArrayBuffer() or return (self.isArrayBuffer() or
self.isArrayBufferView() or self.isArrayBufferView() or
self.isSharedArrayBuffer() or self.isSharedArrayBuffer() or
self.isTypedArray()) self.isTypedArray() or
self.isReadableStream())
def isNonCallbackInterface(self): def isNonCallbackInterface(self):
# All the interfaces we can be are non-callback # All the interfaces we can be are non-callback
@ -3129,6 +3144,7 @@ class IDLBuiltinType(IDLType):
# that's not an ArrayBuffer or a callback interface # that's not an ArrayBuffer or a callback interface
(self.isArrayBuffer() and not other.isArrayBuffer()) or (self.isArrayBuffer() and not other.isArrayBuffer()) or
(self.isSharedArrayBuffer() and not other.isSharedArrayBuffer()) or (self.isSharedArrayBuffer() and not other.isSharedArrayBuffer()) or
(self.isReadableStream() and not other.isReadableStream()) or
# ArrayBufferView is distinguishable from everything # ArrayBufferView is distinguishable from everything
# that's not an ArrayBufferView or typed array. # that's not an ArrayBufferView or typed array.
(self.isArrayBufferView() and not other.isArrayBufferView() and (self.isArrayBufferView() and not other.isArrayBufferView() and
@ -3238,7 +3254,10 @@ BuiltinTypes = {
IDLBuiltinType.Types.Float32Array), IDLBuiltinType.Types.Float32Array),
IDLBuiltinType.Types.Float64Array: IDLBuiltinType.Types.Float64Array:
IDLBuiltinType(BuiltinLocation("<builtin type>"), "Float64Array", IDLBuiltinType(BuiltinLocation("<builtin type>"), "Float64Array",
IDLBuiltinType.Types.Float64Array) IDLBuiltinType.Types.Float64Array),
IDLBuiltinType.Types.ReadableStream:
IDLBuiltinType(BuiltinLocation("<builtin type>"), "ReadableStream",
IDLBuiltinType.Types.ReadableStream),
} }
@ -5287,7 +5306,8 @@ class Tokenizer(object):
"maplike": "MAPLIKE", "maplike": "MAPLIKE",
"setlike": "SETLIKE", "setlike": "SETLIKE",
"iterable": "ITERABLE", "iterable": "ITERABLE",
"namespace": "NAMESPACE" "namespace": "NAMESPACE",
"ReadableStream": "READABLESTREAM",
} }
tokens.extend(keywords.values()) tokens.extend(keywords.values())
@ -6475,6 +6495,7 @@ class Parser(Tokenizer):
NonAnyType : PrimitiveType Null NonAnyType : PrimitiveType Null
| ARRAYBUFFER Null | ARRAYBUFFER Null
| SHAREDARRAYBUFFER Null | SHAREDARRAYBUFFER Null
| READABLESTREAM Null
| OBJECT Null | OBJECT Null
""" """
if p[1] == "object": if p[1] == "object":
@ -6483,6 +6504,8 @@ class Parser(Tokenizer):
type = BuiltinTypes[IDLBuiltinType.Types.ArrayBuffer] type = BuiltinTypes[IDLBuiltinType.Types.ArrayBuffer]
elif p[1] == "SharedArrayBuffer": elif p[1] == "SharedArrayBuffer":
type = BuiltinTypes[IDLBuiltinType.Types.SharedArrayBuffer] type = BuiltinTypes[IDLBuiltinType.Types.SharedArrayBuffer]
elif p[1] == "ReadableStream":
type = BuiltinTypes[IDLBuiltinType.Types.ReadableStream]
else: else:
type = BuiltinTypes[p[1]] type = BuiltinTypes[p[1]]