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

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

Issue 1744613003: Fixed more sdk/lib issues (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/dom/scripts/idlnode.py
diff --git a/tools/dom/scripts/idlnode.py b/tools/dom/scripts/idlnode.py
index b5949a32379a182fae578a643c7bec73de1e0c4e..8121d0129c6ca62afc8406b07246a35e14a50079 100755
--- a/tools/dom/scripts/idlnode.py
+++ b/tools/dom/scripts/idlnode.py
@@ -538,79 +538,80 @@ class IDLType(IDLNode):
def __init__(self, ast):
IDLNode.__init__(self, ast)
- self.nullable = self._has(ast, 'Nullable')
- # Search for a 'ScopedName' or any label ending with 'Type'.
- if isinstance(ast, list):
- self.id = self._find_first(ast, 'ScopedName')
- if not self.id:
- # FIXME: use regexp search instead
- def findType(ast):
- for label, childAst in ast:
- if label.endswith('Type'):
- type = self._label_to_type(label, ast)
- if type != 'sequence':
- return type
- type_ast = self._find_first(childAst, 'Type')
- if not type_ast:
- return type
- return 'sequence<%s>' % findType(type_ast)
- raise Exception('No type declaration found in %s' % ast)
- self.id = findType(ast)
- # TODO(terry): Remove array_modifiers id has [] appended, keep for old
- # parsing.
- array_modifiers = self._find_first(ast, 'ArrayModifiers')
- if array_modifiers:
- self.id += array_modifiers
- elif isinstance(ast, tuple):
- (label, value) = ast
- if label == 'ScopedName':
- self.id = value
- else:
- self.id = self._label_to_type(label, ast)
- elif isinstance(ast, str):
- self.id = ast
- # New blink handling.
- elif ast.__module__ == "idl_types":
- if isinstance(ast, IdlType) or isinstance(ast, IdlArrayOrSequenceType) or \
- isinstance(ast, IdlNullableType):
- if isinstance(ast, IdlNullableType) and ast.inner_type.is_union_type:
- print 'WARNING type %s is union mapped to \'any\'' % self.id
+ if ast:
+ self.nullable = self._has(ast, 'Nullable')
+ # Search for a 'ScopedName' or any label ending with 'Type'.
+ if isinstance(ast, list):
+ self.id = self._find_first(ast, 'ScopedName')
+ if not self.id:
+ # FIXME: use regexp search instead
+ def findType(ast):
+ for label, childAst in ast:
+ if label.endswith('Type'):
+ type = self._label_to_type(label, ast)
+ if type != 'sequence':
+ return type
+ type_ast = self._find_first(childAst, 'Type')
+ if not type_ast:
+ return type
+ return 'sequence<%s>' % findType(type_ast)
+ raise Exception('No type declaration found in %s' % ast)
+ self.id = findType(ast)
+ # TODO(terry): Remove array_modifiers id has [] appended, keep for old
+ # parsing.
+ array_modifiers = self._find_first(ast, 'ArrayModifiers')
+ if array_modifiers:
+ self.id += array_modifiers
+ elif isinstance(ast, tuple):
+ (label, value) = ast
+ if label == 'ScopedName':
+ self.id = value
+ else:
+ self.id = self._label_to_type(label, ast)
+ elif isinstance(ast, str):
+ self.id = ast
+ # New blink handling.
+ elif ast.__module__ == "idl_types":
+ if isinstance(ast, IdlType) or isinstance(ast, IdlArrayOrSequenceType) or \
+ isinstance(ast, IdlNullableType):
+ if isinstance(ast, IdlNullableType) and ast.inner_type.is_union_type:
+ print 'WARNING type %s is union mapped to \'any\'' % self.id
+ # TODO(terry): For union types use any otherwise type is unionType is
+ # not found and is removed during merging.
+ self.id = 'any'
+ else:
+ type_name = str(ast)
+ # TODO(terry): For now don't handle unrestricted types see
+ # https://code.google.com/p/chromium/issues/detail?id=354298
+ type_name = type_name.replace('unrestricted ', '', 1);
+
+ # TODO(terry): Handled USVString as a DOMString.
+ type_name = type_name.replace('USVString', 'DOMString', 1)
+
+ # TODO(terry); WindowTimers setInterval/setTimeout overloads with a
+ # Function type - map to any until the IDL uses union.
+ type_name = type_name.replace('Function', 'any', 1)
+
+ self.id = type_name
+ else:
+ # IdlUnionType
+ if ast.is_union_type:
+ print 'WARNING type %s is union mapped to \'any\'' % self.id
# TODO(terry): For union types use any otherwise type is unionType is
# not found and is removed during merging.
- self.id = 'any'
- else:
- type_name = str(ast)
- # TODO(terry): For now don't handle unrestricted types see
- # https://code.google.com/p/chromium/issues/detail?id=354298
- type_name = type_name.replace('unrestricted ', '', 1);
-
- # TODO(terry): Handled USVString as a DOMString.
- type_name = type_name.replace('USVString', 'DOMString', 1)
-
- # TODO(terry); WindowTimers setInterval/setTimeout overloads with a
- # Function type - map to any until the IDL uses union.
- type_name = type_name.replace('Function', 'any', 1)
-
- self.id = type_name
- else:
- # IdlUnionType
- if ast.is_union_type:
- print 'WARNING type %s is union mapped to \'any\'' % self.id
- # TODO(terry): For union types use any otherwise type is unionType is
- # not found and is removed during merging.
- self.id = 'any'
- # TODO(terry): Any union type e.g. 'type1 or type2 or type2',
- # 'typedef (Type1 or Type2) UnionType'
- # Is a problem we need to extend IDLType and IDLTypeDef to handle more
- # than one type.
- #
- # Also for typedef's e.g.,
- # typedef (Type1 or Type2) UnionType
- # should consider synthesizing a new interface (e.g., UnionType) that's
- # both Type1 and Type2.
- if not self.id:
- print '>>>> __module__ %s' % ast.__module__
- raise SyntaxError('Could not parse type %s' % (ast))
+ self.id = 'any'
+ # TODO(terry): Any union type e.g. 'type1 or type2 or type2',
+ # 'typedef (Type1 or Type2) UnionType'
+ # Is a problem we need to extend IDLType and IDLTypeDef to handle more
+ # than one type.
+ #
+ # Also for typedef's e.g.,
+ # typedef (Type1 or Type2) UnionType
+ # should consider synthesizing a new interface (e.g., UnionType) that's
+ # both Type1 and Type2.
+ if not self.id:
+ print '>>>> __module__ %s' % ast.__module__
+ raise SyntaxError('Could not parse type %s' % (ast))
def _label_to_type(self, label, ast):
if label == 'LongLongType':
« no previous file with comments | « tools/dom/scripts/generate_blink_file.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698