| Index: client/dom/scripts/generator.py
|
| diff --git a/client/dom/scripts/generator.py b/client/dom/scripts/generator.py
|
| index 4680df00d45effe223d7f74d49a2e1459913dd13..51131ed921e692fc99603dbd05d0794811fc700e 100644
|
| --- a/client/dom/scripts/generator.py
|
| +++ b/client/dom/scripts/generator.py
|
| @@ -349,3 +349,172 @@ def TypeName(typeIds, interface):
|
| # Dynamically type this field for now.
|
| return 'var'
|
|
|
| +# ------------------------------------------------------------------------------
|
| +
|
| +class IDLTypeInfo(object):
|
| + def __init__(self, idl_type, native_type=None, ref_counted=True,
|
| + has_dart_wrapper=True, conversion_template=None,
|
| + custom_to_dart=False):
|
| + self._idl_type = idl_type
|
| + self._native_type = native_type
|
| + self._ref_counted = ref_counted
|
| + self._has_dart_wrapper = has_dart_wrapper
|
| + self._conversion_template = conversion_template
|
| + self._custom_to_dart = custom_to_dart
|
| +
|
| + def idl_type(self):
|
| + return self._idl_type
|
| +
|
| + def native_type(self):
|
| + if self._native_type:
|
| + return self._native_type
|
| + return self._idl_type
|
| +
|
| + def parameter_adapter_info(self):
|
| + native_type = self.native_type()
|
| + if self._ref_counted:
|
| + native_type = 'RefPtr< %s >' % native_type
|
| + if self._has_dart_wrapper:
|
| + wrapper_type = 'Dart%s' % self.idl_type()
|
| + adapter_type = 'ParameterAdapter<%s, %s>' % (native_type, wrapper_type)
|
| + return (adapter_type, wrapper_type)
|
| + return ('ParameterAdapter< %s >' % native_type, self._idl_type)
|
| +
|
| + def parameter_type(self):
|
| + return '%s*' % self.native_type()
|
| +
|
| + def webcore_include(self):
|
| + if self._idl_type == 'SVGNumber' or self._idl_type == 'SVGPoint':
|
| + return None
|
| + if self._idl_type.startswith('SVGPathSeg'):
|
| + return self._idl_type.replace('Abs', '').replace('Rel', '')
|
| + return self._idl_type
|
| +
|
| + def receiver(self):
|
| + return 'receiver->'
|
| +
|
| + def conversion_include(self):
|
| + return 'Dart%s' % self._idl_type
|
| +
|
| + def conversion_cast(self, expression):
|
| + if self._conversion_template:
|
| + return self._conversion_template % expression
|
| + return expression
|
| +
|
| + def custom_to_dart(self):
|
| + return self._custom_to_dart
|
| +
|
| +class PrimitiveIDLTypeInfo(IDLTypeInfo):
|
| + def __init__(self, idl_type, native_type=None, ref_counted=False,
|
| + conversion_template=None,
|
| + webcore_getter_name='getAttribute',
|
| + webcore_setter_name='setAttribute'):
|
| + super(PrimitiveIDLTypeInfo, self).__init__(idl_type,
|
| + native_type=native_type, ref_counted=ref_counted,
|
| + conversion_template=conversion_template)
|
| + self._webcore_getter_name = webcore_getter_name
|
| + self._webcore_setter_name = webcore_setter_name
|
| +
|
| + def parameter_adapter_info(self):
|
| + native_type = self.native_type()
|
| + if self._ref_counted:
|
| + native_type = 'RefPtr< %s >' % native_type
|
| + return ('ParameterAdapter< %s >' % native_type, None)
|
| +
|
| + def parameter_type(self):
|
| + if self.native_type() == 'String':
|
| + return 'const String&'
|
| + return self.native_type()
|
| +
|
| + def conversion_include(self):
|
| + return None
|
| +
|
| + def webcore_getter_name(self):
|
| + return self._webcore_getter_name
|
| +
|
| + def webcore_setter_name(self):
|
| + return self._webcore_setter_name
|
| +
|
| +class SVGTearOffIDLTypeInfo(IDLTypeInfo):
|
| + def __init__(self, idl_type, native_type='', ref_counted=True):
|
| + super(SVGTearOffIDLTypeInfo, self).__init__(idl_type,
|
| + native_type=native_type,
|
| + ref_counted=ref_counted)
|
| +
|
| + def native_type(self):
|
| + if self._native_type:
|
| + return self._native_type
|
| + tear_off_type = 'SVGPropertyTearOff'
|
| + if self._idl_type.endswith('List'):
|
| + tear_off_type = 'SVGListPropertyTearOff'
|
| + return '%s<%s>' % (tear_off_type, self._idl_type)
|
| +
|
| + def receiver(self):
|
| + if self._idl_type.endswith('List'):
|
| + return 'receiver->'
|
| + return 'receiver->propertyReference().'
|
| +
|
| +
|
| +_idl_type_registry = {
|
| + # There is GC3Dboolean which is not a bool, but unsigned char for OpenGL compatibility.
|
| + 'boolean': PrimitiveIDLTypeInfo('boolean', native_type='bool',
|
| + conversion_template='static_cast<bool>(%s)',
|
| + webcore_getter_name='hasAttribute',
|
| + webcore_setter_name='setBooleanAttribute'),
|
| + # Some IDL's unsigned shorts/shorts are mapped to WebCore C++ enums, so we
|
| + # use a static_cast<int> here not to provide overloads for all enums.
|
| + 'short': PrimitiveIDLTypeInfo('short', native_type='int', conversion_template='static_cast<int>(%s)'),
|
| + 'unsigned short': PrimitiveIDLTypeInfo('unsigned short', native_type='int', conversion_template='static_cast<int>(%s)'),
|
| + 'int': PrimitiveIDLTypeInfo('int'),
|
| + 'unsigned int': PrimitiveIDLTypeInfo('unsigned int', native_type='unsigned'),
|
| + 'long': PrimitiveIDLTypeInfo('long', native_type='int',
|
| + webcore_getter_name='getIntegralAttribute',
|
| + webcore_setter_name='setIntegralAttribute'),
|
| + 'unsigned long': PrimitiveIDLTypeInfo('unsigned long', native_type='unsigned',
|
| + webcore_getter_name='getUnsignedIntegralAttribute',
|
| + webcore_setter_name='setUnsignedIntegralAttribute'),
|
| + 'long long': PrimitiveIDLTypeInfo('long long'),
|
| + 'unsigned long long': PrimitiveIDLTypeInfo('unsigned long long'),
|
| + 'double': PrimitiveIDLTypeInfo('double'),
|
| +
|
| + 'Date': PrimitiveIDLTypeInfo('Date', native_type='double'),
|
| + 'DOMString': PrimitiveIDLTypeInfo('DOMString', native_type='String'),
|
| + 'DOMTimeStamp': PrimitiveIDLTypeInfo('DOMTimeStamp'),
|
| + 'object': PrimitiveIDLTypeInfo('object', native_type='ScriptValue'),
|
| + 'SerializedScriptValue': PrimitiveIDLTypeInfo('SerializedScriptValue', ref_counted=True),
|
| +
|
| + 'DOMException': IDLTypeInfo('DOMCoreException'),
|
| + 'DOMWindow': IDLTypeInfo('DOMWindow', custom_to_dart=True),
|
| + 'Element': IDLTypeInfo('Element', custom_to_dart=True),
|
| + 'EventListener': IDLTypeInfo('EventListener', has_dart_wrapper=False),
|
| + 'EventTarget': IDLTypeInfo('EventTarget', has_dart_wrapper=False),
|
| + 'HTMLElement': IDLTypeInfo('HTMLElement', custom_to_dart=True),
|
| + 'MediaQueryListListener': IDLTypeInfo('MediaQueryListListener', has_dart_wrapper=False),
|
| + 'OptionsObject': IDLTypeInfo('OptionsObject', has_dart_wrapper=False),
|
| + 'SVGElement': IDLTypeInfo('SVGElement', custom_to_dart=True),
|
| +
|
| + 'SVGAngle': SVGTearOffIDLTypeInfo('SVGAngle'),
|
| + 'SVGLength': SVGTearOffIDLTypeInfo('SVGLength'),
|
| + 'SVGLengthList': SVGTearOffIDLTypeInfo('SVGLengthList', ref_counted=False),
|
| + 'SVGMatrix': SVGTearOffIDLTypeInfo('SVGMatrix'),
|
| + 'SVGNumber': SVGTearOffIDLTypeInfo('SVGNumber', native_type='SVGPropertyTearOff<float>'),
|
| + 'SVGNumberList': SVGTearOffIDLTypeInfo('SVGNumberList', ref_counted=False),
|
| + 'SVGPathSegList': SVGTearOffIDLTypeInfo('SVGPathSegList', native_type='SVGPathSegListPropertyTearOff', ref_counted=False),
|
| + 'SVGPoint': SVGTearOffIDLTypeInfo('SVGPoint', native_type='SVGPropertyTearOff<FloatPoint>'),
|
| + 'SVGPointList': SVGTearOffIDLTypeInfo('SVGPointList', ref_counted=False),
|
| + 'SVGPreserveAspectRatio': SVGTearOffIDLTypeInfo('SVGPreserveAspectRatio'),
|
| + 'SVGRect': SVGTearOffIDLTypeInfo('SVGRect', native_type='SVGPropertyTearOff<FloatRect>'),
|
| + 'SVGStringList': SVGTearOffIDLTypeInfo('SVGStringList', native_type='SVGStaticListPropertyTearOff<SVGStringList>', ref_counted=False),
|
| + 'SVGTransform': SVGTearOffIDLTypeInfo('SVGTransform'),
|
| + 'SVGTransformList': SVGTearOffIDLTypeInfo('SVGTransformList', native_type='SVGTransformListPropertyTearOff', ref_counted=False)
|
| +}
|
| +
|
| +original_idl_types = {
|
| +}
|
| +
|
| +def GetIDLTypeInfo(idl_type):
|
| + idl_type_name = original_idl_types.get(idl_type, idl_type.id)
|
| + return GetIDLTypeInfoByName(idl_type_name)
|
| +
|
| +def GetIDLTypeInfoByName(idl_type_name):
|
| + return _idl_type_registry.get(idl_type_name, IDLTypeInfo(idl_type_name))
|
|
|