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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 | 64 |
65 | 65 |
66 class Writer(in_generator.Writer): | 66 class Writer(in_generator.Writer): |
67 def __init__(self, in_file_path): | 67 def __init__(self, in_file_path): |
68 super(Writer, self).__init__(in_file_path) | 68 super(Writer, self).__init__(in_file_path) |
69 self.namespace = self.in_file.parameters['namespace'].strip('"') | 69 self.namespace = self.in_file.parameters['namespace'].strip('"') |
70 self._entries_by_conditional = {} | 70 self._entries_by_conditional = {} |
71 self._unconditional_entries = [] | 71 self._unconditional_entries = [] |
72 self._validate_entries() | 72 self._validate_entries() |
73 self._sort_entries_by_conditional() | 73 self._sort_entries_by_conditional() |
74 self._outputs = {(self.namespace + "Headers.h"): self.generate_headers_h
eader, | 74 self._outputs = {(self.namespace + "Headers.h"): self.generate_v8_header
s_header, |
| 75 ('Dart' + self.namespace + "Headers.h"): self.generate_
dart_headers_header, |
75 (self.namespace + "Interfaces.h"): self.generate_interf
aces_header, | 76 (self.namespace + "Interfaces.h"): self.generate_interf
aces_header, |
76 } | 77 } |
77 | 78 |
78 def _validate_entries(self): | 79 def _validate_entries(self): |
79 # If there is more than one entry with the same script name, only the fi
rst one will ever | 80 # If there is more than one entry with the same script name, only the fi
rst one will ever |
80 # be hit in practice, and so we'll silently ignore any properties reques
ted for the second | 81 # be hit in practice, and so we'll silently ignore any properties reques
ted for the second |
81 # (like RuntimeEnabled - see crbug.com/332588). | 82 # (like RuntimeEnabled - see crbug.com/332588). |
82 entries_by_script_name = dict() | 83 entries_by_script_name = dict() |
83 for entry in self.in_file.name_dictionaries: | 84 for entry in self.in_file.name_dictionaries: |
84 script_name = name_utilities.script_name(entry) | 85 script_name = name_utilities.script_name(entry) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 def _headers_header_include_path(self, entry): | 117 def _headers_header_include_path(self, entry): |
117 if entry['ImplementedAs']: | 118 if entry['ImplementedAs']: |
118 path = os.path.dirname(entry['name']) | 119 path = os.path.dirname(entry['name']) |
119 if len(path): | 120 if len(path): |
120 path += '/' | 121 path += '/' |
121 path += entry['ImplementedAs'] | 122 path += entry['ImplementedAs'] |
122 else: | 123 else: |
123 path = entry['name'] | 124 path = entry['name'] |
124 return path + '.h' | 125 return path + '.h' |
125 | 126 |
126 def _headers_header_includes(self, entries): | 127 def _headers_header_includes(self, entries, engine): |
127 includes = dict() | 128 includes = dict() |
128 for entry in entries: | 129 for entry in entries: |
129 cpp_name = name_utilities.cpp_name(entry) | 130 cpp_name = name_utilities.cpp_name(entry) |
130 # Avoid duplicate includes. | 131 # Avoid duplicate includes. |
131 if cpp_name in includes: | 132 if cpp_name in includes: |
132 continue | 133 continue |
133 include = '#include "%(path)s"\n#include "V8%(script_name)s.h"' % { | 134 include = '#include "%(path)s"\n#include "%(engine)s%(script_name)s.
h"' % { |
134 'path': self._headers_header_include_path(entry), | 135 'path': self._headers_header_include_path(entry), |
135 'script_name': name_utilities.script_name(entry), | 136 'script_name': name_utilities.script_name(entry), |
| 137 'engine': engine, |
136 } | 138 } |
137 includes[cpp_name] = self.wrap_with_condition(include, entry['Condit
ional']) | 139 includes[cpp_name] = self.wrap_with_condition(include, entry['Condit
ional']) |
138 return includes.values() | 140 return includes.values() |
139 | 141 |
140 def generate_headers_header(self): | 142 def _generate_headers_header(self, engine): |
141 return HEADER_TEMPLATE % { | 143 return HEADER_TEMPLATE % { |
142 'license': license.license_for_generated_cpp(), | 144 'license': license.license_for_generated_cpp(), |
143 'namespace': self.namespace, | 145 'namespace': self.namespace, |
144 'includes': '\n'.join(self._headers_header_includes(self.in_file.nam
e_dictionaries)), | 146 'includes': '\n'.join(self._headers_header_includes(self.in_file.nam
e_dictionaries, engine)), |
145 } | 147 } |
146 | 148 |
| 149 def generate_dart_headers_header(self): |
| 150 return self._generate_headers_header('Dart') |
| 151 |
| 152 def generate_v8_headers_header(self): |
| 153 return self._generate_headers_header('V8') |
| 154 |
147 def _declare_one_conditional_macro(self, conditional, entries): | 155 def _declare_one_conditional_macro(self, conditional, entries): |
148 macro_name = '%(macro_style_name)s_INTERFACES_FOR_EACH_%(conditional)s'
% { | 156 macro_name = '%(macro_style_name)s_INTERFACES_FOR_EACH_%(conditional)s'
% { |
149 'macro_style_name': name_utilities.to_macro_style(self.namespace), | 157 'macro_style_name': name_utilities.to_macro_style(self.namespace), |
150 'conditional': conditional, | 158 'conditional': conditional, |
151 } | 159 } |
152 return self.wrap_with_condition("""#define %(macro_name)s(macro) \\ | 160 return self.wrap_with_condition("""#define %(macro_name)s(macro) \\ |
153 %(declarations)s | 161 %(declarations)s |
154 | 162 |
155 #else | 163 #else |
156 #define %(macro_name)s(macro)""" % { | 164 #define %(macro_name)s(macro)""" % { |
(...skipping 19 matching lines...) Expand all Loading... |
176 | 184 |
177 def generate_interfaces_header(self): | 185 def generate_interfaces_header(self): |
178 return INTERFACES_HEADER_TEMPLATE % { | 186 return INTERFACES_HEADER_TEMPLATE % { |
179 'license': license.license_for_generated_cpp(), | 187 'license': license.license_for_generated_cpp(), |
180 'namespace': self.namespace, | 188 'namespace': self.namespace, |
181 'macro_style_name': name_utilities.to_macro_style(self.namespace), | 189 'macro_style_name': name_utilities.to_macro_style(self.namespace), |
182 'declare_conditional_macros': self._declare_conditional_macros(), | 190 'declare_conditional_macros': self._declare_conditional_macros(), |
183 'unconditional_macros': '\n'.join(sorted(set(map(self._unconditional
_macro, self._unconditional_entries)))), | 191 'unconditional_macros': '\n'.join(sorted(set(map(self._unconditional
_macro, self._unconditional_entries)))), |
184 'conditional_macros': '\n'.join(map(self._conditional_macros, self._
entries_by_conditional.keys())), | 192 'conditional_macros': '\n'.join(map(self._conditional_macros, self._
entries_by_conditional.keys())), |
185 } | 193 } |
OLD | NEW |