Index: tools/dom/scripts/generator.py |
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py |
index 58d77b48e1d6c8397afc42c1c76bd32000b264cc..f8f98fa017a6c5e6d1fbcef00ce5332b2a827e47 100644 |
--- a/tools/dom/scripts/generator.py |
+++ b/tools/dom/scripts/generator.py |
@@ -70,6 +70,17 @@ _methods_with_named_formals = monitored.Set( |
'XMLHttpRequest.open', |
]) |
+def ReturnValueConversionHack(idl_type, value, interface_name): |
+ if idl_type == 'SVGMatrix': |
+ return '%sTearOff::create(%s)' % (idl_type, value) |
+ elif ((idl_type == 'SVGAngle' and interface_name != 'SVGAnimatedAngle') |
+ or (idl_type == 'SVGTransform' and interface_name == 'SVGSVGElement')): |
+ # Somewhere in the IDL it probably specifies whether we need to call |
+ # create or not. |
+ return 'SVGPropertyTearOff<%s>::create(%s)' % (idl_type, value) |
+ |
+ return value |
+ |
# |
# Renames for attributes that have names that are not legal Dart names. |
# |
@@ -662,21 +673,25 @@ class IDLTypeInfo(object): |
def vector_to_dart_template_parameter(self): |
return self.native_type() |
- def to_native_info(self, idl_node, interface_name): |
+ def to_native_info(self, idl_node, interface_name, callback_name): |
cls = self.bindings_class() |
if 'Callback' in idl_node.ext_attrs: |
return '%s.release()', 'OwnPtr<%s>' % self.native_type(), cls, 'create' |
- if self.custom_to_native(): |
+ # This is a hack to handle property references correctly. |
+ if (self.native_type() in ['SVGPropertyTearOff<SVGAngle>', |
+ 'SVGPropertyTearOff<SVGAngle>*', 'SVGMatrixTearOff'] |
+ and (callback_name != 'createSVGTransformFromMatrixCallback' |
+ or interface_name != 'SVGTransformList')): |
+ argument_expression_template = '%s->propertyReference()' |
+ type = '%s*' % self.native_type() |
+ elif self.custom_to_native(): |
type = 'RefPtr<%s>' % self.native_type() |
argument_expression_template = '%s.get()' |
else: |
type = '%s*' % self.native_type() |
- if isinstance(self, SVGTearOffIDLTypeInfo) and not interface_name.endswith('List'): |
- argument_expression_template = '%s->propertyReference()' |
- else: |
- argument_expression_template = '%s' |
+ argument_expression_template = '%s' |
return argument_expression_template, type, cls, 'toNative' |
def pass_native_by_ref(self): return False |
@@ -729,7 +744,7 @@ class IDLTypeInfo(object): |
interface_name=None, attributes=None): |
auto_dart_scope='true' if auto_dart_scope_setup else 'false' |
return 'Dart%s::returnToDart(args, %s, %s)' % (self._idl_type, |
- value, |
+ ReturnValueConversionHack(self._idl_type, value, interface_name), |
auto_dart_scope) |
def custom_to_dart(self): |
@@ -838,7 +853,7 @@ class SequenceIDLTypeInfo(IDLTypeInfo): |
def vector_to_dart_template_parameter(self): |
raise Exception('sequences of sequences are not supported yet') |
- def to_native_info(self, idl_node, interface_name): |
+ def to_native_info(self, idl_node, interface_name, callback_name): |
item_native_type = self._item_info.vector_to_dart_template_parameter() |
if isinstance(self._item_info, PrimitiveIDLTypeInfo): |
return '%s', 'Vector<%s>' % item_native_type, 'DartUtilities', 'toNativeVector<%s>' % item_native_type |
@@ -873,7 +888,7 @@ class DOMStringArrayTypeInfo(SequenceIDLTypeInfo): |
def __init__(self, data, item_info): |
super(DOMStringArrayTypeInfo, self).__init__('DOMString[]', data, item_info) |
- def to_native_info(self, idl_node, interface_name): |
+ def to_native_info(self, idl_node, interface_name, callback_name): |
return '%s', 'RefPtr<DOMStringList>', 'DartDOMStringList', 'toNative' |
def pass_native_by_ref(self): return False |
@@ -892,7 +907,7 @@ class PrimitiveIDLTypeInfo(IDLTypeInfo): |
if self.idl_type() == 'float': return 'float' |
return self.native_type() |
- def to_native_info(self, idl_node, interface_name): |
+ def to_native_info(self, idl_node, interface_name, callback_name): |
type = self.native_type() |
if type == 'SerializedScriptValue': |
type = 'RefPtr<%s>' % type |
@@ -956,24 +971,18 @@ class SVGTearOffIDLTypeInfo(InterfaceIDLTypeInfo): |
return '%s<%s>' % (tear_off_type, self._idl_type) |
def receiver(self): |
- if self._idl_type.endswith('List'): |
- return 'receiver->' |
- return 'receiver->propertyReference().' |
+ return 'receiver->' |
def to_conversion_cast(self, value, interface_name, attributes): |
- svg_primitive_types = ['SVGAngle', 'SVGLength', 'SVGMatrix', |
+ svg_primitive_types = ['SVGLength', 'SVGMatrix', |
'SVGNumber', 'SVGPoint', 'SVGRect', 'SVGTransform'] |
- conversion_cast = '%s::create(%s)' |
- if interface_name.startswith('SVGAnimated'): |
- conversion_cast = 'static_cast<%s*>(%s)' |
- elif self.idl_type() == 'SVGStringList': |
- conversion_cast = '%s::create(receiver, %s)' |
- elif interface_name.endswith('List'): |
- conversion_cast = 'static_cast<%s*>(%s.get())' |
- elif self.idl_type() in svg_primitive_types: |
- conversion_cast = '%s::create(%s)' |
- else: |
- conversion_cast = 'static_cast<%s*>(%s)' |
+ |
+ # This is a hack. We either need to figure out the right way to derive this |
+ # information from the IDL or remove this generator. |
+ if self.idl_type() != 'SVGTransformList': |
+ return value |
+ |
+ conversion_cast = 'static_cast<%s*>(%s)' |
conversion_cast = conversion_cast % (self.native_type(), value) |
return '%s' % (conversion_cast) |
@@ -985,14 +994,13 @@ class SVGTearOffIDLTypeInfo(InterfaceIDLTypeInfo): |
auto_dart_scope='true' if auto_dart_scope_setup else 'false' |
return 'Dart%s::returnToDart(args, %s, %s)' % (self._idl_type, |
self.to_conversion_cast( |
- value, |
+ ReturnValueConversionHack(self._idl_type, value, interface_name), |
interface_name, |
attr), |
auto_dart_scope) |
def argument_expression(self, name, interface_name): |
- return name if interface_name.endswith('List') else '%s->propertyReference()' % name |
- |
+ return name |
class TypedListIDLTypeInfo(InterfaceIDLTypeInfo): |
def __init__(self, idl_type, data, interface_name, type_registry): |
@@ -1012,7 +1020,7 @@ class TypedListIDLTypeInfo(InterfaceIDLTypeInfo): |
interface_name, |
attributes) |
- def to_native_info(self, idl_node, interface_name): |
+ def to_native_info(self, idl_node, interface_name, callback_name): |
return '%s.get()', 'RefPtr<%s>' % self._idl_type, 'DartUtilities', 'dartTo%s' % self._idl_type |
@@ -1036,7 +1044,7 @@ class BasicTypedListIDLTypeInfo(InterfaceIDLTypeInfo): |
interface_name, |
attributes) |
- def to_native_info(self, idl_node, interface_name): |
+ def to_native_info(self, idl_node, interface_name, callback_name): |
return '%s.get()', 'RefPtr<%s>' % self._idl_type, 'DartUtilities', 'dartTo%s' % self._idl_type |
@@ -1176,32 +1184,27 @@ _idl_type_registry = monitored.Dict('generator._idl_type_registry', { |
'ArrayBufferView': TypeData(clazz='BasicTypedList'), |
'ArrayBuffer': TypeData(clazz='BasicTypedList'), |
- 'SVGAngle': TypeData(clazz='SVGTearOff'), |
- 'SVGLength': TypeData(clazz='SVGTearOff'), |
- 'SVGLengthList': TypeData(clazz='SVGTearOff', item_type='SVGLength'), |
- 'SVGMatrix': TypeData(clazz='SVGTearOff'), |
- 'SVGNumber': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<SVGNumber>'), |
- 'SVGNumberList': TypeData(clazz='SVGTearOff', item_type='SVGNumber'), |
+ 'SVGAngle': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<SVGAngle>'), |
+ 'SVGLength': TypeData(clazz='SVGTearOff', native_type='SVGLengthTearOff'), |
+ 'SVGLengthList': TypeData(clazz='SVGTearOff', item_type='SVGLength', native_type='SVGLengthListTearOff'), |
+ 'SVGMatrix': TypeData(clazz='SVGTearOff', native_type='SVGMatrixTearOff'), |
+ 'SVGNumber': TypeData(clazz='SVGTearOff', native_type='SVGNumberTearOff'), |
+ 'SVGNumberList': TypeData(clazz='SVGTearOff', item_type='SVGNumber', native_type='SVGNumberListTearOff'), |
'SVGPathSegList': TypeData(clazz='SVGTearOff', 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<SVGRect>'), |
+ 'SVGPoint': TypeData(clazz='SVGTearOff', native_type='SVGPointTearOff'), |
+ 'SVGPointList': TypeData(clazz='SVGTearOff', native_type='SVGPointListTearOff'), |
+ 'SVGPreserveAspectRatio': TypeData(clazz='SVGTearOff', native_type='SVGPreserveAspectRatioTearOff'), |
+ 'SVGRect': TypeData(clazz='SVGTearOff', native_type='SVGRectTearOff'), |
'SVGStringList': TypeData(clazz='SVGTearOff', item_type='DOMString', |
- native_type='SVGStaticListPropertyTearOff<SVGStringList>'), |
- 'SVGTransform': TypeData(clazz='SVGTearOff'), |
+ native_type='SVGStringListTearOff'), |
+ 'SVGTransform': TypeData(clazz='SVGTearOff', native_type="SVGPropertyTearOff<SVGTransform>"), |
'SVGTransformList': TypeData(clazz='SVGTearOff', item_type='SVGTransform', |
native_type='SVGTransformListPropertyTearOff'), |
}) |
_svg_supplemental_includes = [ |
- '"SVGAnimatedPropertyTearOff.h"', |
- '"SVGAnimatedListPropertyTearOff.h"', |
- '"SVGStaticListPropertyTearOff.h"', |
- '"SVGAnimatedListPropertyTearOff.h"', |
- '"SVGTransformListPropertyTearOff.h"', |
- '"SVGPathSegListPropertyTearOff.h"', |
+ '"core/svg/properties/SVGPropertyTraits.h"', |
] |
class TypeRegistry(object): |