| OLD | NEW |
| 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 the system to generate | 6 """This module provides shared functionality for the system to generate |
| 7 dart:html APIs from the IDL database.""" | 7 dart:html APIs from the IDL database.""" |
| 8 | 8 |
| 9 import emitter | 9 import emitter |
| 10 from generator import AnalyzeOperation, ConstantOutputOrder, \ | 10 from generator import AnalyzeOperation, ConstantOutputOrder, \ |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 | 535 |
| 536 metadata = self._metadata.GetFormattedMetadata( | 536 metadata = self._metadata.GetFormattedMetadata( |
| 537 self._library_name, self._interface, self._interface.id, ' ') | 537 self._library_name, self._interface, self._interface.id, ' ') |
| 538 | 538 |
| 539 if not factory_constructor_name: | 539 if not factory_constructor_name: |
| 540 factory_constructor_name = '_create' | 540 factory_constructor_name = '_create' |
| 541 factory_parameters = constructor_info.ParametersAsArgumentList() | 541 factory_parameters = constructor_info.ParametersAsArgumentList() |
| 542 else: | 542 else: |
| 543 factory_parameters = ', '.join(constructor_info.factory_parameters) | 543 factory_parameters = ', '.join(constructor_info.factory_parameters) |
| 544 | 544 |
| 545 def InputType(type_name): |
| 546 conversion = self._InputConversion( |
| 547 type_name, constructor_info.declared_name) |
| 548 if conversion: |
| 549 return conversion.input_type |
| 550 else: |
| 551 return self._NarrowInputType(type_name) if type_name else 'dynamic' |
| 552 |
| 545 if constructor_info.pure_dart_constructor: | 553 if constructor_info.pure_dart_constructor: |
| 546 # TODO(antonm): use common dispatcher generation for this case as well. | 554 # TODO(antonm): use common dispatcher generation for this case as well. |
| 547 has_optional = any(param_info.is_optional | 555 has_optional = any(param_info.is_optional |
| 548 for param_info in constructor_info.param_infos) | 556 for param_info in constructor_info.param_infos) |
| 549 | 557 |
| 550 if not has_optional: | 558 if not has_optional: |
| 551 self._members_emitter.Emit( | 559 self._members_emitter.Emit( |
| 552 '\n $(METADATA)' | 560 '\n $(METADATA)' |
| 553 'factory $CTOR($PARAMS) => ' | 561 'factory $CTOR($PARAMS) => ' |
| 554 '$FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n', | 562 '$FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n', |
| 555 CTOR=constructor_info._ConstructorFullName(self._DartType), | 563 CTOR=constructor_info._ConstructorFullName(self._DartType), |
| 556 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType), | 564 PARAMS=constructor_info.ParametersAsDeclaration(InputType), |
| 557 FACTORY=factory_name, | 565 FACTORY=factory_name, |
| 558 METADATA=metadata, | 566 METADATA=metadata, |
| 559 CTOR_FACTORY_NAME=factory_constructor_name, | 567 CTOR_FACTORY_NAME=factory_constructor_name, |
| 560 FACTORY_PARAMS=factory_parameters) | 568 FACTORY_PARAMS=factory_parameters) |
| 561 else: | 569 else: |
| 562 inits = self._members_emitter.Emit( | 570 inits = self._members_emitter.Emit( |
| 563 '\n $(METADATA)' | 571 '\n $(METADATA)' |
| 564 'factory $CONSTRUCTOR($PARAMS) {\n' | 572 'factory $CONSTRUCTOR($PARAMS) {\n' |
| 565 ' var e = $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' | 573 ' var e = $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' |
| 566 '$!INITS' | 574 '$!INITS' |
| 567 ' return e;\n' | 575 ' return e;\n' |
| 568 ' }\n', | 576 ' }\n', |
| 569 CONSTRUCTOR=constructor_info._ConstructorFullName(self._DartType), | 577 CONSTRUCTOR=constructor_info._ConstructorFullName(self._DartType), |
| 570 METADATA=metadata, | 578 METADATA=metadata, |
| 571 FACTORY=factory_name, | 579 FACTORY=factory_name, |
| 572 CTOR_FACTORY_NAME=factory_constructor_name, | 580 CTOR_FACTORY_NAME=factory_constructor_name, |
| 573 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType), | 581 PARAMS=constructor_info.ParametersAsDeclaration(InputType), |
| 574 FACTORY_PARAMS=factory_parameters) | 582 FACTORY_PARAMS=factory_parameters) |
| 575 | 583 |
| 576 for index, param_info in enumerate(constructor_info.param_infos): | 584 for index, param_info in enumerate(constructor_info.param_infos): |
| 577 if param_info.is_optional: | 585 if param_info.is_optional: |
| 578 inits.Emit(' if ($E != null) e.$E = $E;\n', E=param_info.name) | 586 inits.Emit(' if ($E != null) e.$E = $E;\n', E=param_info.name) |
| 579 else: | 587 else: |
| 580 custom_factory_ctr = self._interface.id in _custom_factories | 588 custom_factory_ctr = self._interface.id in _custom_factories |
| 581 constructor_full_name = constructor_info._ConstructorFullName( | 589 constructor_full_name = constructor_info._ConstructorFullName( |
| 582 self._DartType) | 590 self._DartType) |
| 583 | 591 |
| 584 def GenerateCall( | 592 def GenerateCall( |
| 585 stmts_emitter, call_emitter, | 593 stmts_emitter, call_emitter, |
| 586 version, signature_index, argument_count): | 594 version, signature_index, argument_count): |
| 587 name = emitter.Format('_create_$VERSION', VERSION=version) | 595 name = emitter.Format('_create_$VERSION', VERSION=version) |
| 588 arguments = constructor_info.idl_args[signature_index][:argument_count] | 596 arguments = constructor_info.idl_args[signature_index][:argument_count] |
| 597 args = None |
| 589 if self._dart_use_blink: | 598 if self._dart_use_blink: |
| 590 type_ids = [p.type.id for p in arguments] | 599 type_ids = [p.type.id for p in arguments] |
| 591 base_name, rs = \ | 600 base_name, rs = \ |
| 592 self.DeriveNativeEntry("constructorCallback", 'Constructor', arg
ument_count) | 601 self.DeriveNativeEntry("constructorCallback", 'Constructor', arg
ument_count) |
| 593 qualified_name = \ | 602 qualified_name = \ |
| 594 self.DeriveQualifiedBlinkName(self._interface.id, | 603 self.DeriveQualifiedBlinkName(self._interface.id, |
| 595 base_name) | 604 base_name) |
| 605 args = constructor_info.ParametersAsArgumentList(argument_count) |
| 596 else: | 606 else: |
| 597 qualified_name = emitter.Format( | 607 qualified_name = emitter.Format( |
| 598 '$FACTORY.$NAME', | 608 '$FACTORY.$NAME', |
| 599 FACTORY=factory_name, | 609 FACTORY=factory_name, |
| 600 NAME=name) | 610 NAME=name) |
| 611 (factory_params, converted_arguments) = self._ConvertArgumentTypes( |
| 612 stmts_emitter, arguments, argument_count, constructor_info) |
| 613 args = ', '.join(converted_arguments) |
| 601 call_emitter.Emit('$FACTORY_NAME($FACTORY_PARAMS)', | 614 call_emitter.Emit('$FACTORY_NAME($FACTORY_PARAMS)', |
| 602 FACTORY_NAME=qualified_name, | 615 FACTORY_NAME=qualified_name, |
| 603 FACTORY_PARAMS= \ | 616 FACTORY_PARAMS=args) |
| 604 constructor_info.ParametersAsArgumentList(argument_count)) | |
| 605 self.EmitStaticFactoryOverload(constructor_info, name, arguments) | 617 self.EmitStaticFactoryOverload(constructor_info, name, arguments) |
| 606 | 618 |
| 607 def IsOptional(signature_index, argument): | 619 def IsOptional(signature_index, argument): |
| 608 return self.IsConstructorArgumentOptional(argument) | 620 return self.IsConstructorArgumentOptional(argument) |
| 609 | 621 |
| 610 entry_declaration = emitter.Format( | 622 entry_declaration = emitter.Format( |
| 611 '$(METADATA)$FACTORY_KEYWORD $CTOR($PARAMS)', | 623 '$(METADATA)$FACTORY_KEYWORD $CTOR($PARAMS)', |
| 612 FACTORY_KEYWORD=('factory' if not custom_factory_ctr else | 624 FACTORY_KEYWORD=('factory' if not custom_factory_ctr else |
| 613 'static %s' % constructor_full_name), | 625 'static %s' % constructor_full_name), |
| 614 CTOR=(('' if not custom_factory_ctr else '_factory') | 626 CTOR=(('' if not custom_factory_ctr else '_factory') |
| 615 + constructor_full_name), | 627 + constructor_full_name), |
| 616 METADATA=metadata, | 628 METADATA=metadata, |
| 617 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType)) | 629 PARAMS=constructor_info.ParametersAsDeclaration(InputType)) |
| 618 | 630 |
| 619 overload_emitter = self._members_emitter | 631 overload_emitter = self._members_emitter |
| 620 overload_declaration = entry_declaration | 632 overload_declaration = entry_declaration |
| 621 | 633 |
| 622 self._GenerateOverloadDispatcher( | 634 self._GenerateOverloadDispatcher( |
| 623 constructor_info, | 635 constructor_info, |
| 624 constructor_info.idl_args, | 636 constructor_info.idl_args, |
| 625 False, | 637 False, |
| 626 overload_declaration, | 638 overload_declaration, |
| 627 GenerateCall, | 639 GenerateCall, |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 return self._type_registry.TypeInfo(type_name).narrow_dart_type() | 790 return self._type_registry.TypeInfo(type_name).narrow_dart_type() |
| 779 | 791 |
| 780 def _NarrowInputType(self, type_name): | 792 def _NarrowInputType(self, type_name): |
| 781 return self._NarrowToImplementationType(type_name) | 793 return self._NarrowToImplementationType(type_name) |
| 782 | 794 |
| 783 def _DartType(self, type_name): | 795 def _DartType(self, type_name): |
| 784 return self._type_registry.DartType(type_name) | 796 return self._type_registry.DartType(type_name) |
| 785 | 797 |
| 786 def _TypeInfo(self, type_name): | 798 def _TypeInfo(self, type_name): |
| 787 return self._type_registry.TypeInfo(type_name) | 799 return self._type_registry.TypeInfo(type_name) |
| OLD | NEW |