OLD | NEW |
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 from systemfrog import * | 9 from systemfrog import * |
10 from systeminterface import * | 10 from systeminterface import * |
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
660 emit_events, events = self._shared.GetEventAttributes(self._interface) | 660 emit_events, events = self._shared.GetEventAttributes(self._interface) |
661 if not emit_events: | 661 if not emit_events: |
662 return | 662 return |
663 elif events: | 663 elif events: |
664 self.AddEventAttributes(events) | 664 self.AddEventAttributes(events) |
665 else: | 665 else: |
666 self._EmitEventGetter(self._shared.GetParentEventsClass(self._interface)) | 666 self._EmitEventGetter(self._shared.GetParentEventsClass(self._interface)) |
667 | 667 |
668 def AddAttribute(self, getter, setter): | 668 def AddAttribute(self, getter, setter): |
669 html_getter_name = self._shared.RenameInHtmlLibrary( | 669 html_getter_name = self._shared.RenameInHtmlLibrary( |
670 self._interface, getter.id, 'get:') | 670 self._interface, DartDomNameOfAttribute(getter), 'get:') |
671 html_setter_name = self._shared.RenameInHtmlLibrary( | 671 html_setter_name = self._shared.RenameInHtmlLibrary( |
672 self._interface, getter.id, 'set:') | 672 self._interface, DartDomNameOfAttribute(getter), 'set:') |
673 | 673 |
674 if not html_getter_name or self._shared.IsPrivate(html_getter_name): | 674 if not html_getter_name or self._shared.IsPrivate(html_getter_name): |
675 getter = None | 675 getter = None |
676 if not html_setter_name or self._shared.IsPrivate(html_setter_name): | 676 if not html_setter_name or self._shared.IsPrivate(html_setter_name): |
677 setter = None | 677 setter = None |
678 if not getter and not setter: | 678 if not getter and not setter: |
679 return | 679 return |
680 | 680 |
681 # We don't yet handle inconsistent renames of the getter and setter yet. | 681 # We don't yet handle inconsistent renames of the getter and setter yet. |
682 if html_getter_name and html_setter_name: | 682 if html_getter_name and html_setter_name: |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
868 # TODO(sra): Use separate mixins for mutable implementations of List<T>. | 868 # TODO(sra): Use separate mixins for mutable implementations of List<T>. |
869 # TODO(sra): Use separate mixins for typed array implementations of List<T>. | 869 # TODO(sra): Use separate mixins for typed array implementations of List<T>. |
870 if self._interface.id != 'NodeList': | 870 if self._interface.id != 'NodeList': |
871 template_file = 'immutable_list_mixin.darttemplate' | 871 template_file = 'immutable_list_mixin.darttemplate' |
872 template = self._system._templates.Load(template_file) | 872 template = self._system._templates.Load(template_file) |
873 self._members_emitter.Emit(template, E=DartType(element_type)) | 873 self._members_emitter.Emit(template, E=DartType(element_type)) |
874 | 874 |
875 def AddAttribute(self, getter, setter): | 875 def AddAttribute(self, getter, setter): |
876 | 876 |
877 html_getter_name = self._shared.RenameInHtmlLibrary( | 877 html_getter_name = self._shared.RenameInHtmlLibrary( |
878 self._interface, getter.id, 'get:') | 878 self._interface, DartDomNameOfAttribute(getter), 'get:') |
879 html_setter_name = self._shared.RenameInHtmlLibrary( | 879 html_setter_name = self._shared.RenameInHtmlLibrary( |
880 self._interface, getter.id, 'set:') | 880 self._interface, DartDomNameOfAttribute(getter), 'set:') |
881 | 881 |
882 if not html_getter_name: | 882 if not html_getter_name: |
883 getter = None | 883 getter = None |
884 if not html_setter_name: | 884 if not html_setter_name: |
885 setter = None | 885 setter = None |
886 | 886 |
887 if not getter and not setter: | 887 if not getter and not setter: |
888 return | 888 return |
889 | 889 |
890 if ((getter and (html_getter_name != getter.id or | 890 if ((getter and (html_getter_name != getter.id or |
(...skipping 15 matching lines...) Expand all Loading... |
906 if getter and not setter and super_getter and not super_setter: | 906 if getter and not setter and super_getter and not super_setter: |
907 if DartType(getter.type.id) == DartType(super_getter.type.id): | 907 if DartType(getter.type.id) == DartType(super_getter.type.id): |
908 # Compatible getter, use the superclass property. This works because | 908 # Compatible getter, use the superclass property. This works because |
909 # JavaScript will do its own dynamic dispatch. | 909 # JavaScript will do its own dynamic dispatch. |
910 output_type = getter and self._NarrowOutputType(getter.type.id) | 910 output_type = getter and self._NarrowOutputType(getter.type.id) |
911 self._members_emitter.Emit( | 911 self._members_emitter.Emit( |
912 '\n' | 912 '\n' |
913 ' // Use implementation from $SUPER.\n' | 913 ' // Use implementation from $SUPER.\n' |
914 ' // final $TYPE $NAME;\n', | 914 ' // final $TYPE $NAME;\n', |
915 SUPER=super_getter_interface.id, | 915 SUPER=super_getter_interface.id, |
916 NAME=getter.id, | 916 NAME=DartDomNameOfAttribute(getter), |
917 TYPE=output_type) | 917 TYPE=output_type) |
918 return | 918 return |
919 | 919 |
920 self._members_emitter.Emit('\n // Shadowing definition.') | 920 self._members_emitter.Emit('\n // Shadowing definition.') |
921 self._AddAttributeUsingProperties(getter, setter) | 921 self._AddAttributeUsingProperties(getter, setter) |
922 return | 922 return |
923 | 923 |
924 output_type = getter and self._NarrowOutputType(getter.type.id) | 924 output_type = getter and self._NarrowOutputType(getter.type.id) |
925 input_type = setter and self._NarrowInputType(setter.type.id) | 925 input_type = setter and self._NarrowInputType(setter.type.id) |
926 if getter and setter and input_type == output_type: | 926 if getter and setter and input_type == output_type: |
927 self._members_emitter.Emit( | 927 self._members_emitter.Emit( |
928 '\n $TYPE $NAME;\n', | 928 '\n $TYPE $NAME;\n', |
929 NAME=getter.id, | 929 NAME=DartDomNameOfAttribute(getter), |
930 TYPE=output_type) | 930 TYPE=output_type) |
931 return | 931 return |
932 if getter and not setter: | 932 if getter and not setter: |
933 self._members_emitter.Emit( | 933 self._members_emitter.Emit( |
934 '\n final $TYPE $NAME;\n', | 934 '\n final $TYPE $NAME;\n', |
935 NAME=getter.id, | 935 NAME=DartDomNameOfAttribute(getter), |
936 TYPE=output_type) | 936 TYPE=output_type) |
937 return | 937 return |
938 self._AddAttributeUsingProperties(getter, setter) | 938 self._AddAttributeUsingProperties(getter, setter) |
939 | 939 |
940 def _AddAttributeUsingProperties(self, getter, setter): | 940 def _AddAttributeUsingProperties(self, getter, setter): |
941 if getter: | 941 if getter: |
942 self._AddGetter(getter) | 942 self._AddGetter(getter) |
943 if setter: | 943 if setter: |
944 self._AddSetter(setter) | 944 self._AddSetter(setter) |
945 | 945 |
946 def _AddGetter(self, attr): | 946 def _AddGetter(self, attr): |
947 self._AddRenamingGetter(attr, attr.id) | 947 self._AddRenamingGetter(attr, DartDomNameOfAttribute(attr)) |
948 | 948 |
949 def _AddSetter(self, attr): | 949 def _AddSetter(self, attr): |
950 self._AddRenamingSetter(attr, attr.id) | 950 self._AddRenamingSetter(attr, DartDomNameOfAttribute(attr)) |
951 | 951 |
952 def _AddRenamingGetter(self, attr, html_name): | 952 def _AddRenamingGetter(self, attr, html_name): |
953 return_type = self._NarrowOutputType(attr.type.id) | 953 return_type = self._NarrowOutputType(attr.type.id) |
954 if self._shared.MaybeReturnDocument(attr.type.id): | 954 if self._shared.MaybeReturnDocument(attr.type.id): |
955 self._members_emitter.Emit( | 955 self._members_emitter.Emit( |
956 '\n $TYPE get $(HTML_NAME)() => ' | 956 '\n $TYPE get $(HTML_NAME)() => ' |
957 '_FixHtmlDocumentReference(_$(HTML_NAME));\n', | 957 '_FixHtmlDocumentReference(_$(HTML_NAME));\n', |
958 HTML_NAME=html_name, | 958 HTML_NAME=html_name, |
959 NAME=attr.id, | |
960 TYPE=return_type) | 959 TYPE=return_type) |
961 html_name = '_' + html_name | 960 html_name = '_' + html_name |
962 # For correctness this needs to be the return type of the native helper | 961 # For correctness this needs to be the return type of the native helper |
963 # method due to the fact that the real HTMLDocument object is not typed | 962 # method due to the fact that the real HTMLDocument object is not typed |
964 # as a document. TODO(jacobr): we could simplify this. | 963 # as a document. TODO(jacobr): we could simplify this. |
965 return_type = '_EventTargetImpl' | 964 return_type = '_EventTargetImpl' |
966 | 965 |
967 self._members_emitter.Emit( | 966 self._members_emitter.Emit( |
968 '\n $TYPE get $(HTML_NAME)() native "return $(THIS).$NAME;";\n', | 967 '\n $TYPE get $(HTML_NAME)() native "return $(THIS).$NAME;";\n', |
969 HTML_NAME=html_name, | 968 HTML_NAME=html_name, |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1369 if getter and html_getter_name: | 1368 if getter and html_getter_name: |
1370 self._AddGetter(getter, html_getter_name) | 1369 self._AddGetter(getter, html_getter_name) |
1371 if setter and html_setter_name: | 1370 if setter and html_setter_name: |
1372 self._AddSetter(setter, html_setter_name) | 1371 self._AddSetter(setter, html_setter_name) |
1373 | 1372 |
1374 def _AddGetter(self, attr, html_name): | 1373 def _AddGetter(self, attr, html_name): |
1375 if self._shared.MaybeReturnDocument(attr.type.id): | 1374 if self._shared.MaybeReturnDocument(attr.type.id): |
1376 self._members_emitter.Emit( | 1375 self._members_emitter.Emit( |
1377 '\n' | 1376 '\n' |
1378 ' $TYPE get $(HTML_NAME)() => ' | 1377 ' $TYPE get $(HTML_NAME)() => ' |
1379 '_FixHtmlDocumentReference(_wrap($(THIS).$NAME));\n', | 1378 '_FixHtmlDocumentReference(_wrap($(THIS).$DOM_NAME));\n', |
1380 NAME=attr.id, | |
1381 HTML_NAME=html_name, | 1379 HTML_NAME=html_name, |
| 1380 DOM_NAME=DartDomNameOfAttribute(attr), |
1382 TYPE=DartType(attr.type.id), | 1381 TYPE=DartType(attr.type.id), |
1383 THIS=self.DomObjectName()) | 1382 THIS=self.DomObjectName()) |
1384 else: | 1383 else: |
1385 self._members_emitter.Emit( | 1384 self._members_emitter.Emit( |
1386 '\n' | 1385 '\n' |
1387 ' $TYPE get $(HTML_NAME)() => _wrap($(THIS).$NAME);\n', | 1386 ' $TYPE get $(HTML_NAME)() => _wrap($(THIS).$DOM_NAME);\n', |
1388 NAME=attr.id, | |
1389 HTML_NAME=html_name, | 1387 HTML_NAME=html_name, |
| 1388 DOM_NAME=DartDomNameOfAttribute(attr), |
1390 TYPE=DartType(attr.type.id), | 1389 TYPE=DartType(attr.type.id), |
1391 THIS=self.DomObjectName()) | 1390 THIS=self.DomObjectName()) |
1392 | 1391 |
1393 def _AddSetter(self, attr, html_name): | 1392 def _AddSetter(self, attr, html_name): |
1394 self._members_emitter.Emit( | 1393 self._members_emitter.Emit( |
1395 '\n' | 1394 '\n' |
1396 ' void set $(HTML_NAME)($TYPE value) { $(THIS).$NAME = _unwrap(value);
}\n', | 1395 ' void set $(HTML_NAME)($TYPE value) { ' |
1397 NAME=attr.id, | 1396 '$(THIS).$DOM_NAME = _unwrap(value); }\n', |
1398 HTML_NAME=html_name, | 1397 HTML_NAME=html_name, |
| 1398 DOM_NAME=DartDomNameOfAttribute(attr), |
1399 TYPE=DartType(attr.type.id), | 1399 TYPE=DartType(attr.type.id), |
1400 THIS=self.DomObjectName()) | 1400 THIS=self.DomObjectName()) |
1401 | 1401 |
1402 def AddSecondaryAttribute(self, interface, getter, setter): | 1402 def AddSecondaryAttribute(self, interface, getter, setter): |
1403 self._SecondaryContext(interface) | 1403 self._SecondaryContext(interface) |
1404 self.AddAttribute(getter, setter) | 1404 self.AddAttribute(getter, setter) |
1405 | 1405 |
1406 def AddSecondaryOperation(self, interface, info): | 1406 def AddSecondaryOperation(self, interface, info): |
1407 self._SecondaryContext(interface) | 1407 self._SecondaryContext(interface) |
1408 self.AddOperation(info) | 1408 self.AddOperation(info) |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1772 # dispatch has removed f(X), leaving only f(Y), but there is no guarantee | 1772 # dispatch has removed f(X), leaving only f(Y), but there is no guarantee |
1773 # that Y = Z-X, so we need to check for Y. | 1773 # that Y = Z-X, so we need to check for Y. |
1774 true_code = emitter.Emit( | 1774 true_code = emitter.Emit( |
1775 '$(INDENT)if ($COND) {\n' | 1775 '$(INDENT)if ($COND) {\n' |
1776 '$!TRUE' | 1776 '$!TRUE' |
1777 '$(INDENT)}\n', | 1777 '$(INDENT)}\n', |
1778 COND=test, INDENT=indent) | 1778 COND=test, INDENT=indent) |
1779 self.GenerateDispatch( | 1779 self.GenerateDispatch( |
1780 true_code, info, indent + ' ', position + 1, positive) | 1780 true_code, info, indent + ' ', position + 1, positive) |
1781 return True | 1781 return True |
OLD | NEW |