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

Side by Side Diff: sdk/lib/html/scripts/generator.py

Issue 11308075: Add custom annotations to some APIs for native tree shaking. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month 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 systems to generate 6 """This module provides shared functionality for systems to generate
7 Dart APIs from the IDL database.""" 7 Dart APIs from the IDL database."""
8 8
9 import copy 9 import copy
10 import re 10 import re
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 534
535 def FindConversion(idl_type, direction, interface, member): 535 def FindConversion(idl_type, direction, interface, member):
536 table = dart2js_conversions 536 table = dart2js_conversions
537 return (table.get('%s %s %s.%s' % (idl_type, direction, interface, member)) or 537 return (table.get('%s %s %s.%s' % (idl_type, direction, interface, member)) or
538 table.get('%s %s %s.*' % (idl_type, direction, interface)) or 538 table.get('%s %s %s.*' % (idl_type, direction, interface)) or
539 table.get('%s %s' % (idl_type, direction))) 539 table.get('%s %s' % (idl_type, direction)))
540 return None 540 return None
541 541
542 # ------------------------------------------------------------------------------ 542 # ------------------------------------------------------------------------------
543 543
544 # Annotations to be placed on members. The table is indexed by the IDL
545 # interface and member name, and by IDL return or field type name. Both are
546 # used to assemble the annotations:
547 #
548 # INTERFACE.MEMBER: annotations for member.
549 # +TYPE: add annotations only if there are member annotations.
550 # TYPE: add regardless of member annotations.
551
552 dart2js_annotations = {
553
554 # Rather than have the result of an IDBRequest as a union over all possible
555 # results, we mark the result as git instantiating any classes, and mark
blois 2012/11/19 20:46:48 git?
sra1 2012/11/19 23:15:07 Done.
556 # each operation with the classes that it could cause to be asynchronously
557 # instantiated.
558 'IDBRequest.result': "@Creates('Null')",
559
560 # The source is usually a participant in the operation that generated the
561 # IDBRequest.
562 'IDBRequest.source': "@Creates('Null')",
563
564 'IDBFactory.open': "@Creates('IDBDatabase')",
565
566 'IDBObjectStore.put': "@annotation_Creates_IDBKey",
567 'IDBObjectStore.add': "@annotation_Creates_IDBKey",
568 'IDBObjectStore.get': "@annotation_Creates_SerializedScriptValue",
569 'IDBObjectStore.openCursor': "@Creates('IDBCursor')",
570
571 'IDBIndex.get': "@annotation_Creates_SerializedScriptValue",
572 'IDBIndex.getKey':
573 "@annotation_Creates_SerializedScriptValue "
574 # The source is the object store behind the index.
575 "@Creates('IDBObjectStore')",
576 'IDBIndex.openCursor': "@Creates('IDBCursor')",
577 'IDBIndex.openKeyCursor': "@Creates('IDBCursor')",
578
579 'IDBCursorWithValue.value':
580 '@annotation_Creates_SerializedScriptValue '
581 '@annotation_Returns_SerializedScriptValue',
582
583 'IDBCursor.key': "@annotation_Creates_IDBKey @annotation_Returns_IDBKey",
584
585 '+IDBRequest': "@Returns('IDBRequest') @Creates('IDBRequest')",
586
587 '+IDBOpenDBRequest': "@Returns('IDBRequest') @Creates('IDBRequest')",
588 '+IDBVersionChangeRequest': "@Returns('IDBRequest') @Creates('IDBRequest')",
589
590
591 'FileReader.result': "@Creates('String|ArrayBuffer|Null')",
592
593 'CanvasRenderingContext2D.createImageData':
594 "@Creates('ImageData|=Object')",
595
596 'CanvasRenderingContext2D.getImageData':
597 "@Creates('ImageData|=Object')",
598
599 'CanvasRenderingContext2D.webkitGetImageDataHD':
600 "@Creates('ImageData|=Object')",
601
602 'XMLHttpRequest.response':
603 "@Creates('ArrayBuffer|Blob|Document|=Object|=List|String|num')",
604
605 'SQLResultSetRowList.item': "@Creates('=Object')",
606 }
607
608 def FindAnnotations(idl_type, interface_name, member_name):
609 ann1 = dart2js_annotations.get("%s.%s" % (interface_name, member_name))
610 if ann1:
611 ann2 = dart2js_annotations.get('+' + idl_type)
612 if ann2:
613 return ann2 + ' ' + ann1
614 ann2 = dart2js_annotations.get(idl_type)
615 if ann2:
616 return ann2 + ' ' + ann1
617 return ann1
618
619 ann2 = dart2js_annotations.get(idl_type)
620 return ann2
621
622 # ------------------------------------------------------------------------------
623
544 class IDLTypeInfo(object): 624 class IDLTypeInfo(object):
545 def __init__(self, idl_type, data): 625 def __init__(self, idl_type, data):
546 self._idl_type = idl_type 626 self._idl_type = idl_type
547 self._data = data 627 self._data = data
548 628
549 def idl_type(self): 629 def idl_type(self):
550 return self._idl_type 630 return self._idl_type
551 631
552 def dart_type(self): 632 def dart_type(self):
553 return self._data.dart_type or self._idl_type 633 return self._data.dart_type or self._idl_type
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 else: 1162 else:
1083 dart_interface_name = type_name 1163 dart_interface_name = type_name
1084 return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name, 1164 return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name,
1085 self) 1165 self)
1086 1166
1087 if type_data.clazz == 'SVGTearOff': 1167 if type_data.clazz == 'SVGTearOff':
1088 return SVGTearOffIDLTypeInfo(type_name, type_data, self) 1168 return SVGTearOffIDLTypeInfo(type_name, type_data, self)
1089 1169
1090 class_name = '%sIDLTypeInfo' % type_data.clazz 1170 class_name = '%sIDLTypeInfo' % type_data.clazz
1091 return globals()[class_name](type_name, type_data) 1171 return globals()[class_name](type_name, type_data)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698