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

Unified Diff: tools/dom/scripts/generator.py

Issue 204033002: Fixes for Chrome 34 merge (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 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 | « tools/dom/idl/dart/dart.idl ('k') | tools/dom/scripts/htmlrenamer.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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):
« no previous file with comments | « tools/dom/idl/dart/dart.idl ('k') | tools/dom/scripts/htmlrenamer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698