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

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

Issue 896723009: Annotate dart:html constructor expressions with precise non-nullable types. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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 | 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 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 if constructor_info.pure_dart_constructor: 545 if constructor_info.pure_dart_constructor:
546 # TODO(antonm): use common dispatcher generation for this case as well. 546 # TODO(antonm): use common dispatcher generation for this case as well.
547 has_optional = any(param_info.is_optional 547 has_optional = any(param_info.is_optional
548 for param_info in constructor_info.param_infos) 548 for param_info in constructor_info.param_infos)
549 549
550 factory_expression = self.FactoryConstructorExpression(constructor_info,
551 factory_name, factory_constructor_name, factory_parameters)
552
550 if not has_optional: 553 if not has_optional:
551 self._members_emitter.Emit( 554 self._members_emitter.Emit(
552 '\n $(METADATA)' 555 '\n $(METADATA)'
553 'factory $CTOR($PARAMS) => ' 556 'factory $CTOR($PARAMS) => $FACTORY_EXPRESSION;\n',
554 '$FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n',
555 CTOR=constructor_info._ConstructorFullName(self._DartType), 557 CTOR=constructor_info._ConstructorFullName(self._DartType),
556 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType), 558 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType),
557 FACTORY=factory_name, 559 FACTORY_EXPRESSION=factory_expression,
558 METADATA=metadata, 560 METADATA=metadata)
559 CTOR_FACTORY_NAME=factory_constructor_name,
560 FACTORY_PARAMS=factory_parameters)
561 else: 561 else:
562 inits = self._members_emitter.Emit( 562 inits = self._members_emitter.Emit(
563 '\n $(METADATA)' 563 '\n $(METADATA)'
564 'factory $CONSTRUCTOR($PARAMS) {\n' 564 'factory $CONSTRUCTOR($PARAMS) {\n'
565 ' var e = $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' 565 ' var e = $FACTORY_EXPRESSION;\n'
566 '$!INITS' 566 '$!INITS'
567 ' return e;\n' 567 ' return e;\n'
568 ' }\n', 568 ' }\n',
569 CONSTRUCTOR=constructor_info._ConstructorFullName(self._DartType), 569 CONSTRUCTOR=constructor_info._ConstructorFullName(self._DartType),
570 METADATA=metadata, 570 METADATA=metadata,
571 FACTORY=factory_name, 571 FACTORY_EXPRESSION=factory_expression,
572 CTOR_FACTORY_NAME=factory_constructor_name, 572 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType))
573 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType),
574 FACTORY_PARAMS=factory_parameters)
575 573
576 for index, param_info in enumerate(constructor_info.param_infos): 574 for index, param_info in enumerate(constructor_info.param_infos):
577 if param_info.is_optional: 575 if param_info.is_optional:
578 inits.Emit(' if ($E != null) e.$E = $E;\n', E=param_info.name) 576 inits.Emit(' if ($E != null) e.$E = $E;\n', E=param_info.name)
579 else: 577 else:
580 custom_factory_ctr = self._interface.id in _custom_factories 578 custom_factory_ctr = self._interface.id in _custom_factories
581 constructor_full_name = constructor_info._ConstructorFullName( 579 constructor_full_name = constructor_info._ConstructorFullName(
582 self._DartType) 580 self._DartType)
583 581
584 def GenerateCall( 582 def GenerateCall(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 619
622 self._GenerateOverloadDispatcher( 620 self._GenerateOverloadDispatcher(
623 constructor_info, 621 constructor_info,
624 constructor_info.idl_args, 622 constructor_info.idl_args,
625 False, 623 False,
626 overload_declaration, 624 overload_declaration,
627 GenerateCall, 625 GenerateCall,
628 IsOptional, 626 IsOptional,
629 overload_emitter) 627 overload_emitter)
630 628
629 def FactoryConstructorExpression(self, constructor_info,
630 factory_name, factory_constructor_name, factory_parameters):
631 return emitter.Format(
632 '$FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS)',
633 FACTORY=factory_name,
634 CTOR_FACTORY_NAME=factory_constructor_name,
635 FACTORY_PARAMS=factory_parameters);
636
631 def _AddFutureifiedOperation(self, info, html_name): 637 def _AddFutureifiedOperation(self, info, html_name):
632 """Given a API function that uses callbacks, convert it to using Futures. 638 """Given a API function that uses callbacks, convert it to using Futures.
633 639
634 This conversion assumes the success callback is always provided before the 640 This conversion assumes the success callback is always provided before the
635 error callback (and so far in the DOM API, this is the case).""" 641 error callback (and so far in the DOM API, this is the case)."""
636 callback_info = GetCallbackInfo( 642 callback_info = GetCallbackInfo(
637 self._database.GetInterface(info.callback_args[0].type_id)) 643 self._database.GetInterface(info.callback_args[0].type_id))
638 644
639 param_list = info.ParametersAsArgumentList() 645 param_list = info.ParametersAsArgumentList()
640 metadata = '' 646 metadata = ''
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 return self._type_registry.TypeInfo(type_name).narrow_dart_type() 784 return self._type_registry.TypeInfo(type_name).narrow_dart_type()
779 785
780 def _NarrowInputType(self, type_name): 786 def _NarrowInputType(self, type_name):
781 return self._NarrowToImplementationType(type_name) 787 return self._NarrowToImplementationType(type_name)
782 788
783 def _DartType(self, type_name): 789 def _DartType(self, type_name):
784 return self._type_registry.DartType(type_name) 790 return self._type_registry.DartType(type_name)
785 791
786 def _TypeInfo(self, type_name): 792 def _TypeInfo(self, type_name):
787 return self._type_registry.TypeInfo(type_name) 793 return self._type_registry.TypeInfo(type_name)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698