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

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

Issue 1682783002: Dartium 45 roll (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: removed Created 4 years, 10 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/scripts/generate_blink_file.py ('k') | tools/dom/scripts/go.sh » ('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 6d235b816f53147a6f71e835d90876aa976dcb45..bb26d6ffc4d07f306831403c685e34dae17f5584 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -457,7 +457,14 @@ class OperationInfo(object):
parameter declaration.
"""
def FormatParam(param):
- dart_type = rename_type(param.type_id) if param.type_id else 'dynamic'
+ # Is the type a typedef if so it's a union so it's dynamic.
+ # TODO(terry): This may have to change for dart2js for code shaking the
+ # return types (unions) needs to be emitted with @create
+ # annotations and/or with JS('type1|type2',...)
+ if hasattr(rename_type, 'im_self') and rename_type.im_self._database.HasTypeDef(param.type_id):
+ dart_type = 'dynamic'
+ else:
+ dart_type = rename_type(param.type_id) if param.type_id else 'dynamic'
return (TypeOrNothing(dart_type, param.type_id), param.name)
required = []
optional = []
@@ -1367,6 +1374,9 @@ class TypeRegistry(object):
def HasInterface(self, type_name):
return self._database.HasInterface(type_name)
+ def HasTypeDef(self, type_def_name):
+ return self._database.HasTypeDef(type_def_name)
+
def TypeInfo(self, type_name):
if not type_name in self._cache:
self._cache[type_name] = self._TypeInfo(type_name)
@@ -1379,7 +1389,11 @@ class TypeRegistry(object):
match = re.match(r'(?:sequence<([\w ]+)>|(\w+)\[\])$', type_name)
if match:
type_data = TypeData('Sequence')
- item_info = self.TypeInfo(match.group(1) or match.group(2))
+ if self.HasTypeDef(match.group(1) or match.group(2)):
+ # It's a typedef (union)
+ item_info = self.TypeInfo('any')
+ else:
+ item_info = self.TypeInfo(match.group(1) or match.group(2))
# TODO(vsm): Generalize this code.
if 'SourceInfo' in type_name:
type_data.native_type = 'const Vector<RefPtr<SourceInfo> >& '
@@ -1393,8 +1407,23 @@ class TypeRegistry(object):
if self._database.HasInterface(type_name):
interface = self._database.GetInterface(type_name)
- else:
+ elif self._database.HasDictionary(type_name):
interface = self._database.GetDictionary(type_name)
+ elif type_name.startswith('sequence<('):
+ if type_name.find(' or ') != -1:
+ # Union type of sequence is an any type (no type).
+ type_data = TypeData('Sequence')
+ item_info = self.TypeInfo('any')
+ return SequenceIDLTypeInfo(type_name, type_data, item_info)
+ elif type_name.startswith('sequence<sequence<'):
+ # TODO(terry): Cleanup up list of list, etc.
+ type_data = TypeData('Sequence')
+ item_info = self.TypeInfo('any')
+ return SequenceIDLTypeInfo(type_name, type_data, item_info)
+ elif self.HasTypeDef(type_name):
+ # It's a typedef (implied union)
+ return self.TypeInfo('any')
+
if 'Callback' in interface.ext_attrs:
return CallbackIDLTypeInfo(type_name, TypeData('Callback',
self._renamer.DartifyTypeName(type_name)))
« no previous file with comments | « tools/dom/scripts/generate_blink_file.py ('k') | tools/dom/scripts/go.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698