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

Side by Side Diff: lib/dom/scripts/systemnative.py

Issue 10698108: Stop passing HtmlSystemShared around and move html renaming to IDLTypeInfo. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: . Created 8 years, 5 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
« no previous file with comments | « lib/dom/scripts/systeminterface.py ('k') | lib/html/frog/html_frog.dart » ('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 the systems to generate 6 """This module provides shared functionality for the systems to generate
7 native binding from the IDL database.""" 7 native binding from the IDL database."""
8 8
9 import emitter 9 import emitter
10 import os 10 import os
11 import systembase 11 import systembase
12 from generator import * 12 from generator import *
13 from systemhtml import HtmlSystemShared
14 13
15 14
16 class NativeImplementationSystem(systembase.System): 15 class NativeImplementationSystem(systembase.System):
17 16
18 def __init__(self, context, auxiliary_dir): 17 def __init__(self, context, auxiliary_dir):
19 super(NativeImplementationSystem, self).__init__(context) 18 super(NativeImplementationSystem, self).__init__(context)
20 self._auxiliary_dir = auxiliary_dir 19 self._auxiliary_dir = auxiliary_dir
21 self._cpp_header_files = [] 20 self._cpp_header_files = []
22 self._cpp_impl_files = [] 21 self._cpp_impl_files = []
23 self._html_system = HtmlSystemShared(self._database)
24 22
25 def ImplementationGenerator(self, interface): 23 def ImplementationGenerator(self, interface):
26 return NativeImplementationGenerator(self, interface) 24 return NativeImplementationGenerator(self, interface)
27 25
28 def ProcessCallback(self, interface, info): 26 def ProcessCallback(self, interface, info):
29 self._interface = interface 27 self._interface = interface
30 28
31 if IsPureInterface(self._interface.id): 29 if IsPureInterface(self._interface.id):
32 return None 30 return None
33 31
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 Args: 158 Args:
161 system: The NativeImplementationSystem. 159 system: The NativeImplementationSystem.
162 interface: an IDLInterface instance. It is assumed that all types have 160 interface: an IDLInterface instance. It is assumed that all types have
163 been converted to Dart types (e.g. int, String), unless they are in 161 been converted to Dart types (e.g. int, String), unless they are in
164 the same package as the interface. 162 the same package as the interface.
165 """ 163 """
166 super(NativeImplementationGenerator, self).__init__( 164 super(NativeImplementationGenerator, self).__init__(
167 system._database, interface) 165 system._database, interface)
168 self._system = system 166 self._system = system
169 self._current_secondary_parent = None 167 self._current_secondary_parent = None
170 self._html_system = self._system._html_system 168 self._html_interface_name = system._type_registry.InterfaceName(self._interf ace.id)
171 self._html_interface_name = self._html_system._html_renames.get(
172 self._interface.id, self._interface.id)
173 169
174 def HasImplementation(self): 170 def HasImplementation(self):
175 return not IsPureInterface(self._interface.id) 171 return not IsPureInterface(self._interface.id)
176 172
177 def ImplementationClassName(self): 173 def ImplementationClassName(self):
178 return self._ImplClassName(self._interface.id) 174 return self._ImplClassName(self._interface.id)
179 175
180 def FilePathForDartImplementation(self): 176 def FilePathForDartImplementation(self):
181 return os.path.join(self._system._output_dir, 'dart', 177 return os.path.join(self._system._output_dir, 'dart',
182 '%sImplementation.dart' % self._interface.id) 178 '%sImplementation.dart' % self._interface.id)
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 309
314 self._GenerateNativeCallback(callback_name='constructorCallback', 310 self._GenerateNativeCallback(callback_name='constructorCallback',
315 parameter_definitions=parameter_definitions_emitter.Fragments(), 311 parameter_definitions=parameter_definitions_emitter.Fragments(),
316 needs_receiver=False, invocation=invocation, 312 needs_receiver=False, invocation=invocation,
317 raises_exceptions=raises_exceptions, 313 raises_exceptions=raises_exceptions,
318 runtime_check=runtime_check) 314 runtime_check=runtime_check)
319 315
320 def _ImplClassName(self, interface_name): 316 def _ImplClassName(self, interface_name):
321 return '_%sImpl' % interface_name 317 return '_%sImpl' % interface_name
322 318
323 def _DartType(self, idl_type):
324 return self._html_system.DartType(idl_type)
325
326 def _BaseClassName(self): 319 def _BaseClassName(self):
327 root_class = 'NativeFieldWrapperClass1' 320 root_class = 'NativeFieldWrapperClass1'
328 321
329 if not self._interface.parents: 322 if not self._interface.parents:
330 return root_class 323 return root_class
331 324
332 supertype = self._interface.parents[0].type.id 325 supertype = self._interface.parents[0].type.id
333 326
334 if IsPureInterface(supertype): # The class is a root. 327 if IsPureInterface(supertype): # The class is a root.
335 return root_class 328 return root_class
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 'Callback', True) 630 'Callback', True)
638 631
639 def _HasNativeIndexSetter(self): 632 def _HasNativeIndexSetter(self):
640 return 'CustomIndexedSetter' in self._interface.ext_attrs 633 return 'CustomIndexedSetter' in self._interface.ext_attrs
641 634
642 def _EmitNativeIndexSetter(self, element_type): 635 def _EmitNativeIndexSetter(self, element_type):
643 dart_declaration = 'void operator[]=(int index, %s value)' % element_type 636 dart_declaration = 'void operator[]=(int index, %s value)' % element_type
644 self._GenerateNativeBinding('numericIndexSetter', 3, dart_declaration, 637 self._GenerateNativeBinding('numericIndexSetter', 3, dart_declaration,
645 'Callback', True) 638 'Callback', True)
646 639
647 def _AddOperation(self, info): 640 def AddOperation(self, info, html_name):
648 """ 641 """
649 Arguments: 642 Arguments:
650 info: An OperationInfo object. 643 info: An OperationInfo object.
651 """ 644 """
652 645
653 operation = info.operations[0] 646 operation = info.operations[0]
654 647
655 if 'CheckSecurityForNode' in operation.ext_attrs: 648 if 'CheckSecurityForNode' in operation.ext_attrs:
656 # FIXME: exclude from interface as well. 649 # FIXME: exclude from interface as well.
657 return 650 return
658 651
659 html_name = self._html_system.RenameInHtmlLibrary(
660 self._interface.id, info.name, implementation_class=True)
661
662 if not html_name and info.name == 'item':
663 # FIXME: item should be renamed to operator[], not removed.
664 html_name = '_item'
665
666 if not html_name:
667 return
668
669 is_custom = 'Custom' in operation.ext_attrs 652 is_custom = 'Custom' in operation.ext_attrs
670 has_optional_arguments = any(_IsArgumentOptionalInWebCore(argument) for argu ment in operation.arguments) 653 has_optional_arguments = any(_IsArgumentOptionalInWebCore(argument) for argu ment in operation.arguments)
671 needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_option al_arguments) 654 needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_option al_arguments)
672 655
673 if not needs_dispatcher: 656 if not needs_dispatcher:
674 type_renamer = self._DartType 657 type_renamer = self._DartType
675 default_value = 'null' 658 default_value = 'null'
676 else: 659 else:
677 type_renamer = lambda x: 'Dynamic' 660 type_renamer = lambda x: 'Dynamic'
678 default_value = '_null' 661 default_value = '_null'
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 GenerateChecksAndCall(operation, len(operation.arguments)) 730 GenerateChecksAndCall(operation, len(operation.arguments))
748 body.Emit(' throw "Incorrect number or type of arguments";\n'); 731 body.Emit(' throw "Incorrect number or type of arguments";\n');
749 else: 732 else:
750 operation = operations[0] 733 operation = operations[0]
751 for position, argument in list(enumerate(operation.arguments))[::-1]: 734 for position, argument in list(enumerate(operation.arguments))[::-1]:
752 if _IsArgumentOptionalInWebCore(argument): 735 if _IsArgumentOptionalInWebCore(argument):
753 check = '%s === _null' % argument_names[position] 736 check = '%s === _null' % argument_names[position]
754 GenerateCall(operation, position, [check]) 737 GenerateCall(operation, position, [check])
755 GenerateCall(operation, len(operation.arguments), []) 738 GenerateCall(operation, len(operation.arguments), [])
756 739
757 def AddOperation(self, info):
758 self._AddOperation(info)
759
760 def AddStaticOperation(self, info):
761 self._AddOperation(info)
762
763 def SecondaryContext(self, interface): 740 def SecondaryContext(self, interface):
764 pass 741 pass
765 742
766 def _GenerateOperationNativeCallback(self, operation, arguments, cpp_callback_ name): 743 def _GenerateOperationNativeCallback(self, operation, arguments, cpp_callback_ name):
767 webcore_function_name = operation.ext_attrs.get('ImplementedAs', operation.i d) 744 webcore_function_name = operation.ext_attrs.get('ImplementedAs', operation.i d)
768 745
769 parameter_definitions_emitter = emitter.Emitter() 746 parameter_definitions_emitter = emitter.Emitter()
770 cpp_arguments = [] 747 cpp_arguments = []
771 raises_exceptions = self._GenerateCallWithHandling( 748 raises_exceptions = self._GenerateCallWithHandling(
772 operation, parameter_definitions_emitter, cpp_arguments) 749 operation, parameter_definitions_emitter, cpp_arguments)
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 943
967 def _IsArgumentOptionalInWebCore(argument): 944 def _IsArgumentOptionalInWebCore(argument):
968 return IsOptional(argument) and not 'Callback' in argument.ext_attrs 945 return IsOptional(argument) and not 'Callback' in argument.ext_attrs
969 946
970 def _ToWebKitName(name): 947 def _ToWebKitName(name):
971 name = name[0].lower() + name[1:] 948 name = name[0].lower() + name[1:]
972 name = re.sub(r'^(hTML|uRL|jS|xML|xSLT)', lambda s: s.group(1).lower(), 949 name = re.sub(r'^(hTML|uRL|jS|xML|xSLT)', lambda s: s.group(1).lower(),
973 name) 950 name)
974 return re.sub(r'^(create|exclusive)', lambda s: 'is' + s.group(1).capitalize() , 951 return re.sub(r'^(create|exclusive)', lambda s: 'is' + s.group(1).capitalize() ,
975 name) 952 name)
OLDNEW
« no previous file with comments | « lib/dom/scripts/systeminterface.py ('k') | lib/html/frog/html_frog.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698