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

Side by Side Diff: bindings/scripts/compute_interfaces_info_overall.py

Issue 959933002: Move IDLs to 39 roll (Closed) Base URL: https://dart.googlecode.com/svn/third_party/WebCore
Patch Set: Created 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright (C) 2013 Google Inc. All rights reserved. 3 # Copyright (C) 2013 Google Inc. All rights reserved.
4 # 4 #
5 # Redistribution and use in source and binary forms, with or without 5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are 6 # modification, are permitted provided that the following conditions are
7 # met: 7 # met:
8 # 8 #
9 # * Redistributions of source code must retain the above copyright 9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer. 10 # notice, this list of conditions and the following disclaimer.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 code changes (for inherited extended attributes). 74 code changes (for inherited extended attributes).
75 75
76 Design doc: http://www.chromium.org/developers/design-documents/idl-build 76 Design doc: http://www.chromium.org/developers/design-documents/idl-build
77 """ 77 """
78 78
79 from collections import defaultdict 79 from collections import defaultdict
80 import cPickle as pickle 80 import cPickle as pickle
81 import optparse 81 import optparse
82 import sys 82 import sys
83 83
84 from utilities import read_pickle_files, write_pickle_file 84 from utilities import idl_filename_to_component, read_pickle_files, write_pickle _file
85 85
86 INHERITED_EXTENDED_ATTRIBUTES = set([ 86 INHERITED_EXTENDED_ATTRIBUTES = set([
87 'ActiveDOMObject', 87 'ActiveDOMObject',
88 'DependentLifetime', 88 'DependentLifetime',
89 'GarbageCollected', 89 'GarbageCollected',
90 'NotScriptWrappable',
90 'WillBeGarbageCollected', 91 'WillBeGarbageCollected',
91 ]) 92 ])
92 93
93 # Main variable (filled in and exported) 94 # Main variable (filled in and exported)
94 interfaces_info = {} 95 interfaces_info = {}
95 96
96 # Auxiliary variables (not visible to future build steps) 97 # Auxiliary variables (not visible to future build steps)
97 partial_interface_files = defaultdict(lambda: { 98 partial_interface_files = defaultdict(lambda: {
98 'full_paths': [], 99 'full_paths': [],
99 'include_paths': [], 100 'include_paths': [],
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 # where we don't generate these files. 153 # where we don't generate these files.
153 ancestor_extended_attributes = inherited_extended_attributes_by_interfac e.get(ancestor, {}) 154 ancestor_extended_attributes = inherited_extended_attributes_by_interfac e.get(ancestor, {})
154 inherited_extended_attributes.update(ancestor_extended_attributes) 155 inherited_extended_attributes.update(ancestor_extended_attributes)
155 156
156 interfaces_info[interface_name].update({ 157 interfaces_info[interface_name].update({
157 'ancestors': ancestors, 158 'ancestors': ancestors,
158 'inherited_extended_attributes': inherited_extended_attributes, 159 'inherited_extended_attributes': inherited_extended_attributes,
159 }) 160 })
160 161
161 162
163 def compute_global_type_info():
164 ancestors = {}
165 dictionaries = {}
166 component_dirs = {}
167 implemented_as_interfaces = {}
168 will_be_garbage_collected_interfaces = set()
169 garbage_collected_interfaces = set()
170 callback_interfaces = set()
171
172 for interface_name, interface_info in interfaces_info.iteritems():
173 component_dirs[interface_name] = idl_filename_to_component(interface_inf o['full_path'])
174
175 if interface_info['ancestors']:
176 ancestors[interface_name] = interface_info['ancestors']
177 if interface_info['is_callback_interface']:
178 callback_interfaces.add(interface_name)
179 if interface_info['is_dictionary']:
180 dictionaries[interface_name] = interface_info['is_dictionary']
181 if interface_info['implemented_as']:
182 implemented_as_interfaces[interface_name] = interface_info['implemen ted_as']
183
184 inherited_extended_attributes = interface_info['inherited_extended_attri butes']
185 if 'WillBeGarbageCollected' in inherited_extended_attributes:
186 will_be_garbage_collected_interfaces.add(interface_name)
187 if 'GarbageCollected' in inherited_extended_attributes:
188 garbage_collected_interfaces.add(interface_name)
189
190 interfaces_info['ancestors'] = ancestors
191 interfaces_info['callback_interfaces'] = callback_interfaces
192 interfaces_info['dictionaries'] = dictionaries
193 interfaces_info['implemented_as_interfaces'] = implemented_as_interfaces
194 interfaces_info['garbage_collected_interfaces'] = garbage_collected_interfac es
195 interfaces_info['will_be_garbage_collected_interfaces'] = will_be_garbage_co llected_interfaces
196 interfaces_info['component_dirs'] = component_dirs
197
198
162 def compute_interfaces_info_overall(info_individuals): 199 def compute_interfaces_info_overall(info_individuals):
163 """Compute information about IDL files. 200 """Compute information about IDL files.
164 201
165 Information is stored in global interfaces_info. 202 Information is stored in global interfaces_info.
166 """ 203 """
167 for info in info_individuals: 204 for info in info_individuals:
168 # No overlap between interface names, so ok to use dict.update 205 # No overlap between interface names, so ok to use dict.update
169 interfaces_info.update(info['interfaces_info']) 206 interfaces_info.update(info['interfaces_info'])
170 # Interfaces in one component may have partial interfaces in 207 # Interfaces in one component may have partial interfaces in
171 # another component. This is ok (not a layering violation), since 208 # another component. This is ok (not a layering violation), since
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 raise IdlInterfaceFileNotFoundError('Could not find the IDL file whe re the following implemented interface is defined: %s' % key_name) 257 raise IdlInterfaceFileNotFoundError('Could not find the IDL file whe re the following implemented interface is defined: %s' % key_name)
221 implemented_interfaces_full_paths = [ 258 implemented_interfaces_full_paths = [
222 implemented_interface_info['full_path'] 259 implemented_interface_info['full_path']
223 for implemented_interface_info in implemented_interfaces_info] 260 for implemented_interface_info in implemented_interfaces_info]
224 # Implemented interfaces don't need includes, as this is handled in 261 # Implemented interfaces don't need includes, as this is handled in
225 # the Blink implementation (they are implemented on |impl| itself, 262 # the Blink implementation (they are implemented on |impl| itself,
226 # hence header is included in implementing class). 263 # hence header is included in implementing class).
227 # However, they are needed for legacy implemented interfaces that 264 # However, they are needed for legacy implemented interfaces that
228 # are being treated as partial interfaces, until we remove these. 265 # are being treated as partial interfaces, until we remove these.
229 # http://crbug.com/360435 266 # http://crbug.com/360435
230 implemented_interfaces_include_paths = [ 267 implemented_interfaces_include_paths = []
231 implemented_interface_info['include_path'] 268 for implemented_interface_info in implemented_interfaces_info:
232 for implemented_interface_info in implemented_interfaces_info 269 if (implemented_interface_info['is_legacy_treat_as_partial_interface '] and
233 if implemented_interface_info['is_legacy_treat_as_partial_interface' ]] 270 implemented_interface_info['include_path']):
271 implemented_interfaces_include_paths.append(implemented_interfac e_info['include_path'])
234 272
235 interface_info.update({ 273 interface_info.update({
236 'dependencies_full_paths': (partial_interfaces_full_paths + 274 'dependencies_full_paths': (partial_interfaces_full_paths +
237 implemented_interfaces_full_paths), 275 implemented_interfaces_full_paths),
238 'dependencies_include_paths': (partial_interfaces_include_paths + 276 'dependencies_include_paths': (partial_interfaces_include_paths +
239 implemented_interfaces_include_paths) , 277 implemented_interfaces_include_paths) ,
240 }) 278 })
241 279
242 # Clean up temporary private information 280 # Clean up temporary private information
243 for interface_info in interfaces_info.itervalues(): 281 for interface_info in interfaces_info.itervalues():
244 del interface_info['extended_attributes'] 282 del interface_info['extended_attributes']
245 del interface_info['is_legacy_treat_as_partial_interface'] 283 del interface_info['is_legacy_treat_as_partial_interface']
246 del interface_info['parent'] 284 del interface_info['parent']
247 285
286 # Compute global_type_info to interfaces_info so that idl_compiler does
287 # not need to always calculate the info in __init__.
288 compute_global_type_info()
289
248 290
249 ################################################################################ 291 ################################################################################
250 292
251 def main(): 293 def main():
252 options, args = parse_options() 294 options, args = parse_options()
253 # args = Input1, Input2, ..., Output 295 # args = Input1, Input2, ..., Output
254 interfaces_info_filename = args.pop() 296 interfaces_info_filename = args.pop()
255 info_individuals = read_pickle_files(args) 297 info_individuals = read_pickle_files(args)
256 298
257 compute_interfaces_info_overall(info_individuals) 299 compute_interfaces_info_overall(info_individuals)
258 write_pickle_file(interfaces_info_filename, 300 write_pickle_file(interfaces_info_filename,
259 interfaces_info, 301 interfaces_info,
260 options.write_file_only_if_changed) 302 options.write_file_only_if_changed)
261 303
262 304
263 if __name__ == '__main__': 305 if __name__ == '__main__':
264 sys.exit(main()) 306 sys.exit(main())
OLDNEW
« no previous file with comments | « bindings/scripts/compute_interfaces_info_individual.py ('k') | bindings/scripts/idl_compiler.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698