| 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 |