OLD | NEW |
1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
2 # | 2 # |
3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
5 # met: | 5 # met: |
6 # | 6 # |
7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 for interface_name, interface_info in interfaces_info.iteritems() | 99 for interface_name, interface_info in interfaces_info.iteritems() |
100 if interface_info['is_callback_interface'])) | 100 if interface_info['is_callback_interface'])) |
101 IdlType.set_implemented_as_interfaces(dict( | 101 IdlType.set_implemented_as_interfaces(dict( |
102 (interface_name, interface_info['implemented_as']) | 102 (interface_name, interface_info['implemented_as']) |
103 for interface_name, interface_info in interfaces_info.iteritems() | 103 for interface_name, interface_info in interfaces_info.iteritems() |
104 if interface_info['implemented_as'])) | 104 if interface_info['implemented_as'])) |
105 dart_types.set_component_dirs(dict( | 105 dart_types.set_component_dirs(dict( |
106 (interface_name, interface_info['component_dir']) | 106 (interface_name, interface_info['component_dir']) |
107 for interface_name, interface_info in interfaces_info.iteritems())) | 107 for interface_name, interface_info in interfaces_info.iteritems())) |
108 | 108 |
109 def generate_code(self, definitions, interface_name, idl_pickle_filename, | 109 def generate_code(self, definitions, interface_name, |
110 only_if_changed): | 110 idl_filename, idl_pickle_filename, only_if_changed): |
111 """Returns .h/.cpp/.dart code as (header_text, cpp_text, dart_text).""" | 111 """Returns .h/.cpp/.dart code as (header_text, cpp_text, dart_text).""" |
112 try: | 112 try: |
113 interface = definitions.interfaces[interface_name] | 113 interface = definitions.interfaces[interface_name] |
114 except KeyError: | 114 except KeyError: |
115 raise Exception('%s not in IDL definitions' % interface_name) | 115 raise Exception('%s not in IDL definitions' % interface_name) |
116 | 116 |
117 # Store other interfaces for introspection | 117 # Store other interfaces for introspection |
118 interfaces.update(definitions.interfaces) | 118 interfaces.update(definitions.interfaces) |
119 | 119 |
120 # Set local type info | 120 # Set local type info |
(...skipping 21 matching lines...) Expand all Loading... |
142 template_contents['code_generator'] = module_pyname | 142 template_contents['code_generator'] = module_pyname |
143 | 143 |
144 # Add includes for interface itself and any dependencies | 144 # Add includes for interface itself and any dependencies |
145 interface_info = self.interfaces_info[interface_name] | 145 interface_info = self.interfaces_info[interface_name] |
146 template_contents['header_includes'].add(interface_info['include_path']) | 146 template_contents['header_includes'].add(interface_info['include_path']) |
147 template_contents['header_includes'] = sorted(template_contents['header_
includes']) | 147 template_contents['header_includes'] = sorted(template_contents['header_
includes']) |
148 includes.update(interface_info.get('dependencies_include_paths', [])) | 148 includes.update(interface_info.get('dependencies_include_paths', [])) |
149 | 149 |
150 template_contents['cpp_includes'] = sorted(includes) | 150 template_contents['cpp_includes'] = sorted(includes) |
151 | 151 |
| 152 # If CustomDart is set, read the custom dart file and add it to our |
| 153 # template parameters. |
| 154 if 'CustomDart' in interface.extended_attributes: |
| 155 dart_filename = os.path.join(os.path.dirname(idl_filename), |
| 156 interface.name + ".dart") |
| 157 with open(dart_filename) as dart_file: |
| 158 custom_dartcode = dart_file.read() |
| 159 template_contents['custom_dartcode'] = custom_dartcode |
| 160 |
152 idl_world = {'interface': None, 'callback': None} | 161 idl_world = {'interface': None, 'callback': None} |
153 | 162 |
154 # Load the pickle file for this IDL. | 163 # Load the pickle file for this IDL. |
155 if os.path.isfile(idl_pickle_filename): | 164 if os.path.isfile(idl_pickle_filename): |
156 with open(idl_pickle_filename) as idl_pickle_file: | 165 with open(idl_pickle_filename) as idl_pickle_file: |
157 idl_global_data = pickle.load(idl_pickle_file) | 166 idl_global_data = pickle.load(idl_pickle_file) |
158 idl_pickle_file.close() | 167 idl_pickle_file.close() |
159 idl_world['interface'] = idl_global_data['interface'] | 168 idl_world['interface'] = idl_global_data['interface'] |
160 idl_world['callback'] = idl_global_data['callback'] | 169 idl_world['callback'] = idl_global_data['callback'] |
161 | 170 |
162 if 'interface_name' in template_contents: | 171 if 'interface_name' in template_contents: |
163 interface_global = {'component_dir': interface_info['component_dir']
, | 172 interface_global = {'component_dir': interface_info['component_dir']
, |
164 'name': template_contents['interface_name'], | 173 'name': template_contents['interface_name'], |
165 'parent_interface': template_contents['parent_in
terface'], | 174 'parent_interface': template_contents['parent_in
terface'], |
166 'is_active_dom_object': template_contents['is_ac
tive_dom_object'], | 175 'is_active_dom_object': template_contents['is_ac
tive_dom_object'], |
167 'has_resolver': template_contents['interface_nam
e'], | 176 'has_resolver': template_contents['interface_nam
e'], |
168 'native_entries': sorted(template_contents['nati
ve_entries'], key=lambda(x): x['blink_entry']), | 177 'native_entries': sorted(template_contents['nati
ve_entries'], key=lambda(x): x['blink_entry']), |
169 } | 178 } |
170 idl_world['interface'] = interface_global | 179 idl_world['interface'] = interface_global |
171 else: | 180 else: |
172 callback_global = {'name': template_contents['cpp_class']} | 181 callback_global = {'name': template_contents['cpp_class']} |
173 idl_world['callback'] = callback_global | 182 idl_world['callback'] = callback_global |
174 | 183 |
175 write_pickle_file(idl_pickle_filename, idl_world, only_if_changed) | 184 write_pickle_file(idl_pickle_filename, idl_world, only_if_changed) |
176 | 185 |
177 # Render Jinja templates | 186 # Render Jinja templates |
178 header_text = header_template.render(template_contents) | 187 header_text = header_template.render(template_contents) |
179 cpp_text = cpp_template.render(template_contents) | 188 cpp_text = cpp_template.render(template_contents) |
180 dart_text = dart_template.render(template_contents) | 189 dart_text = dart_template.render(template_contents) |
| 190 |
181 return header_text, cpp_text, dart_text | 191 return header_text, cpp_text, dart_text |
182 | 192 |
183 def load_global_pickles(self, global_entries): | 193 def load_global_pickles(self, global_entries): |
184 # List of all interfaces and callbacks for global code generation. | 194 # List of all interfaces and callbacks for global code generation. |
185 world = {'interfaces': [], 'callbacks': []} | 195 world = {'interfaces': [], 'callbacks': []} |
186 | 196 |
187 # Load all pickled data for each interface. | 197 # Load all pickled data for each interface. |
188 for (directory, file_list) in global_entries: | 198 for (directory, file_list) in global_entries: |
189 for idl_filename in file_list: | 199 for idl_filename in file_list: |
190 interface_name = idl_filename_to_interface_name(idl_filename) | 200 interface_name = idl_filename_to_interface_name(idl_filename) |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 | 281 |
272 # Create a dummy file as output for the build system, | 282 # Create a dummy file as output for the build system, |
273 # since filenames of individual cache files are unpredictable and opaque | 283 # since filenames of individual cache files are unpredictable and opaque |
274 # (they are hashes of the template path, which varies based on environment) | 284 # (they are hashes of the template path, which varies based on environment) |
275 with open(dummy_filename, 'w') as dummy_file: | 285 with open(dummy_filename, 'w') as dummy_file: |
276 pass # |open| creates or touches the file | 286 pass # |open| creates or touches the file |
277 | 287 |
278 | 288 |
279 if __name__ == '__main__': | 289 if __name__ == '__main__': |
280 sys.exit(main(sys.argv)) | 290 sys.exit(main(sys.argv)) |
OLD | NEW |