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

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

Issue 1720743005: Generation of sdk/lib files from 45 roll (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Merged with TOT 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 unified diff | Download patch
« no previous file with comments | « tools/dom/scripts/dartmetadata.py ('k') | tools/dom/scripts/generator.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 3 # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
4 # for details. All rights reserved. Use of this source code is governed by a 4 # for details. All rights reserved. Use of this source code is governed by a
5 # BSD-style license that can be found in the LICENSE file. 5 # BSD-style license that can be found in the LICENSE file.
6 6
7 """Generates sdk/lib/_blink/dartium/_blink_dartium.dart file.""" 7 """Generates sdk/lib/_blink/dartium/_blink_dartium.dart file."""
8 8
9 import os 9 import os
10 10
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 #(argument_count, arguments, interface_name, arguments) 142 #(argument_count, arguments, interface_name, arguments)
143 CONSTRUCTOR_ARGS = ' constructorCallback_%s_(%s) => new js.JsObject(Blink_JsNat ive_DomException.getProperty(js.context, "%s"), [%s]);\n\n' 143 CONSTRUCTOR_ARGS = ' constructorCallback_%s_(%s) => new js.JsObject(Blink_JsNat ive_DomException.getProperty(js.context, "%s"), [%s]);\n\n'
144 144
145 #(attribute_name, attribute_name) 145 #(attribute_name, attribute_name)
146 ATTRIBUTE_GETTER = ' %s_Getter_(mthis) => Blink_JsNative_DomException.getProper ty(mthis, "%s");\n\n' 146 ATTRIBUTE_GETTER = ' %s_Getter_(mthis) => Blink_JsNative_DomException.getProper ty(mthis, "%s");\n\n'
147 ATTRIBUTE_SETTER = ' %s_Setter_(mthis, __arg_0) => mthis["%s"] = __arg_0;\n\n' 147 ATTRIBUTE_SETTER = ' %s_Setter_(mthis, __arg_0) => mthis["%s"] = __arg_0;\n\n'
148 148
149 #(operation_name, operationName) 149 #(operation_name, operationName)
150 OPERATION_0 = ' %s_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod (mthis, "%s", []);\n\n' 150 OPERATION_0 = ' %s_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod (mthis, "%s", []);\n\n'
151 151
152 # getter, setter, deleter and propertyQuery code
153 OPERATION_1 = ' $%s_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException. callMethod(mthis, "%s", [__arg_0]);\n\n'
154 OPERATION_2 = ' $%s_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomE xception.callMethod(mthis, "%s", [__arg_0, __arg_1]);\n\n'
155 OPERATION_PQ = ' $%s_Callback_1_(mthis, __arg_0) => mthis[__arg_0];\n\n'
156
152 #(operation_name, argument_count, arguments, operation_name, arguments) 157 #(operation_name, argument_count, arguments, operation_name, arguments)
153 ARGUMENT_NUM = "__arg_%s" 158 ARGUMENT_NUM = "__arg_%s"
154 OPERATION_ARGS = ' %s_Callback_%s_(mthis, %s) => Blink_JsNative_DomException.ca llMethod(mthis, "%s", [%s]);\n\n' 159 OPERATION_ARGS = ' %s_Callback_%s_(mthis, %s) => Blink_JsNative_DomException.ca llMethod(mthis, "%s", [%s]);\n\n'
155 160
156 CLASS_DEFINITION_END = """} 161 CLASS_DEFINITION_END = """}
157 162
158 """ 163 """
159 164
160 def ConstantOutputOrder(a, b): 165 def ConstantOutputOrder(a, b):
161 """Canonical output ordering for constants.""" 166 """Canonical output ordering for constants."""
162 return cmp(a.id, b.id) 167 return cmp(a.id, b.id)
163 168
164 def generate_parameter_entries(param_infos): 169 def generate_parameter_entries(param_infos):
165 optional_default_args = 0; 170 optional_default_args = 0;
166 for argument in param_infos: 171 for argument in param_infos:
167 if argument.is_optional: 172 if argument.is_optional:
168 optional_default_args += 1 173 optional_default_args += 1
169 174
170 arg_count = len(param_infos) 175 arg_count = len(param_infos)
171 min_arg_count = arg_count - optional_default_args 176 min_arg_count = arg_count - optional_default_args
172 lb = min_arg_count - 2 if min_arg_count > 2 else 0 177 lb = min_arg_count - 2 if min_arg_count > 2 else 0
173 return (lb, arg_count + 1) 178 return (lb, arg_count + 1)
174 179
180 constructor_renames = {
181 'RTCPeerConnection': 'webkitRTCPeerConnection',
182 }
183
184 def rename_constructor(name):
185 return constructor_renames[name] if name in constructor_renames else name
186
175 def Generate_Blink(output_dir, database, type_registry): 187 def Generate_Blink(output_dir, database, type_registry):
176 blink_filename = os.path.join(output_dir, '_blink_dartium.dart') 188 blink_filename = os.path.join(output_dir, '_blink_dartium.dart')
177 blink_file = open(blink_filename, 'w') 189 blink_file = open(blink_filename, 'w')
178 190
179 blink_file.write(HEADER); 191 blink_file.write(HEADER);
180 192
181 interfaces = database.GetInterfaces() 193 interfaces = database.GetInterfaces()
182 for interface in interfaces: 194 for interface in interfaces:
183 name = interface.id 195 name = interface.id
184 resolver_entry = ' if (s == "%s") return Blink%s.instance;\n' % (name, name ) 196 resolver_entry = ' if (s == "%s") return Blink%s.instance;\n' % (name, name )
185 blink_file.write(resolver_entry) 197 blink_file.write(resolver_entry)
186 198
187 blink_file.write(END_RESOLVER); 199 blink_file.write(END_RESOLVER);
188 200
189 for interface in interfaces: 201 for interface in interfaces:
190 name = interface.id 202 name = interface.id
191 203
192 if interface.parents and len(interface.parents) > 0 and interface.parents[0] .id: 204 if interface.parents and len(interface.parents) > 0 and interface.parents[0] .id:
193 extends = interface.parents[0].id 205 extends = interface.parents[0].id
194 class_def = CLASS_DEFINITION_EXTENDS % (name, extends, name) 206 class_def = CLASS_DEFINITION_EXTENDS % (name, extends, name)
195 else: 207 else:
196 class_def = CLASS_DEFINITION % (name, name) 208 class_def = CLASS_DEFINITION % (name, name)
197 blink_file.write(class_def); 209 blink_file.write(class_def);
198 210
199 analyzed_constructors = AnalyzeConstructor(interface) 211 analyzed_constructors = AnalyzeConstructor(interface)
200 if analyzed_constructors: 212 if analyzed_constructors:
201 _Emit_Blink_Constructors(blink_file, analyzed_constructors) 213 _Emit_Blink_Constructors(blink_file, analyzed_constructors)
202 elif 'Constructor' in interface.ext_attrs: 214 elif 'Constructor' in interface.ext_attrs:
203 # Zero parameter constructor. 215 # Zero parameter constructor.
204 blink_file.write(CONSTRUCTOR_0 % name) 216 blink_file.write(CONSTRUCTOR_0 % rename_constructor(name))
205 217
206 _Process_Attributes(blink_file, interface.attributes) 218 _Process_Attributes(blink_file, interface.attributes)
207 _Process_Operations(blink_file, interface, interface.operations) 219 _Process_Operations(blink_file, interface, interface.operations)
208 220
209 secondary_parents = database.TransitiveSecondaryParents(interface, False) 221 secondary_parents = database.TransitiveSecondaryParents(interface, False)
210 for secondary in secondary_parents: 222 for secondary in secondary_parents:
211 _Process_Attributes(blink_file, secondary.attributes) 223 _Process_Attributes(blink_file, secondary.attributes)
212 _Process_Operations(blink_file, secondary, secondary.operations) 224 _Process_Operations(blink_file, secondary, secondary.operations)
213 225
214 blink_file.write(CLASS_DEFINITION_END); 226 blink_file.write(CLASS_DEFINITION_END);
215 227
216 blink_file.write(BLINK_UTILS) 228 blink_file.write(BLINK_UTILS)
217 229
218 blink_file.close() 230 blink_file.close()
219 231
220 def _Emit_Blink_Constructors(blink_file, analyzed_constructors): 232 def _Emit_Blink_Constructors(blink_file, analyzed_constructors):
221 (arg_min_count, arg_max_count) = generate_parameter_entries(analyzed_construct ors.param_infos) 233 (arg_min_count, arg_max_count) = generate_parameter_entries(analyzed_construct ors.param_infos)
222 name = analyzed_constructors.js_name 234 name = analyzed_constructors.js_name
223 if not(name): 235 if not(name):
224 name = analyzed_constructors.type_name 236 name = analyzed_constructors.type_name
225 237
226 for callback_index in range(arg_min_count, arg_max_count): 238 for callback_index in range(arg_min_count, arg_max_count):
227 if callback_index == 0: 239 if callback_index == 0:
228 blink_file.write(CONSTRUCTOR_0 % (name)) 240 blink_file.write(CONSTRUCTOR_0 % (rename_constructor(name)))
229 else: 241 else:
230 arguments = [] 242 arguments = []
231 for i in range(0, callback_index): 243 for i in range(0, callback_index):
232 arguments.append(ARGUMENT_NUM % i) 244 arguments.append(ARGUMENT_NUM % i)
233 argument_list = ', '.join(arguments) 245 argument_list = ', '.join(arguments)
234 blink_file.write(CONSTRUCTOR_ARGS % (callback_index, argument_list, name, argument_list)) 246 blink_file.write(CONSTRUCTOR_ARGS % (callback_index, argument_list, rename _constructor(name), argument_list))
235 247
236 def _Process_Attributes(blink_file, attributes): 248 def _Process_Attributes(blink_file, attributes):
237 # Emit an interface's attributes and operations. 249 # Emit an interface's attributes and operations.
238 for attribute in sorted(attributes, ConstantOutputOrder): 250 for attribute in sorted(attributes, ConstantOutputOrder):
239 name = attribute.id 251 name = attribute.id
240 if attribute.is_read_only: 252 if attribute.is_read_only:
241 blink_file.write(ATTRIBUTE_GETTER % (name, name)) 253 blink_file.write(ATTRIBUTE_GETTER % (name, name))
242 else: 254 else:
243 blink_file.write(ATTRIBUTE_GETTER % (name, name)) 255 blink_file.write(ATTRIBUTE_GETTER % (name, name))
244 blink_file.write(ATTRIBUTE_SETTER % (name, name)) 256 blink_file.write(ATTRIBUTE_SETTER % (name, name))
(...skipping 12 matching lines...) Expand all
257 _Emit_Blink_Operation(blink_file, interface, analyzeOperations) 269 _Emit_Blink_Operation(blink_file, interface, analyzeOperations)
258 analyzeOperations = [operation] 270 analyzeOperations = [operation]
259 if len(analyzeOperations) > 0: 271 if len(analyzeOperations) > 0:
260 _Emit_Blink_Operation(blink_file, interface, analyzeOperations) 272 _Emit_Blink_Operation(blink_file, interface, analyzeOperations)
261 273
262 def _Emit_Blink_Operation(blink_file, interface, analyzeOperations): 274 def _Emit_Blink_Operation(blink_file, interface, analyzeOperations):
263 analyzed = AnalyzeOperation(interface, analyzeOperations) 275 analyzed = AnalyzeOperation(interface, analyzeOperations)
264 (arg_min_count, arg_max_count) = generate_parameter_entries(analyzed.param_inf os) 276 (arg_min_count, arg_max_count) = generate_parameter_entries(analyzed.param_inf os)
265 name = analyzed.js_name 277 name = analyzed.js_name
266 278
279 operation = analyzeOperations[0]
280 if (name.startswith('__') and \
281 ('getter' in operation.specials or \
282 'setter' in operation.specials or \
283 'deleter' in operation.specials)):
284 if name == '__propertyQuery__':
285 blink_file.write(OPERATION_PQ % (name))
286 else:
287 arg_min_count = arg_max_count
288 if arg_max_count == 2:
289 blink_file.write(OPERATION_1 % (name, name))
290 elif arg_max_count == 3:
291 blink_file.write(OPERATION_2 % (name, name))
292 else:
293 print "FATAL ERROR: _blink emitter operator %s.%s" % (interface.id, name )
294 exit
295
296 return
297
267 for callback_index in range(arg_min_count, arg_max_count): 298 for callback_index in range(arg_min_count, arg_max_count):
268 if callback_index == 0: 299 if callback_index == 0:
269 blink_file.write(OPERATION_0 % (name, name)) 300 blink_file.write(OPERATION_0 % (name, name))
270 else: 301 else:
271 arguments = [] 302 arguments = []
272 for i in range(0, callback_index): 303 for i in range(0, callback_index):
273 arguments.append(ARGUMENT_NUM % i) 304 arguments.append(ARGUMENT_NUM % i)
274 argument_list = ', '.join(arguments) 305 argument_list = ', '.join(arguments)
275 blink_file.write(OPERATION_ARGS % (name, callback_index, argument_list, na me, argument_list)) 306 blink_file.write(OPERATION_ARGS % (name, callback_index, argument_list, na me, argument_list))
OLDNEW
« no previous file with comments | « tools/dom/scripts/dartmetadata.py ('k') | tools/dom/scripts/generator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698