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

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

Issue 10697080: Split backend.AddMembers call into series of backend.AddAtribute/backend.AddOperation calls. (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 | « no previous file | lib/dom/scripts/systemnative.py » ('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 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 10
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 '\n' 925 '\n'
926 ' $CTOR.fromList(List<$TYPE> list);\n' 926 ' $CTOR.fromList(List<$TYPE> list);\n'
927 '\n' 927 '\n'
928 ' $CTOR.fromBuffer(ArrayBuffer buffer,' 928 ' $CTOR.fromBuffer(ArrayBuffer buffer,'
929 ' [int byteOffset, int length]);\n', 929 ' [int byteOffset, int length]);\n',
930 CTOR=self._interface.id, 930 CTOR=self._interface.id,
931 TYPE=self._shared.DartType(element_type)) 931 TYPE=self._shared.DartType(element_type))
932 932
933 self._GenerateEvents() 933 self._GenerateEvents()
934 934
935 old_backend = self._backend
936 if not old_backend.ImplementsMergedMembers():
937 self._backend = HtmlGeneratorDummyBackend()
935 for merged_interface in _merged_html_interfaces: 938 for merged_interface in _merged_html_interfaces:
936 if _merged_html_interfaces[merged_interface] == self._interface.id: 939 if _merged_html_interfaces[merged_interface] == self._interface.id:
937 merged_interface = self._database.GetInterface(merged_interface) 940 merged_interface = self._database.GetInterface(merged_interface)
938 self.AddMembers(merged_interface) 941 self.AddMembers(merged_interface)
939 self._backend.AddMergedMembers(merged_interface) 942 self._backend = old_backend
940 943
941 self._backend.AddMembers(self._interface) 944 def AddIndexer(self, element_type):
942 self._backend.AddSecondaryMembers(self._interface) 945 self._backend.AddIndexer(element_type)
943 self._backend.FinishInterface() 946
947 def AmendIndexer(self, element_type):
948 self._backend.AmendIndexer(element_type)
944 949
945 def AddAttribute(self, attribute): 950 def AddAttribute(self, attribute):
951 self._backend.AddAttribute(attribute)
952
946 getter = attribute 953 getter = attribute
947 setter = attribute if not IsReadOnly(attribute) else None 954 setter = attribute if not IsReadOnly(attribute) else None
948 dom_name = DartDomNameOfAttribute(getter) 955 dom_name = DartDomNameOfAttribute(getter)
949 html_getter_name = self._shared.RenameInHtmlLibrary( 956 html_getter_name = self._shared.RenameInHtmlLibrary(
950 self._interface.id, dom_name, 'get:') 957 self._interface.id, dom_name, 'get:')
951 html_setter_name = self._shared.RenameInHtmlLibrary( 958 html_setter_name = self._shared.RenameInHtmlLibrary(
952 self._interface.id, dom_name, 'set:') 959 self._interface.id, dom_name, 'set:')
953 960
954 if not html_getter_name or self._shared.IsPrivate(html_getter_name): 961 if not html_getter_name or self._shared.IsPrivate(html_getter_name):
955 getter = None 962 getter = None
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */', 998 self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */',
992 DOMINTERFACE=info.overloads[0].doc_js_interface_name, 999 DOMINTERFACE=info.overloads[0].doc_js_interface_name,
993 DOMNAME=info.name) 1000 DOMNAME=info.name)
994 1001
995 self._members_emitter.Emit('\n' 1002 self._members_emitter.Emit('\n'
996 ' $TYPE $NAME($PARAMS);\n', 1003 ' $TYPE $NAME($PARAMS);\n',
997 TYPE=self._shared.DartType(info.type_name), 1004 TYPE=self._shared.DartType(info.type_name),
998 NAME=html_name, 1005 NAME=html_name,
999 PARAMS=info.ParametersInterfaceDeclaration( 1006 PARAMS=info.ParametersInterfaceDeclaration(
1000 self._shared.DartType)) 1007 self._shared.DartType))
1008 self._backend.AddOperation(info)
1009
1010 def AddStaticOperation(self, info):
1011 self._backend.AddStaticOperation(info)
1001 1012
1002 def FinishInterface(self): 1013 def FinishInterface(self):
1003 pass 1014 self._backend.AddSecondaryMembers(self._interface)
1015 self._backend.FinishInterface()
1004 1016
1005 def AddConstant(self, constant): 1017 def AddConstant(self, constant):
1006 type = TypeOrNothing(DartType(constant.type.id), constant.type.id) 1018 type = TypeOrNothing(DartType(constant.type.id), constant.type.id)
1007 self._members_emitter.Emit('\n static final $TYPE$NAME = $VALUE;\n', 1019 self._members_emitter.Emit('\n static final $TYPE$NAME = $VALUE;\n',
1008 NAME=constant.id, 1020 NAME=constant.id,
1009 TYPE=type, 1021 TYPE=type,
1010 VALUE=constant.value) 1022 VALUE=constant.value)
1023 self._backend.AddConstant(constant)
1011 1024
1012 def _GenerateEvents(self): 1025 def _GenerateEvents(self):
1013 emit_events, event_attrs = self._shared.GetEventAttributes(self._interface) 1026 emit_events, event_attrs = self._shared.GetEventAttributes(self._interface)
1014 if not emit_events: 1027 if not emit_events:
1015 return 1028 return
1016 1029
1017 self._shared._event_classes.add(self._interface.id) 1030 self._shared._event_classes.add(self._interface.id)
1018 events_interface = self._html_interface_name + 'Events' 1031 events_interface = self._html_interface_name + 'Events'
1019 events_class = '_%sImpl' % events_interface 1032 events_class = '_%sImpl' % events_interface
1020 parent_events_interface = self._shared.GetParentEventsClass(self._interface) 1033 parent_events_interface = self._shared.GetParentEventsClass(self._interface)
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 'EventTarget.removeEventListener, EventTarget.dispatchEvent' 1075 'EventTarget.removeEventListener, EventTarget.dispatchEvent'
1063 '\n */' 1076 '\n */'
1064 '\n $TYPE get on();\n', 1077 '\n $TYPE get on();\n',
1065 TYPE=events_interface) 1078 TYPE=events_interface)
1066 1079
1067 self._implementation_members_emitter.Emit( 1080 self._implementation_members_emitter.Emit(
1068 '\n $TYPE get on() =>\n new $TYPE(this);\n', 1081 '\n $TYPE get on() =>\n new $TYPE(this);\n',
1069 TYPE=events_class) 1082 TYPE=events_class)
1070 1083
1071 1084
1085 class HtmlGeneratorDummyBackend(object):
1086 def AddAttribute(self, attribute):
1087 pass
1088
1089 def AddOperation(self, info):
1090 pass
1091
1092
1072 # ------------------------------------------------------------------------------ 1093 # ------------------------------------------------------------------------------
1073 1094
1074 # TODO(jmesserly): inheritance is probably not the right way to factor this long 1095 # TODO(jmesserly): inheritance is probably not the right way to factor this long
1075 # term, but it makes merging better for now. 1096 # term, but it makes merging better for now.
1076 class HtmlFrogClassGenerator(FrogInterfaceGenerator): 1097 class HtmlFrogClassGenerator(FrogInterfaceGenerator):
1077 """Generates a Frog class for the dart:html library from a DOM IDL 1098 """Generates a Frog class for the dart:html library from a DOM IDL
1078 interface. 1099 interface.
1079 """ 1100 """
1080 1101
1081 def __init__(self, system, interface): 1102 def __init__(self, system, interface):
(...skipping 18 matching lines...) Expand all
1100 return os.path.join(self._system._output_dir, 'html', 'frog', 1121 return os.path.join(self._system._output_dir, 'html', 'frog',
1101 '_%sFactoryProvider.dart' % self._html_interface_name) 1122 '_%sFactoryProvider.dart' % self._html_interface_name)
1102 1123
1103 def FilePathForDartElementsFactoryProviderImplementation(self): 1124 def FilePathForDartElementsFactoryProviderImplementation(self):
1104 return os.path.join(self._system._output_dir, 'html', 'frog', 1125 return os.path.join(self._system._output_dir, 'html', 'frog',
1105 '_Elements.dart') 1126 '_Elements.dart')
1106 1127
1107 def SetImplementationEmitter(self, implementation_emitter): 1128 def SetImplementationEmitter(self, implementation_emitter):
1108 self._dart_code = implementation_emitter 1129 self._dart_code = implementation_emitter
1109 1130
1110 def AddMergedMembers(self, merged_interface): 1131 def ImplementsMergedMembers(self):
Anton Muhin 2012/07/05 16:07:00 that could probably be a simple field
1111 self.AddMembers(merged_interface) 1132 return True
1112 1133
1113 def _ImplClassName(self, type_name): 1134 def _ImplClassName(self, type_name):
1114 return self._shared._ImplClassName(type_name) 1135 return self._shared._ImplClassName(type_name)
1115 1136
1116 def _NarrowToImplementationType(self, type_name): 1137 def _NarrowToImplementationType(self, type_name):
1117 if self._ShouldNarrowToImplementationType(type_name): 1138 if self._ShouldNarrowToImplementationType(type_name):
1118 return self._ImplClassName(self._shared.DartType(type_name)) 1139 return self._ImplClassName(self._shared.DartType(type_name))
1119 return self._shared.DartType(type_name) 1140 return self._shared.DartType(type_name)
1120 1141
1121 def StartInterface(self): 1142 def StartInterface(self):
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1401 Collect(database.GetInterface(parent.type.id), 1422 Collect(database.GetInterface(parent.type.id),
1402 seen, collected) 1423 seen, collected)
1403 1424
1404 inheritance_closure = {} 1425 inheritance_closure = {}
1405 for interface in database.GetInterfaces(): 1426 for interface in database.GetInterfaces():
1406 seen = set() 1427 seen = set()
1407 collected = [] 1428 collected = []
1408 Collect(interface, seen, collected) 1429 Collect(interface, seen, collected)
1409 inheritance_closure[interface.id] = collected 1430 inheritance_closure[interface.id] = collected
1410 return inheritance_closure 1431 return inheritance_closure
OLDNEW
« no previous file with comments | « no previous file | lib/dom/scripts/systemnative.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698