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

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

Issue 1023363002: Make dartj2s do type conversions on constructor arguments (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Line length Created 5 years, 9 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 | Annotate | Revision Log
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 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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698