Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(494)

Unified Diff: lib/html/scripts/generator.py

Issue 11236024: Merge ListLikeIDLTypeInfo into InterfaceIDLType and add other list-like types to the registry. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/html/scripts/generator.py
diff --git a/lib/html/scripts/generator.py b/lib/html/scripts/generator.py
index c8ab91a4c35ffc3b4db187da30cf6a3d16ef29ed..cfa03e2c259a4053f6d9490d5d7e83971ad6ee46 100644
--- a/lib/html/scripts/generator.py
+++ b/lib/html/scripts/generator.py
@@ -609,6 +609,12 @@ class IDLTypeInfo(object):
def has_generated_interface(self):
raise NotImplementedError()
+ def is_list_like(self):
+ raise NotImplementedError()
+
+ def list_item_type(self):
+ raise NotImplementedError()
+
def merged_interface(self):
return None
@@ -696,14 +702,25 @@ class IDLTypeInfo(object):
class InterfaceIDLTypeInfo(IDLTypeInfo):
- def __init__(self, idl_type, data, dart_interface_name):
+ def __init__(self, idl_type, data, dart_interface_name, type_registry):
super(InterfaceIDLTypeInfo, self).__init__(idl_type, data)
self._dart_interface_name = dart_interface_name
+ self._type_registry = type_registry
def dart_type(self):
+ # TODO(podivilov): why NodeList is special?
+ if self.idl_type() == 'NodeList':
+ return 'List<Node>'
+ if self.is_list_like() and not self.has_generated_interface():
+ return 'List<%s>' % self._type_registry.TypeInfo(self._data.item_type).dart_type()
return self._data.dart_type or self._dart_interface_name
def narrow_dart_type(self):
+ # TODO(podivilov): why NodeList is special?
+ if self.idl_type() == 'NodeList':
+ return 'List<Node>'
+ if self.is_list_like():
+ return ImplementationClassNameForInterfaceName(self.idl_type())
# TODO(podivilov): only primitive and collection types should override
# dart_type.
if self._data.dart_type != None:
@@ -713,9 +730,13 @@ class InterfaceIDLTypeInfo(IDLTypeInfo):
return ImplementationClassNameForInterfaceName(self.interface_name())
def interface_name(self):
+ if self.is_list_like() and not self.has_generated_interface():
+ return self.dart_type()
return self._dart_interface_name
def implementation_name(self):
+ if self.is_list_like():
+ return ImplementationClassNameForInterfaceName(self.idl_type())
implementation_name = ImplementationClassNameForInterfaceName(
self.interface_name())
if self.merged_into():
@@ -723,7 +744,13 @@ class InterfaceIDLTypeInfo(IDLTypeInfo):
return implementation_name
def has_generated_interface(self):
- return True
+ return not self._data.suppress_interface
+
+ def is_list_like(self):
+ return self._data.list_like
+
+ def list_item_type(self):
+ return self._data.item_type
def merged_interface(self):
# All constants, attributes, and operations of merged interface should be
@@ -751,38 +778,6 @@ class CallbackIDLTypeInfo(IDLTypeInfo):
super(CallbackIDLTypeInfo, self).__init__(idl_type, data)
-# Type info for DOM types that are converted to dart lists and therefore whose
-# actual interface generation should be suppressed. For type information, we
-# still generate the implementations though, so these types should not be
-# suppressed entirely.
-class ListLikeIDLTypeInfo(IDLTypeInfo):
- def __init__(self, idl_type, data, item_info):
- super(ListLikeIDLTypeInfo, self).__init__(idl_type, data)
- self._item_info = item_info
-
- def dart_type(self):
- return 'List<%s>' % self._item_info.dart_type()
-
- def narrow_dart_type(self):
- if self.has_generated_interface():
- return self.dart_type()
- return ImplementationClassNameForInterfaceName(self.idl_type())
-
- def interface_name(self):
- if self.has_generated_interface():
- return self.idl_type()
- return self.dart_type()
-
- def implementation_name(self):
- return ImplementationClassNameForInterfaceName(self.idl_type())
-
- def has_generated_interface(self):
- # Don't generate interfaces for list-like types.
- # TODO(podivilov): why NodeList is special? Is it indeed a list-like type
- # or should just implement sequence<Node>?
- return self.idl_type() == 'NodeList'
-
-
class SequenceIDLTypeInfo(IDLTypeInfo):
def __init__(self, idl_type, data, item_info):
super(SequenceIDLTypeInfo, self).__init__(idl_type, data)
@@ -868,8 +863,9 @@ class PrimitiveIDLTypeInfo(IDLTypeInfo):
class SVGTearOffIDLTypeInfo(InterfaceIDLTypeInfo):
- def __init__(self, idl_type, data):
- super(SVGTearOffIDLTypeInfo, self).__init__(idl_type, data, idl_type)
+ def __init__(self, idl_type, data, type_registry):
+ super(SVGTearOffIDLTypeInfo, self).__init__(
+ idl_type, data, idl_type, type_registry)
def native_type(self):
if self._data.native_type:
@@ -913,7 +909,7 @@ class TypeData(object):
webcore_getter_name='getAttribute',
webcore_setter_name='setAttribute',
requires_v8_scope=False,
- item_type=None):
+ list_like=False, item_type=None, suppress_interface=False):
Anton Muhin 2012/10/22 12:19:18 cannot we assume item_type is None <=> not list_li
podivilov 2012/10/22 12:32:59 Done.
self.clazz = clazz
self.dart_type = dart_type
self.native_type = native_type
@@ -925,7 +921,9 @@ class TypeData(object):
self.webcore_getter_name = webcore_getter_name
self.webcore_setter_name = webcore_setter_name
self.requires_v8_scope = requires_v8_scope
+ self.list_like = list_like
self.item_type = item_type
+ self.suppress_interface = suppress_interface
_idl_type_registry = {
@@ -998,41 +996,95 @@ _idl_type_registry = {
'StyleSheet': TypeData(clazz='Interface', conversion_includes=['CSSStyleSheet']),
'SVGElement': TypeData(clazz='Interface', custom_to_dart=True),
- 'ClientRectList': TypeData(clazz='ListLike', item_type='ClientRect'),
- 'CSSRuleList': TypeData(clazz='ListLike', item_type='CSSRule'),
- 'CSSValueList': TypeData(clazz='ListLike', item_type='CSSValue'),
- 'DOMStringList': TypeData(clazz='ListLike', item_type='DOMString',
- custom_to_native=True),
- 'EntryArray': TypeData(clazz='ListLike', item_type='Entry'),
- 'EntryArraySync': TypeData(clazz='ListLike', item_type='EntrySync'),
- 'FileList': TypeData(clazz='ListLike', item_type='File'),
- 'GamepadList': TypeData(clazz='ListLike', item_type='Gamepad'),
- 'MediaStreamList': TypeData(clazz='ListLike', item_type='MediaStream'),
- 'NodeList': TypeData(clazz='ListLike', item_type='Node'),
- 'SVGElementInstanceList': TypeData(clazz='ListLike',
- item_type='SVGElementInstance'),
- 'SpeechInputResultList': TypeData(clazz='ListLike',
- item_type='SpeechInputResult'),
- 'SpeechRecognitionResultList': TypeData(clazz='ListLike',
- item_type='SpeechRecognitionResult'),
- 'StyleSheetList': TypeData(clazz='ListLike', item_type='StyleSheet'),
- 'WebKitAnimationList': TypeData(clazz='ListLike',
- item_type='WebKitAnimation'),
+ 'ClientRectList': TypeData(clazz='Interface', list_like=True,
Anton Muhin 2012/10/22 12:19:18 maybe introduce a helper function?
podivilov 2012/10/22 12:32:59 Now that list_like is removed as you suggested, he
+ item_type='ClientRect', suppress_interface=True),
+ 'CSSRuleList': TypeData(clazz='Interface', list_like=True,
+ item_type='CSSRule', suppress_interface=True),
+ 'CSSValueList': TypeData(clazz='Interface', list_like=True,
+ item_type='CSSValue', suppress_interface=True),
+ 'DOMMimeTypeArray': TypeData(clazz='Interface', list_like=True,
+ item_type='DOMMimeType'),
+ 'DOMPluginArray': TypeData(clazz='Interface', list_like=True,
+ item_type='DOMPlugin'),
+ 'DOMStringList': TypeData(clazz='Interface', list_like=True,
+ item_type='DOMString', suppress_interface=True, custom_to_native=True),
+ 'EntryArray': TypeData(clazz='Interface', list_like=True,
+ item_type='Entry', suppress_interface=True),
+ 'EntryArraySync': TypeData(clazz='Interface', list_like=True,
+ item_type='EntrySync', suppress_interface=True),
+ 'FileList': TypeData(clazz='Interface', list_like=True,
+ item_type='File', suppress_interface=True),
+ 'GamepadList': TypeData(clazz='Interface', list_like=True,
+ item_type='Gamepad', suppress_interface=True),
+ 'HTMLAllCollection': TypeData(clazz='Interface', list_like=True,
+ item_type='Node'),
+ 'HTMLCollection': TypeData(clazz='Interface', list_like=True,
+ item_type='Node'),
+ 'MediaStreamList': TypeData(clazz='Interface', list_like=True,
+ item_type='MediaStream', suppress_interface=True),
+ 'NamedNodeMap': TypeData(clazz='Interface', list_like=True,
+ item_type='Node'),
+ 'NodeList': TypeData(clazz='Interface', list_like=True, item_type='Node'),
+ 'SVGAnimatedLengthList': TypeData(clazz='Interface', list_like=True,
+ item_type='SVGAnimatedLength'),
+ 'SVGAnimatedNumberList': TypeData(clazz='Interface', list_like=True,
+ item_type='SVGAnimatedNumber'),
+ 'SVGAnimatedTransformList': TypeData(clazz='Interface', list_like=True,
+ item_type='SVGAnimateTransformElement'),
+ 'SVGElementInstanceList': TypeData(clazz='Interface', list_like=True,
+ item_type='SVGElementInstance', suppress_interface=True),
+ 'SourceBufferList': TypeData(clazz='Interface', list_like=True,
+ item_type='SourceBuffer'),
+ 'SpeechGrammarList': TypeData(clazz='Interface', list_like=True,
+ item_type='SpeechGrammar'),
+ 'SpeechInputResultList': TypeData(clazz='Interface', list_like=True,
+ item_type='SpeechInputResult', suppress_interface=True),
+ 'SpeechRecognitionResultList': TypeData(clazz='Interface', list_like=True,
+ item_type='SpeechRecognitionResult', suppress_interface=True),
+ 'SQLResultSetRowList': TypeData(clazz='Interface', list_like=True,
+ item_type='Dictionary'),
+ 'StyleSheetList': TypeData(clazz='Interface', list_like=True,
+ item_type='StyleSheet', suppress_interface=True),
+ 'TextTrackCueList': TypeData(clazz='Interface', list_like=True,
+ item_type='TextTrackCue'),
+ 'TextTrackList': TypeData(clazz='Interface', list_like=True,
+ item_type='TextTrack'),
+ 'TouchList': TypeData(clazz='Interface', list_like=True, item_type='Touch'),
+ 'WebKitAnimationList': TypeData(clazz='Interface', list_like=True,
+ item_type='WebKitAnimation', suppress_interface=True),
+
+ 'Float32Array': TypeData(clazz='Interface', list_like=True,
+ item_type='double'),
+ 'Float64Array': TypeData(clazz='Interface', list_like=True,
+ item_type='double'),
+ 'Int8Array': TypeData(clazz='Interface', list_like=True, item_type='int'),
+ 'Int16Array': TypeData(clazz='Interface', list_like=True, item_type='int'),
+ 'Int32Array': TypeData(clazz='Interface', list_like=True, item_type='int'),
+ 'Uint8Array': TypeData(clazz='Interface', list_like=True, item_type='int'),
+ 'Uint16Array': TypeData(clazz='Interface', list_like=True, item_type='int'),
+ 'Uint32Array': TypeData(clazz='Interface', list_like=True, item_type='int'),
'SVGAngle': TypeData(clazz='SVGTearOff'),
'SVGLength': TypeData(clazz='SVGTearOff'),
- 'SVGLengthList': TypeData(clazz='SVGTearOff'),
+ 'SVGLengthList': TypeData(clazz='SVGTearOff', list_like=True,
+ item_type='SVGLength'),
'SVGMatrix': TypeData(clazz='SVGTearOff'),
'SVGNumber': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<float>'),
- 'SVGNumberList': TypeData(clazz='SVGTearOff'),
- 'SVGPathSegList': TypeData(clazz='SVGTearOff', native_type='SVGPathSegListPropertyTearOff'),
+ 'SVGNumberList': TypeData(clazz='SVGTearOff', list_like=True,
+ item_type='SVGNumber'),
+ 'SVGPathSegList': TypeData(clazz='SVGTearOff', list_like=True,
+ item_type='SVGPathSeg', native_type='SVGPathSegListPropertyTearOff'),
'SVGPoint': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<FloatPoint>'),
'SVGPointList': TypeData(clazz='SVGTearOff'),
'SVGPreserveAspectRatio': TypeData(clazz='SVGTearOff'),
'SVGRect': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<FloatRect>'),
- 'SVGStringList': TypeData(clazz='SVGTearOff', native_type='SVGStaticListPropertyTearOff<SVGStringList>'),
+ 'SVGStringList': TypeData(clazz='SVGTearOff', list_like=True,
+ item_type='DOMString',
+ native_type='SVGStaticListPropertyTearOff<SVGStringList>'),
'SVGTransform': TypeData(clazz='SVGTearOff'),
- 'SVGTransformList': TypeData(clazz='SVGTearOff', native_type='SVGTransformListPropertyTearOff'),
+ 'SVGTransformList': TypeData(clazz='SVGTearOff', list_like=True,
+ item_type='SVGTransform',
+ native_type='SVGTransformListPropertyTearOff'),
}
_svg_supplemental_includes = [
@@ -1073,7 +1125,8 @@ class TypeRegistry(object):
return InterfaceIDLTypeInfo(
type_name,
TypeData('Interface'),
- self._renamer.RenameInterface(interface))
+ self._renamer.RenameInterface(interface),
+ self)
type_data = _idl_type_registry.get(type_name)
@@ -1083,10 +1136,11 @@ class TypeRegistry(object):
self._database.GetInterface(type_name))
else:
dart_interface_name = type_name
- return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name)
+ return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name,
+ self)
- if type_data.clazz == 'ListLike':
- return ListLikeIDLTypeInfo(type_name, type_data, self.TypeInfo(type_data.item_type))
+ if type_data.clazz == 'SVGTearOff':
+ return SVGTearOffIDLTypeInfo(type_name, type_data, self)
class_name = '%sIDLTypeInfo' % type_data.clazz
return globals()[class_name](type_name, type_data)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698