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

Side by Side Diff: tools/dom/scripts/systemnative.py

Issue 14948011: Retry "Changes for webkit roll 148757-149482" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 """This module provides shared functionality for the systems to generate 6 """This module provides shared functionality for the systems to generate
7 native binding from the IDL database.""" 7 native binding from the IDL database."""
8 8
9 import emitter 9 import emitter
10 import os 10 import os
11 from generator import * 11 from generator import *
12 from htmldartgenerator import * 12 from htmldartgenerator import *
13 from idlnode import IDLArgument 13 from idlnode import IDLArgument
14 from systemhtml import js_support_checks, GetCallbackInfo, HTML_LIBRARY_NAMES 14 from systemhtml import js_support_checks, GetCallbackInfo, HTML_LIBRARY_NAMES
15 15
16 _cpp_type_map = {
17 ('DataTransferItem', 'webkitGetAsEntry'): 'DataTransferItemFileSystem',
18 ('DOMWindow', 'indexedDB'): 'DOMWindowIndexedDatabase',
Anton Muhin 2013/05/17 09:55:05 is this temporary? if yes, please, add a TODO
19 ('DOMWindow', 'speechSynthesis'): 'DOMWindowSpeechSynthesis',
20 ('DOMWindow', 'webkitNotifications'): 'DOMWindowNotifications',
21 ('DOMWindow', 'storage'): 'DOMWindowQuota',
22 ('DOMWindow', 'webkitStorageInfo'): 'DOMWindowQuota',
23 ('DOMWindow', 'openDatabase'): 'DOMWindowWebDatabase',
24 ('DOMWindow', 'webkitRequestFileSystem'): 'DOMWindowFileSystem',
25 ('DOMWindow', 'webkitResolveLocalFileSystemURL'): 'DOMWindowFileSystem',
26 ('HTMLInputElement', 'webkitEntries'): 'HTMLInputElementFileSystem',
27 ('Navigator', 'doNotTrack'): 'NavigatorDoNotTrack',
28 ('Navigator', 'geolocation'): 'NavigatorGeolocation',
29 ('Navigator', 'webkitPersistentStorage'): 'NavigatorStorageQuota',
30 ('Navigator', 'webkitTemporaryStorage'): 'NavigatorStorageQuota',
31 ('Navigator', 'registerProtocolHandler'): 'NavigatorContentUtils',
32 ('Navigator', 'unregisterProtocolHandler'): 'NavigatorContentUtils',
33 ('Navigator', 'webkitGetUserMedia'): 'NavigatorMediaStream',
34 ('Navigator', 'webkitGetGamepads'): 'NavigatorGamepad',
35 }
36
37 _cpp_partial_map = {}
38
39 def _GetCPPPartialNames(interface_name):
40 if not _cpp_partial_map:
41 for (type, member) in _cpp_type_map.keys():
Anton Muhin 2013/05/17 09:55:05 nit: please, no () around type, member
42 if type not in _cpp_partial_map:
43 _cpp_partial_map[type] = set([])
44 _cpp_partial_map[type].add(_cpp_type_map[(type, member)])
Anton Muhin 2013/05/17 09:55:05 _cpp_partial_map.setdefault(type, set()).add(....)
45
46 if interface_name in _cpp_partial_map:
Anton Muhin 2013/05/17 09:55:05 return _cpp_partial_map.get(interface_name, set())
47 return _cpp_partial_map[interface_name]
48 else:
49 return set([])
50
51 def _GetCPPTypeName(interface_name, callback_name):
52 # TODO(vsm): We need to track the original IDL file name in order to recover
53 # the proper CPP name.
54
55 cpp_tuple = (interface_name, callback_name)
Anton Muhin 2013/05/17 09:55:05 return _cpp_type_name.get((interface_name, callbac
56 if cpp_tuple in _cpp_type_map:
57 cpp_type_name = _cpp_type_map[cpp_tuple]
58 else:
59 cpp_type_name = interface_name
60 return cpp_type_name
61
16 class DartiumBackend(HtmlDartGenerator): 62 class DartiumBackend(HtmlDartGenerator):
17 """Generates Dart implementation for one DOM IDL interface.""" 63 """Generates Dart implementation for one DOM IDL interface."""
18 64
19 def __init__(self, interface, cpp_library_emitter, options): 65 def __init__(self, interface, cpp_library_emitter, options):
20 super(DartiumBackend, self).__init__(interface, options) 66 super(DartiumBackend, self).__init__(interface, options)
21 67
22 self._interface = interface 68 self._interface = interface
23 self._cpp_library_emitter = cpp_library_emitter 69 self._cpp_library_emitter = cpp_library_emitter
24 self._database = options.database 70 self._database = options.database
25 self._template_loader = options.templates 71 self._template_loader = options.templates
26 self._type_registry = options.type_registry 72 self._type_registry = options.type_registry
27 self._interface_type_info = self._type_registry.TypeInfo(self._interface.id) 73 self._interface_type_info = self._type_registry.TypeInfo(self._interface.id)
28 self._metadata = options.metadata 74 self._metadata = options.metadata
29 75
30 def ImplementsMergedMembers(self): 76 def ImplementsMergedMembers(self):
31 # We could not add merged functions to implementation class because 77 # We could not add merged functions to implementation class because
32 # underlying c++ object doesn't implement them. Merged functions are 78 # underlying c++ object doesn't implement them. Merged functions are
33 # generated on merged interface implementation instead. 79 # generated on merged interface implementation instead.
34 return False 80 return False
35 81
36 def CustomJSMembers(self): 82 def CustomJSMembers(self):
37 return {} 83 return {}
38 84
39 def GenerateCallback(self, info): 85 def GenerateCallback(self, info):
40 if IsPureInterface(self._interface.id) or IsCustomType(self._interface.id): 86 if IsPureInterface(self._interface.id) or IsCustomType(self._interface.id):
41 return 87 return
42 88
43 cpp_impl_includes = set() 89 cpp_impl_includes = set(['"' + partial + '.h"'
90 for partial in _GetCPPPartialNames(self._interface. id)])
44 cpp_header_handlers_emitter = emitter.Emitter() 91 cpp_header_handlers_emitter = emitter.Emitter()
45 cpp_impl_handlers_emitter = emitter.Emitter() 92 cpp_impl_handlers_emitter = emitter.Emitter()
46 class_name = 'Dart%s' % self._interface.id 93 class_name = 'Dart%s' % self._interface.id
47 for operation in self._interface.operations: 94 for operation in self._interface.operations:
48 parameters = [] 95 parameters = []
49 arguments = [] 96 arguments = []
50 conversion_includes = [] 97 conversion_includes = []
51 for argument in operation.arguments: 98 for argument in operation.arguments:
52 argument_type_info = self._TypeInfo(argument.type.id) 99 argument_type_info = self._TypeInfo(argument.type.id)
53 parameters.append('%s %s' % (argument_type_info.parameter_type(), 100 parameters.append('%s %s' % (argument_type_info.parameter_type(),
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 self._interface.id, 169 self._interface.id,
123 self._renamer.GetLibraryName(self._interface)) 170 self._renamer.GetLibraryName(self._interface))
124 self._cpp_impl_emitter = self._cpp_library_emitter.CreateSourceEmitter(sel f._interface.id) 171 self._cpp_impl_emitter = self._cpp_library_emitter.CreateSourceEmitter(sel f._interface.id)
125 else: 172 else:
126 self._cpp_header_emitter = emitter.Emitter() 173 self._cpp_header_emitter = emitter.Emitter()
127 self._cpp_impl_emitter = emitter.Emitter() 174 self._cpp_impl_emitter = emitter.Emitter()
128 175
129 self._interface_type_info = self._TypeInfo(self._interface.id) 176 self._interface_type_info = self._TypeInfo(self._interface.id)
130 self._members_emitter = members_emitter 177 self._members_emitter = members_emitter
131 self._cpp_declarations_emitter = emitter.Emitter() 178 self._cpp_declarations_emitter = emitter.Emitter()
132 self._cpp_impl_includes = set() 179 self._cpp_impl_includes = set(['"' + partial + '.h"'
180 for partial in _GetCPPPartialNames(self._inte rface.id)])
133 self._cpp_definitions_emitter = emitter.Emitter() 181 self._cpp_definitions_emitter = emitter.Emitter()
134 self._cpp_resolver_emitter = emitter.Emitter() 182 self._cpp_resolver_emitter = emitter.Emitter()
135 183
136 # We need to revisit our treatment of typed arrays, right now 184 # We need to revisit our treatment of typed arrays, right now
137 # it is full of hacks. 185 # it is full of hacks.
138 if self._interface.ext_attrs.get('ConstructorTemplate') == 'TypedArray': 186 if self._interface.ext_attrs.get('ConstructorTemplate') == 'TypedArray':
139 self._cpp_resolver_emitter.Emit( 187 self._cpp_resolver_emitter.Emit(
140 ' if (name == "$(INTERFACE_NAME)_constructor_Callback")\n' 188 ' if (name == "$(INTERFACE_NAME)_constructor_Callback")\n'
141 ' return Dart$(INTERFACE_NAME)Internal::constructorCallback;\n' , 189 ' return Dart$(INTERFACE_NAME)Internal::constructorCallback;\n' ,
142 INTERFACE_NAME=self._interface.id) 190 INTERFACE_NAME=self._interface.id)
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 webcore_function_name = 'getNonEmptyURLAttribute' 398 webcore_function_name = 'getNonEmptyURLAttribute'
351 else: 399 else:
352 webcore_function_name = 'getURLAttribute' 400 webcore_function_name = 'getURLAttribute'
353 elif 'ImplementedAs' in attr.ext_attrs: 401 elif 'ImplementedAs' in attr.ext_attrs:
354 webcore_function_name = attr.ext_attrs['ImplementedAs'] 402 webcore_function_name = attr.ext_attrs['ImplementedAs']
355 else: 403 else:
356 if attr.id == 'operator': 404 if attr.id == 'operator':
357 webcore_function_name = '_operator' 405 webcore_function_name = '_operator'
358 elif attr.id == 'target' and attr.type.id == 'SVGAnimatedString': 406 elif attr.id == 'target' and attr.type.id == 'SVGAnimatedString':
359 webcore_function_name = 'svgTarget' 407 webcore_function_name = 'svgTarget'
408 elif attr.id == 'CSS':
Anton Muhin 2013/05/17 09:55:05 this is a rename, correct? There is this implemen
409 webcore_function_name = 'css'
360 else: 410 else:
361 webcore_function_name = self._ToWebKitName(attr.id) 411 webcore_function_name = self._ToWebKitName(attr.id)
362 if attr.type.id.startswith('SVGAnimated'): 412 if attr.type.id.startswith('SVGAnimated'):
363 webcore_function_name += 'Animated' 413 webcore_function_name += 'Animated'
364 414
365 function_expression = self._GenerateWebCoreFunctionExpression(webcore_functi on_name, attr) 415 function_expression = self._GenerateWebCoreFunctionExpression(webcore_functi on_name, attr)
366 self._GenerateNativeCallback( 416 self._GenerateNativeCallback(
367 cpp_callback_name, 417 cpp_callback_name,
368 True, 418 True,
369 function_expression, 419 function_expression,
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 if raises_dom_exception: 839 if raises_dom_exception:
790 cpp_arguments.append('ec') 840 cpp_arguments.append('ec')
791 invocation_emitter = body_emitter.Emit( 841 invocation_emitter = body_emitter.Emit(
792 ' ExceptionCode ec = 0;\n' 842 ' ExceptionCode ec = 0;\n'
793 '$!INVOCATION' 843 '$!INVOCATION'
794 ' if (UNLIKELY(ec)) {\n' 844 ' if (UNLIKELY(ec)) {\n'
795 ' exception = DartDOMWrapper::exceptionCodeToDartException(ec );\n' 845 ' exception = DartDOMWrapper::exceptionCodeToDartException(ec );\n'
796 ' goto fail;\n' 846 ' goto fail;\n'
797 ' }\n') 847 ' }\n')
798 848
849
850 if needs_receiver:
851 interface_name = self._interface_type_info.native_type()
852 cpp_type_name = _GetCPPTypeName(interface_name,
Anton Muhin 2013/05/17 09:55:05 nit: single line
853 node.id)
854 if interface_name != cpp_type_name:
855 if interface_name == 'DOMWindow' or interface_name == 'Navigator':
856 cpp_arguments.insert(0, 'receiver')
Anton Muhin 2013/05/17 09:55:05 just curious: does the position (1st/last) indeed
857 else:
858 cpp_arguments.append('receiver')
859
799 function_call = '%s(%s)' % (function_expression, ', '.join(cpp_arguments)) 860 function_call = '%s(%s)' % (function_expression, ', '.join(cpp_arguments))
800 if return_type == 'void': 861 if return_type == 'void':
801 invocation_emitter.Emit( 862 invocation_emitter.Emit(
802 ' $FUNCTION_CALL;\n', 863 ' $FUNCTION_CALL;\n',
803 FUNCTION_CALL=function_call) 864 FUNCTION_CALL=function_call)
804 else: 865 else:
805 return_type_info = self._TypeInfo(return_type) 866 return_type_info = self._TypeInfo(return_type)
806 self._cpp_impl_includes |= set(return_type_info.conversion_includes()) 867 self._cpp_impl_includes |= set(return_type_info.conversion_includes())
807 868
808 if return_type_is_nullable: 869 if return_type_is_nullable:
(...skipping 27 matching lines...) Expand all
836 native_binding = '%s_%s_%s' % (self._interface.id, idl_name, native_suffix) 897 native_binding = '%s_%s_%s' % (self._interface.id, idl_name, native_suffix)
837 self._members_emitter.Emit( 898 self._members_emitter.Emit(
838 '\n' 899 '\n'
839 ' $METADATA$DART_DECLARATION native "$NATIVE_BINDING";\n', 900 ' $METADATA$DART_DECLARATION native "$NATIVE_BINDING";\n',
840 DOMINTERFACE=self._interface.id, 901 DOMINTERFACE=self._interface.id,
841 METADATA=metadata, 902 METADATA=metadata,
842 DART_DECLARATION=dart_declaration, 903 DART_DECLARATION=dart_declaration,
843 NATIVE_BINDING=native_binding) 904 NATIVE_BINDING=native_binding)
844 905
845 cpp_callback_name = '%s%s' % (idl_name, native_suffix) 906 cpp_callback_name = '%s%s' % (idl_name, native_suffix)
907
846 self._cpp_resolver_emitter.Emit( 908 self._cpp_resolver_emitter.Emit(
847 ' if (argumentCount == $ARGC && name == "$NATIVE_BINDING")\n' 909 ' if (argumentCount == $ARGC && name == "$NATIVE_BINDING")\n'
848 ' return Dart$(INTERFACE_NAME)Internal::$CPP_CALLBACK_NAME;\n', 910 ' return Dart$(INTERFACE_NAME)Internal::$CPP_CALLBACK_NAME;\n',
849 ARGC=argument_count, 911 ARGC=argument_count,
850 NATIVE_BINDING=native_binding, 912 NATIVE_BINDING=native_binding,
851 INTERFACE_NAME=self._interface.id, 913 INTERFACE_NAME=self._interface.id,
852 CPP_CALLBACK_NAME=cpp_callback_name) 914 CPP_CALLBACK_NAME=cpp_callback_name)
853 915
854 if is_custom: 916 if is_custom:
855 self._cpp_declarations_emitter.Emit( 917 self._cpp_declarations_emitter.Emit(
(...skipping 13 matching lines...) Expand all
869 self._cpp_impl_includes.add('"%s.h"' % namespace) 931 self._cpp_impl_includes.add('"%s.h"' % namespace)
870 932
871 attribute_name = attr.ext_attrs['Reflect'] or attr.id.lower() 933 attribute_name = attr.ext_attrs['Reflect'] or attr.id.lower()
872 return 'WebCore::%s::%sAttr' % (namespace, attribute_name) 934 return 'WebCore::%s::%sAttr' % (namespace, attribute_name)
873 935
874 def _GenerateWebCoreFunctionExpression(self, function_name, idl_node): 936 def _GenerateWebCoreFunctionExpression(self, function_name, idl_node):
875 if 'ImplementedBy' in idl_node.ext_attrs: 937 if 'ImplementedBy' in idl_node.ext_attrs:
876 return '%s::%s' % (idl_node.ext_attrs['ImplementedBy'], function_name) 938 return '%s::%s' % (idl_node.ext_attrs['ImplementedBy'], function_name)
877 if idl_node.is_static: 939 if idl_node.is_static:
878 return '%s::%s' % (self._interface_type_info.idl_type(), function_name) 940 return '%s::%s' % (self._interface_type_info.idl_type(), function_name)
879 return '%s%s' % (self._interface_type_info.receiver(), function_name) 941 interface_name = self._interface_type_info.idl_type()
942 cpp_type_name = _GetCPPTypeName(interface_name, function_name)
Anton Muhin 2013/05/17 09:55:05 overall it looks like _GetCPPTypeName should retur
943 if cpp_type_name == interface_name:
944 return '%s%s' % (self._interface_type_info.receiver(), function_name)
945 else:
946 return '%s::%s' % (cpp_type_name, function_name)
880 947
881 def _IsArgumentOptionalInWebCore(self, operation, argument): 948 def _IsArgumentOptionalInWebCore(self, operation, argument):
882 if not IsOptional(argument): 949 if not IsOptional(argument):
883 return False 950 return False
884 if 'Callback' in argument.ext_attrs: 951 if 'Callback' in argument.ext_attrs:
885 return False 952 return False
886 if operation.id in ['addEventListener', 'removeEventListener'] and argument. id == 'useCapture': 953 if operation.id in ['addEventListener', 'removeEventListener'] and argument. id == 'useCapture':
887 return False 954 return False
888 if 'ForceOptional' in argument.ext_attrs: 955 if 'ForceOptional' in argument.ext_attrs:
889 return False 956 return False
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 ' if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argu mentCount))\n' 1019 ' if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argu mentCount))\n'
953 ' return func;\n', 1020 ' return func;\n',
954 CLASS_NAME=os.path.splitext(os.path.basename(path))[0]) 1021 CLASS_NAME=os.path.splitext(os.path.basename(path))[0])
955 1022
956 def _IsOptionalStringArgumentInInitEventMethod(interface, operation, argument): 1023 def _IsOptionalStringArgumentInInitEventMethod(interface, operation, argument):
957 return ( 1024 return (
958 interface.id.endswith('Event') and 1025 interface.id.endswith('Event') and
959 operation.id.startswith('init') and 1026 operation.id.startswith('init') and
960 argument.ext_attrs.get('Default') == 'Undefined' and 1027 argument.ext_attrs.get('Default') == 'Undefined' and
961 argument.type.id == 'DOMString') 1028 argument.type.id == 'DOMString')
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698