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

Side by Side Diff: sdk/lib/html/scripts/generator.py

Issue 11412042: "Reverting 15020" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month 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
« no previous file with comments | « sdk/lib/html/dartium/html_dartium.dart ('k') | sdk/lib/html/scripts/htmldartgenerator.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 # 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 systems to generate 6 """This module provides shared functionality for systems to generate
7 Dart APIs from the IDL database.""" 7 Dart APIs from the IDL database."""
8 8
9 import copy 9 import copy
10 import re 10 import re
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 class OperationInfo(object): 298 class OperationInfo(object):
299 """Holder for various derived information from a set of overloaded operations. 299 """Holder for various derived information from a set of overloaded operations.
300 300
301 Attributes: 301 Attributes:
302 overloads: A list of IDL operation overloads with the same name. 302 overloads: A list of IDL operation overloads with the same name.
303 name: A string, the simple name of the operation. 303 name: A string, the simple name of the operation.
304 constructor_name: A string, the name of the constructor iff the constructor 304 constructor_name: A string, the name of the constructor iff the constructor
305 is named, e.g. 'fromList' in Int8Array.fromList(list). 305 is named, e.g. 'fromList' in Int8Array.fromList(list).
306 type_name: A string, the name of the return type of the operation. 306 type_name: A string, the name of the return type of the operation.
307 param_infos: A list of ParamInfo. 307 param_infos: A list of ParamInfo.
308 factory_parameters: A list of parameters used for custom designed Factory
309 calls.
310 """ 308 """
311
312 def __init__(self):
313 self.factory_parameters = None
314 309
315 def ParametersDeclaration(self, rename_type, force_optional=False): 310 def ParametersDeclaration(self, rename_type, force_optional=False):
316 def FormatParam(param): 311 def FormatParam(param):
317 dart_type = rename_type(param.type_id) if param.type_id else 'dynamic' 312 dart_type = rename_type(param.type_id) if param.type_id else 'dynamic'
318 return '%s%s' % (TypeOrNothing(dart_type, param.type_id), param.name) 313 return '%s%s' % (TypeOrNothing(dart_type, param.type_id), param.name)
319 314
320 required = [] 315 required = []
321 optional = [] 316 optional = []
322 for param_info in self.param_infos: 317 for param_info in self.param_infos:
323 if param_info.is_optional: 318 if param_info.is_optional:
(...skipping 30 matching lines...) Expand all
354 349
355 def _ConstructorFullName(self, rename_type): 350 def _ConstructorFullName(self, rename_type):
356 if self.constructor_name: 351 if self.constructor_name:
357 return rename_type(self.type_name) + '.' + self.constructor_name 352 return rename_type(self.type_name) + '.' + self.constructor_name
358 else: 353 else:
359 return rename_type(self.type_name) 354 return rename_type(self.type_name)
360 355
361 def ConstructorFactoryName(self, rename_type): 356 def ConstructorFactoryName(self, rename_type):
362 return 'create' + self._ConstructorFullName(rename_type).replace('.', '_') 357 return 'create' + self._ConstructorFullName(rename_type).replace('.', '_')
363 358
364 def GenerateFactoryInvocation(self, rename_type, emitter, factory_name, 359 def GenerateFactoryInvocation(self, rename_type, emitter, factory_provider):
365 factory_constructor_name=None, factory_parameters=None):
366 has_optional = any(param_info.is_optional 360 has_optional = any(param_info.is_optional
367 for param_info in self.param_infos) 361 for param_info in self.param_infos)
368 362
369 if not factory_constructor_name: 363 factory_name = self.ConstructorFactoryName(rename_type)
370 factory_constructor_name = self.ConstructorFactoryName(rename_type)
371 factory_parameters = self.ParametersAsArgumentList()
372 has_factory_provider = True
373 else:
374 factory_parameters = ', '.join(factory_parameters)
375 has_factory_provider = False
376 if not has_optional: 364 if not has_optional:
377 emitter.Emit( 365 emitter.Emit(
378 '\n' 366 '\n'
379 ' factory $CTOR($PARAMS) => ' 367 ' factory $CTOR($PARAMS) => '
380 '$FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n', 368 '$FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n',
381 CTOR=self._ConstructorFullName(rename_type), 369 CTOR=self._ConstructorFullName(rename_type),
382 PARAMS=self.ParametersDeclaration(rename_type), 370 PARAMS=self.ParametersDeclaration(rename_type),
383 FACTORY=factory_name, 371 FACTORY=factory_provider,
384 CTOR_FACTORY_NAME=factory_constructor_name, 372 CTOR_FACTORY_NAME=factory_name,
385 FACTORY_PARAMS=factory_parameters) 373 FACTORY_PARAMS=self.ParametersAsArgumentList())
386 return 374 return
387 if has_factory_provider:
388 self._GenerateFactoryOptParams(rename_type, emitter, factory_name)
389 else:
390 self._GenerateFactoryOptParamsWithoutFactoryProvider(rename_type, emitter,
391 factory_name, factory_constructor_name, factory_parameters)
392 375
393 def _GenerateFactoryOptParams(self, rename_type, emitter, factory_provider):
394 """Helper method for creating generic factory constructors with optional
395 parameters that use factory providers."""
396 dispatcher_emitter = emitter.Emit( 376 dispatcher_emitter = emitter.Emit(
397 '\n' 377 '\n'
398 ' factory $CTOR($PARAMS) {\n' 378 ' factory $CTOR($PARAMS) {\n'
399 '$!DISPATCHER' 379 '$!DISPATCHER'
400 ' return $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' 380 ' return $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n'
401 ' }\n', 381 ' }\n',
402 CTOR=self._ConstructorFullName(rename_type), 382 CTOR=self._ConstructorFullName(rename_type),
403 PARAMS=self.ParametersDeclaration(rename_type), 383 PARAMS=self.ParametersDeclaration(rename_type),
404 FACTORY=factory_provider, 384 FACTORY=factory_provider,
405 CTOR_FACTORY_NAME=self.ConstructorFactoryName(rename_type), 385 CTOR_FACTORY_NAME=factory_name,
406 FACTORY_PARAMS=self.ParametersAsArgumentList()) 386 FACTORY_PARAMS=self.ParametersAsArgumentList())
407 387
408 # If we have optional parameters, check to see if they are set 388 # If we have optional parameters, check to see if they are set
409 # and call the appropriate factory method. 389 # and call the appropriate factory method.
410 def EmitOptionalParameterInvocation(index): 390 def EmitOptionalParameterInvocation(index):
411 dispatcher_emitter.Emit( 391 dispatcher_emitter.Emit(
412 ' if (!?$OPT_PARAM_NAME) {\n' 392 ' if (!?$OPT_PARAM_NAME) {\n'
413 ' return $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' 393 ' return $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n'
414 ' }\n', 394 ' }\n',
415 OPT_PARAM_NAME=self.param_infos[index].name, 395 OPT_PARAM_NAME=self.param_infos[index].name,
416 FACTORY=factory_provider, 396 FACTORY=factory_provider,
417 CTOR_FACTORY_NAME=self.ConstructorFactoryName(rename_type), 397 CTOR_FACTORY_NAME=factory_name,
418 FACTORY_PARAMS=self.ParametersAsArgumentList(index)) 398 FACTORY_PARAMS=self.ParametersAsArgumentList(index))
419 399
420 for index, param_info in enumerate(self.param_infos): 400 for index, param_info in enumerate(self.param_infos):
421 if param_info.is_optional: 401 if param_info.is_optional:
422 EmitOptionalParameterInvocation(index) 402 EmitOptionalParameterInvocation(index)
423
424 def _GenerateFactoryOptParamsWithoutFactoryProvider(self, rename_type,
425 emitter, factory_name, factory_constructor_name, factory_parameters):
426 """Helper method for creating a factory constructor with optional
427 parameters that does not call a factory provider, it simply creates the
428 object itself. This is currently used for SVGElements and HTMLElements."""
429 inits = emitter.Emit(
430 '\n'
431 ' factory $CONSTRUCTOR($PARAMS) {\n'
432 ' var e = $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n'
433 '$!INITS'
434 ' return e;\n'
435 ' }\n',
436 CONSTRUCTOR=self._ConstructorFullName(rename_type),
437 FACTORY=factory_name,
438 CTOR_FACTORY_NAME=factory_constructor_name,
439 PARAMS=self.ParametersDeclaration(rename_type, force_optional=True),
440 FACTORY_PARAMS=factory_parameters)
441 for index, param_info in enumerate(self.param_infos):
442 if param_info.is_optional:
443 inits.Emit(' if (!?$E) e.$E = $E;\n',
444 E=self.param_infos[index].name)
445 403
446 def ConstantOutputOrder(a, b): 404 def ConstantOutputOrder(a, b):
447 """Canonical output ordering for constants.""" 405 """Canonical output ordering for constants."""
448 if a.id < b.id: return -1 406 if a.id < b.id: return -1
449 if a.id > b.id: return 1 407 if a.id > b.id: return 1
450 return 0 408 return 0
451 409
452 410
453 def _FormatNameList(names): 411 def _FormatNameList(names):
454 """Returns JavaScript array literal expression with one name per line.""" 412 """Returns JavaScript array literal expression with one name per line."""
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 else: 1082 else:
1125 dart_interface_name = type_name 1083 dart_interface_name = type_name
1126 return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name, 1084 return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name,
1127 self) 1085 self)
1128 1086
1129 if type_data.clazz == 'SVGTearOff': 1087 if type_data.clazz == 'SVGTearOff':
1130 return SVGTearOffIDLTypeInfo(type_name, type_data, self) 1088 return SVGTearOffIDLTypeInfo(type_name, type_data, self)
1131 1089
1132 class_name = '%sIDLTypeInfo' % type_data.clazz 1090 class_name = '%sIDLTypeInfo' % type_data.clazz
1133 return globals()[class_name](type_name, type_data) 1091 return globals()[class_name](type_name, type_data)
OLDNEW
« no previous file with comments | « sdk/lib/html/dartium/html_dartium.dart ('k') | sdk/lib/html/scripts/htmldartgenerator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698