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

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

Issue 10448009: Apply html renames to native wrappers. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: . Created 8 years, 6 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 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 from generator import * 11 from generator import *
12 from systembase import * 12 from systembase import *
13 from systemhtml import DomToHtmlEvent, DomToHtmlEvents 13 from systemhtml import DomToHtmlEvent, DomToHtmlEvents, HtmlSystemShared
14 14
15 class NativeImplementationSystem(System): 15 class NativeImplementationSystem(System):
16 16
17 def __init__(self, templates, database, html_renames, emitters, auxiliary_dir, 17 def __init__(self, templates, database, html_database, html_renames,
18 output_dir): 18 emitters, auxiliary_dir, output_dir):
19 super(NativeImplementationSystem, self).__init__( 19 super(NativeImplementationSystem, self).__init__(
20 templates, database, emitters, output_dir) 20 templates, database, emitters, output_dir)
21 21
22 self._html_renames = html_renames 22 self._html_renames = html_renames
23 self._auxiliary_dir = auxiliary_dir 23 self._auxiliary_dir = auxiliary_dir
24 self._dom_public_files = [] 24 self._dom_public_files = []
25 self._dom_impl_files = [] 25 self._dom_impl_files = []
26 self._cpp_header_files = [] 26 self._cpp_header_files = []
27 self._cpp_impl_files = [] 27 self._cpp_impl_files = []
28 self._html_system = HtmlSystemShared(html_database)
28 29
29 def InterfaceGenerator(self, 30 def InterfaceGenerator(self,
30 interface, 31 interface,
31 common_prefix, 32 common_prefix,
32 super_interface_name, 33 super_interface_name,
33 source_filter): 34 source_filter):
34 interface_name = interface.id 35 interface_name = interface.id
35 36
36 dart_interface_path = self._FilePathForDartInterface(interface_name) 37 dart_interface_path = self._FilePathForDartInterface(interface_name)
37 self._dom_public_files.append(dart_interface_path) 38 self._dom_public_files.append(dart_interface_path)
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 used to avoid static member 'overriding' in the generated Dart code. 234 used to avoid static member 'overriding' in the generated Dart code.
234 """ 235 """
235 self._system = system 236 self._system = system
236 self._interface = interface 237 self._interface = interface
237 self._dart_impl_emitter = dart_impl_emitter 238 self._dart_impl_emitter = dart_impl_emitter
238 self._cpp_header_emitter = cpp_header_emitter 239 self._cpp_header_emitter = cpp_header_emitter
239 self._cpp_impl_emitter = cpp_impl_emitter 240 self._cpp_impl_emitter = cpp_impl_emitter
240 self._base_members = base_members 241 self._base_members = base_members
241 self._templates = templates 242 self._templates = templates
242 self._current_secondary_parent = None 243 self._current_secondary_parent = None
244 self._html_system = self._system._html_system
243 245
244 def StartInterface(self): 246 def StartInterface(self):
245 self._interface_type_info = GetIDLTypeInfo(self._interface.id) 247 self._interface_type_info = GetIDLTypeInfo(self._interface.id)
246 self._members_emitter = emitter.Emitter() 248 self._members_emitter = emitter.Emitter()
247 self._cpp_declarations_emitter = emitter.Emitter() 249 self._cpp_declarations_emitter = emitter.Emitter()
248 self._cpp_impl_includes = set() 250 self._cpp_impl_includes = set()
249 self._cpp_definitions_emitter = emitter.Emitter() 251 self._cpp_definitions_emitter = emitter.Emitter()
250 self._cpp_resolver_emitter = emitter.Emitter() 252 self._cpp_resolver_emitter = emitter.Emitter()
251 253
252 self._GenerateConstructors() 254 self._GenerateConstructors()
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 events_class = '_%sEventsImpl' % self._interface.id 349 events_class = '_%sEventsImpl' % self._interface.id
348 self._EmitEventGetter(events_class) 350 self._EmitEventGetter(events_class)
349 351
350 def HasEventAttributes(interface): 352 def HasEventAttributes(interface):
351 return any([a.type.id == 'EventListener' for a in interface.attributes]) 353 return any([a.type.id == 'EventListener' for a in interface.attributes])
352 parent = _FindParent(self._interface, self._system._database, HasEventAttrib utes) 354 parent = _FindParent(self._interface, self._system._database, HasEventAttrib utes)
353 if parent: 355 if parent:
354 parent_events_class = '_%sEventsImpl' % parent.id 356 parent_events_class = '_%sEventsImpl' % parent.id
355 else: 357 else:
356 parent_events_class = '_EventsImpl' 358 parent_events_class = '_EventsImpl'
357 html_inteface = self._system._html_renames.get(self._interface.id, self._int erface.id) 359
360 html_inteface = self._HTMLInterfaceName(self._interface.id)
358 events_members = self._dart_impl_emitter.Emit( 361 events_members = self._dart_impl_emitter.Emit(
359 '\n' 362 '\n'
360 'class $EVENTS_CLASS extends $PARENT_EVENTS_CLASS implements $EVENTS_INT ERFACE {\n' 363 'class $EVENTS_CLASS extends $PARENT_EVENTS_CLASS implements $EVENTS_INT ERFACE {\n'
361 ' $EVENTS_CLASS(_ptr) : super(_ptr);\n' 364 ' $EVENTS_CLASS(_ptr) : super(_ptr);\n'
362 '$!MEMBERS\n' 365 '$!MEMBERS\n'
363 '}\n', 366 '}\n',
364 EVENTS_CLASS=events_class, 367 EVENTS_CLASS=events_class,
365 PARENT_EVENTS_CLASS=parent_events_class, 368 PARENT_EVENTS_CLASS=parent_events_class,
366 EVENTS_INTERFACE='%sEvents' % html_inteface) 369 EVENTS_INTERFACE='%sEvents' % html_inteface)
367 370
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 # again. If the operations are not specified, try to inherit from the 426 # again. If the operations are not specified, try to inherit from the
424 # EventTarget implementation. 427 # EventTarget implementation.
425 # 428 #
426 # Applies to MessagePort. 429 # Applies to MessagePort.
427 if not [op for op in self._interface.operations if op.id == 'addEventListe ner']: 430 if not [op for op in self._interface.operations if op.id == 'addEventListe ner']:
428 return self._ImplClassName(supertype) 431 return self._ImplClassName(supertype)
429 return '_DOMWrapperBase' 432 return '_DOMWrapperBase'
430 433
431 return self._ImplClassName(supertype) 434 return self._ImplClassName(supertype)
432 435
436 def _HTMLInterfaceName(self, interface_name):
437 return self._system._html_renames.get(interface_name, interface_name)
438
433 def _IsConstructable(self): 439 def _IsConstructable(self):
434 # FIXME: support ConstructorTemplate. 440 # FIXME: support ConstructorTemplate.
435 return set(['CustomConstructor', 'V8CustomConstructor', 'Constructor', 'Name dConstructor']) & set(self._interface.ext_attrs) 441 return set(['CustomConstructor', 'V8CustomConstructor', 'Constructor', 'Name dConstructor']) & set(self._interface.ext_attrs)
436 442
437 def _EmitFactoryProvider(self, interface_name, constructor_info): 443 def _EmitFactoryProvider(self, interface_name, constructor_info):
438 factory_provider = '_%sFactoryProvider' % interface_name 444 factory_provider = '_%sFactoryProvider' % interface_name
439 implementation_class = '_%sFactoryProviderImpl' % interface_name 445 implementation_class = '_%sFactoryProviderImpl' % interface_name
440 implementation_function = 'create' + interface_name 446 implementation_function = 'create' + interface_name
441 native_implementation_function = '%s_constructor_Callback' % interface_name 447 native_implementation_function = '%s_constructor_Callback' % interface_name
442 448
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 582
577 def AddConstant(self, constant): 583 def AddConstant(self, constant):
578 # Constants are already defined on the interface. 584 # Constants are already defined on the interface.
579 pass 585 pass
580 586
581 def AddAttribute(self, getter, setter): 587 def AddAttribute(self, getter, setter):
582 if 'CheckSecurityForNode' in (getter or setter).ext_attrs: 588 if 'CheckSecurityForNode' in (getter or setter).ext_attrs:
583 # FIXME: exclude from interface as well. 589 # FIXME: exclude from interface as well.
584 return 590 return
585 591
586 if getter: 592 html_interface_name = self._HTMLInterfaceName(self._interface.id)
587 self._AddGetter(getter) 593 dom_name = DartDomNameOfAttribute(getter or setter)
588 if setter: 594 html_getter_name = self._html_system.RenameInHtmlLibrary(
589 self._AddSetter(setter) 595 html_interface_name, dom_name, 'get:', implementation_class=True)
596 html_setter_name = self._html_system.RenameInHtmlLibrary(
597 html_interface_name, dom_name, 'set:', implementation_class=True)
598
599 if getter and html_getter_name:
600 self._AddGetter(getter, html_getter_name)
601 if setter and html_setter_name:
602 self._AddSetter(setter, html_setter_name)
590 603
591 def AddSecondaryAttribute(self, interface, getter, setter): 604 def AddSecondaryAttribute(self, interface, getter, setter):
592 self.AddAttribute(getter, setter) 605 self.AddAttribute(getter, setter)
593 606
594 def _AddGetter(self, attr): 607 def _AddGetter(self, attr, html_name):
595 type_info = GetIDLTypeInfo(attr.type.id) 608 type_info = GetIDLTypeInfo(attr.type.id)
596 dart_declaration = '%s get %s()' % ( 609 dart_declaration = '%s get %s()' % (self._DartType(attr.type.id), html_name)
597 self._DartType(attr.type.id), DartDomNameOfAttribute(attr))
598 is_custom = 'Custom' in attr.ext_attrs or 'CustomGetter' in attr.ext_attrs 610 is_custom = 'Custom' in attr.ext_attrs or 'CustomGetter' in attr.ext_attrs
599 cpp_callback_name = self._GenerateNativeBinding(attr.id, 1, 611 cpp_callback_name = self._GenerateNativeBinding(attr.id, 1,
600 dart_declaration, 'Getter', is_custom) 612 dart_declaration, 'Getter', is_custom)
601 if is_custom: 613 if is_custom:
602 return 614 return
603 615
604 arguments = [] 616 arguments = []
605 parameter_definitions_emitter = emitter.Emitter() 617 parameter_definitions_emitter = emitter.Emitter()
606 raises_exceptions = self._GenerateCallWithHandling(attr, parameter_definitio ns_emitter, arguments) 618 raises_exceptions = self._GenerateCallWithHandling(attr, parameter_definitio ns_emitter, arguments)
607 raises_exceptions = raises_exceptions or attr.get_raises 619 raises_exceptions = raises_exceptions or attr.get_raises
(...skipping 20 matching lines...) Expand all
628 webcore_function_name) 640 webcore_function_name)
629 if attr.type.id.startswith('SVGAnimated'): 641 if attr.type.id.startswith('SVGAnimated'):
630 webcore_function_name += 'Animated' 642 webcore_function_name += 'Animated'
631 643
632 function_expression = self._GenerateWebCoreFunctionExpression(webcore_functi on_name, attr) 644 function_expression = self._GenerateWebCoreFunctionExpression(webcore_functi on_name, attr)
633 invocation = self._GenerateWebCoreInvocation(function_expression, 645 invocation = self._GenerateWebCoreInvocation(function_expression,
634 arguments, attr.type.id, attr.ext_attrs, attr.get_raises) 646 arguments, attr.type.id, attr.ext_attrs, attr.get_raises)
635 self._GenerateNativeCallback(cpp_callback_name, parameter_definitions_emitte r.Fragments(), 647 self._GenerateNativeCallback(cpp_callback_name, parameter_definitions_emitte r.Fragments(),
636 True, invocation, raises_exceptions=raises_exceptions) 648 True, invocation, raises_exceptions=raises_exceptions)
637 649
638 def _AddSetter(self, attr): 650 def _AddSetter(self, attr, html_name):
639 type_info = GetIDLTypeInfo(attr.type.id) 651 type_info = GetIDLTypeInfo(attr.type.id)
640 dart_declaration = 'void set %s(%s)' % ( 652 dart_declaration = 'void set %s(%s)' % (html_name, self._DartType(attr.type. id))
641 DartDomNameOfAttribute(attr), self._DartType(attr.type.id))
642 is_custom = set(['Custom', 'CustomSetter', 'V8CustomSetter']) & set(attr.ext _attrs) 653 is_custom = set(['Custom', 'CustomSetter', 'V8CustomSetter']) & set(attr.ext _attrs)
643 cpp_callback_name = self._GenerateNativeBinding(attr.id, 2, 654 cpp_callback_name = self._GenerateNativeBinding(attr.id, 2,
644 dart_declaration, 'Setter', is_custom) 655 dart_declaration, 'Setter', is_custom)
645 if is_custom: 656 if is_custom:
646 return 657 return
647 658
648 arguments = [] 659 arguments = []
649 parameter_definitions_emitter = emitter.Emitter() 660 parameter_definitions_emitter = emitter.Emitter()
650 self._GenerateCallWithHandling(attr, parameter_definitions_emitter, argument s) 661 self._GenerateCallWithHandling(attr, parameter_definitions_emitter, argument s)
651 662
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 def _AddOperation(self, info): 848 def _AddOperation(self, info):
838 """ 849 """
839 Arguments: 850 Arguments:
840 info: An OperationInfo object. 851 info: An OperationInfo object.
841 """ 852 """
842 853
843 if 'CheckSecurityForNode' in info.overloads[0].ext_attrs: 854 if 'CheckSecurityForNode' in info.overloads[0].ext_attrs:
844 # FIXME: exclude from interface as well. 855 # FIXME: exclude from interface as well.
845 return 856 return
846 857
847 parameters = info.ParametersImplementationDeclaration(self._DartType) 858 html_interface_name = self._HTMLInterfaceName(self._interface.id)
848 if 'Custom' in info.overloads[0].ext_attrs: 859 html_name = self._html_system.RenameInHtmlLibrary(
849 dart_declaration = '%s %s(%s)' % (self._DartType(info.type_name), info.nam e, parameters) 860 html_interface_name, info.name, implementation_class=True)
850 argument_count = (0 if info.IsStatic() else 1) + len(info.param_infos) 861
851 self._GenerateNativeBinding(info.name, argument_count, dart_declaration, 862 if not html_name and info.name == 'item':
852 'Callback', True) 863 # FIXME: item should be renamed to operator[], not removed.
864 html_name = 'item'
865
866 if not html_name:
853 return 867 return
854 868
855 modifier = '' 869 dart_declaration = '%s%s %s(%s)' % (
856 if info.IsStatic(): 870 'static ' if info.IsStatic() else '',
857 modifier = 'static ' 871 self._DartType(info.type_name),
872 html_name or info.name,
873 info.ParametersImplementationDeclaration(self._DartType))
874
875 if 'Custom' in info.overloads[0].ext_attrs:
876 argument_count = (0 if info.IsStatic() else 1) + len(info.param_infos)
877 self._GenerateNativeBinding(info.name , argument_count,
878 dart_declaration, 'Callback', True)
879 return
880
858 body = self._members_emitter.Emit( 881 body = self._members_emitter.Emit(
859 '\n' 882 '\n'
860 ' $MODIFIER$TYPE $NAME($PARAMETERS) {\n' 883 ' $DECLARATION {\n'
861 '$!BODY' 884 '$!BODY'
862 ' }\n', 885 ' }\n',
863 MODIFIER=modifier, 886 DECLARATION=dart_declaration)
864 TYPE=self._DartType(info.type_name),
865 NAME=info.name,
866 PARAMETERS=parameters)
867 887
868 self._native_version = 0 888 self._native_version = 0
869 overloads = self.CombineOverloads(info.overloads) 889 overloads = self.CombineOverloads(info.overloads)
870 fallthrough = self.GenerateDispatch(body, info, ' ', overloads) 890 fallthrough = self.GenerateDispatch(body, info, ' ', overloads)
871 if fallthrough: 891 if fallthrough:
872 body.Emit(' throw "Incorrect number or type of arguments";\n'); 892 body.Emit(' throw "Incorrect number or type of arguments";\n');
873 893
874 def CombineOverloads(self, overloads): 894 def CombineOverloads(self, overloads):
875 # Combine overloads that can be implemented by the same native method. This 895 # Combine overloads that can be implemented by the same native method. This
876 # undoes the expansion of optional arguments into multiple overloads unless 896 # undoes the expansion of optional arguments into multiple overloads unless
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 for parent in interface.parents: 1299 for parent in interface.parents:
1280 parent_name = parent.type.id 1300 parent_name = parent.type.id
1281 if not database.HasInterface(parent.type.id): 1301 if not database.HasInterface(parent.type.id):
1282 continue 1302 continue
1283 parent_interface = database.GetInterface(parent.type.id) 1303 parent_interface = database.GetInterface(parent.type.id)
1284 if callback(parent_interface): 1304 if callback(parent_interface):
1285 return parent_interface 1305 return parent_interface
1286 parent_interface = _FindParent(parent_interface, database, callback) 1306 parent_interface = _FindParent(parent_interface, database, callback)
1287 if parent_interface: 1307 if parent_interface:
1288 return parent_interface 1308 return parent_interface
OLDNEW
« no previous file with comments | « lib/dom/scripts/systemhtml.py ('k') | lib/dom/templates/html/dartium/impl_EventTarget.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698