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 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 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 Attributes: | 301 Attributes: |
302 overloads: A list of IDL operation overloads with the same name. | 302 overloads: A list of IDL operation overloads with the same name. |
303 name: A string, the simple name of the operation. | 303 name: A string, the simple name of the operation. |
304 constructor_name: A string, the name of the constructor iff the constructor | 304 constructor_name: A string, the name of the constructor iff the constructor |
305 is named, e.g. 'fromList' in Int8Array.fromList(list). | 305 is named, e.g. 'fromList' in Int8Array.fromList(list). |
306 type_name: A string, the name of the return type of the operation. | 306 type_name: A string, the name of the return type of the operation. |
307 param_infos: A list of ParamInfo. | 307 param_infos: A list of ParamInfo. |
308 factory_parameters: A list of parameters used for custom designed Factory | 308 factory_parameters: A list of parameters used for custom designed Factory |
309 calls. | 309 calls. |
310 """ | 310 """ |
311 | 311 |
312 def __init__(self): | 312 def __init__(self): |
313 self.factory_parameters = None | 313 self.factory_parameters = None |
314 | 314 |
315 def ParametersDeclaration(self, rename_type, force_optional=False): | 315 def ParametersDeclaration(self, rename_type, force_optional=False): |
316 def FormatParam(param): | 316 def FormatParam(param): |
317 dart_type = rename_type(param.type_id) if param.type_id else 'dynamic' | 317 dart_type = rename_type(param.type_id) if param.type_id else 'dynamic' |
318 return '%s%s' % (TypeOrNothing(dart_type, param.type_id), param.name) | 318 return '%s%s' % (TypeOrNothing(dart_type, param.type_id), param.name) |
319 | 319 |
320 required = [] | 320 required = [] |
321 optional = [] | 321 optional = [] |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 ' return $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' | 413 ' return $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' |
414 ' }\n', | 414 ' }\n', |
415 OPT_PARAM_NAME=self.param_infos[index].name, | 415 OPT_PARAM_NAME=self.param_infos[index].name, |
416 FACTORY=factory_provider, | 416 FACTORY=factory_provider, |
417 CTOR_FACTORY_NAME=self.ConstructorFactoryName(rename_type), | 417 CTOR_FACTORY_NAME=self.ConstructorFactoryName(rename_type), |
418 FACTORY_PARAMS=self.ParametersAsArgumentList(index)) | 418 FACTORY_PARAMS=self.ParametersAsArgumentList(index)) |
419 | 419 |
420 for index, param_info in enumerate(self.param_infos): | 420 for index, param_info in enumerate(self.param_infos): |
421 if param_info.is_optional: | 421 if param_info.is_optional: |
422 EmitOptionalParameterInvocation(index) | 422 EmitOptionalParameterInvocation(index) |
423 | 423 |
424 def _GenerateFactoryOptParamsWithoutFactoryProvider(self, rename_type, | 424 def _GenerateFactoryOptParamsWithoutFactoryProvider(self, rename_type, |
425 emitter, factory_name, factory_constructor_name, factory_parameters): | 425 emitter, factory_name, factory_constructor_name, factory_parameters): |
426 """Helper method for creating a factory constructor with optional | 426 """Helper method for creating a factory constructor with optional |
427 parameters that does not call a factory provider, it simply creates the | 427 parameters that does not call a factory provider, it simply creates the |
428 object itself. This is currently used for SVGElements and HTMLElements.""" | 428 object itself. This is currently used for SVGElements and HTMLElements.""" |
429 inits = emitter.Emit( | 429 inits = emitter.Emit( |
430 '\n' | 430 '\n' |
431 ' factory $CONSTRUCTOR($PARAMS) {\n' | 431 ' factory $CONSTRUCTOR($PARAMS) {\n'» |
432 ' var e = $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' | 432 ' var e = $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n' |
433 '$!INITS' | 433 '$!INITS' |
434 ' return e;\n' | 434 ' return e;\n' |
435 ' }\n', | 435 ' }\n', |
436 CONSTRUCTOR=self._ConstructorFullName(rename_type), | 436 CONSTRUCTOR=self._ConstructorFullName(rename_type), |
437 FACTORY=factory_name, | 437 FACTORY=factory_name, |
438 CTOR_FACTORY_NAME=factory_constructor_name, | 438 CTOR_FACTORY_NAME=factory_constructor_name, |
439 PARAMS=self.ParametersDeclaration(rename_type), | 439 PARAMS=self.ParametersDeclaration(rename_type), |
440 FACTORY_PARAMS=factory_parameters) | 440 FACTORY_PARAMS=factory_parameters) |
441 for index, param_info in enumerate(self.param_infos): | 441 for index, param_info in enumerate(self.param_infos): |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 # Specific member of interface | 493 # Specific member of interface |
494 # "TYPE DIRECTION INTERFACE.*" -> conversion | 494 # "TYPE DIRECTION INTERFACE.*" -> conversion |
495 # All members of interface getting (setting) with type. | 495 # All members of interface getting (setting) with type. |
496 # "TYPE DIRECTION" -> conversion | 496 # "TYPE DIRECTION" -> conversion |
497 # All getters (setters) of type. | 497 # All getters (setters) of type. |
498 # | 498 # |
499 # where DIRECTION is 'get' for getters and operation return values, 'set' for | 499 # where DIRECTION is 'get' for getters and operation return values, 'set' for |
500 # setters and operation arguments. INTERFACE and MEMBER are the idl names. | 500 # setters and operation arguments. INTERFACE and MEMBER are the idl names. |
501 # | 501 # |
502 | 502 |
503 _serialize_SSV = Conversion('convertDartToNative_SerializedScriptValue', | 503 _serialize_SSV = Conversion('_convertDartToNative_SerializedScriptValue', |
504 'dynamic', 'dynamic') | 504 'dynamic', 'dynamic') |
505 | 505 |
506 dart2js_conversions = { | 506 dart2js_conversions = { |
507 # Wrap non-local Windows. We need to check EventTarget (the base type) | 507 # Wrap non-local Windows. We need to check EventTarget (the base type) |
508 # as well. Note, there are no functions that take a non-local Window | 508 # as well. Note, there are no functions that take a non-local Window |
509 # as a parameter / setter. | 509 # as a parameter / setter. |
510 'DOMWindow get': | 510 'DOMWindow get': |
511 Conversion('_convertNativeToDart_Window', 'dynamic', 'Window'), | 511 Conversion('_convertNativeToDart_Window', 'dynamic', 'Window'), |
512 'EventTarget get': | 512 'EventTarget get': |
513 Conversion('_convertNativeToDart_EventTarget', 'dynamic', | 513 Conversion('_convertNativeToDart_EventTarget', 'dynamic', |
514 'EventTarget'), | 514 'EventTarget'), |
515 'EventTarget set': | 515 'EventTarget set': |
516 Conversion('_convertDartToNative_EventTarget', 'EventTarget', | 516 Conversion('_convertDartToNative_EventTarget', 'EventTarget', |
517 'dynamic'), | 517 'dynamic'), |
518 | 518 |
519 'IDBKey get': | 519 'IDBKey get': |
520 Conversion('_convertNativeToDart_IDBKey', 'dynamic', 'dynamic'), | 520 Conversion('_convertNativeToDart_IDBKey', 'dynamic', 'dynamic'), |
521 'IDBKey set': | 521 'IDBKey set': |
522 Conversion('_convertDartToNative_IDBKey', 'dynamic', 'dynamic'), | 522 Conversion('_convertDartToNative_IDBKey', 'dynamic', 'dynamic'), |
523 | 523 |
524 'ImageData get': | 524 'ImageData get': |
525 Conversion('_convertNativeToDart_ImageData', 'dynamic', 'ImageData'), | 525 Conversion('_convertNativeToDart_ImageData', 'dynamic', 'ImageData'), |
526 'ImageData set': | 526 'ImageData set': |
527 Conversion('_convertDartToNative_ImageData', 'ImageData', 'dynamic'), | 527 Conversion('_convertDartToNative_ImageData', 'ImageData', 'dynamic'), |
528 | 528 |
529 'Dictionary get': | 529 'Dictionary get': |
530 Conversion('convertNativeToDart_Dictionary', 'dynamic', 'Map'), | 530 Conversion('_convertNativeToDart_Dictionary', 'dynamic', 'Map'), |
531 'Dictionary set': | 531 'Dictionary set': |
532 Conversion('convertDartToNative_Dictionary', 'Map', 'dynamic'), | 532 Conversion('_convertDartToNative_Dictionary', 'Map', 'dynamic'), |
533 | 533 |
534 'DOMString[] set': | 534 'DOMString[] set': |
535 Conversion('convertDartToNative_StringArray', 'List<String>', 'List'), | 535 Conversion('_convertDartToNative_StringArray', 'List<String>', 'List'), |
536 | 536 |
537 'any set IDBObjectStore.add': _serialize_SSV, | 537 'any set IDBObjectStore.add': _serialize_SSV, |
538 'any set IDBObjectStore.put': _serialize_SSV, | 538 'any set IDBObjectStore.put': _serialize_SSV, |
539 'any set IDBCursor.update': _serialize_SSV, | 539 'any set IDBCursor.update': _serialize_SSV, |
540 | 540 |
541 # postMessage | 541 # postMessage |
542 'any set DedicatedWorkerContext.postMessage': _serialize_SSV, | 542 'any set DedicatedWorkerContext.postMessage': _serialize_SSV, |
543 'any set MessagePort.postMessage': _serialize_SSV, | 543 'any set MessagePort.postMessage': _serialize_SSV, |
544 'SerializedScriptValue set DOMWindow.postMessage': _serialize_SSV, | 544 'SerializedScriptValue set DOMWindow.postMessage': _serialize_SSV, |
545 'SerializedScriptValue set Worker.postMessage': _serialize_SSV, | 545 'SerializedScriptValue set Worker.postMessage': _serialize_SSV, |
546 | 546 |
547 # receiving message via MessageEvent | 547 # receiving message via MessageEvent |
548 'DOMObject get MessageEvent.data': | 548 'DOMObject get MessageEvent.data': |
549 Conversion('convertNativeToDart_SerializedScriptValue', | 549 Conversion('_convertNativeToDart_SerializedScriptValue', |
550 'dynamic', 'dynamic'), | 550 'dynamic', 'dynamic'), |
551 | 551 |
552 'DOMObject get PopStateEvent.state': | 552 'DOMObject get PopStateEvent.state': |
553 Conversion('convertNativeToDart_SerializedScriptValue', | 553 Conversion('_convertNativeToDart_SerializedScriptValue', |
554 'dynamic', 'dynamic'), | 554 'dynamic', 'dynamic'), |
555 | 555 |
556 # IDBAny is problematic. Some uses are just a union of other IDB types, | 556 # IDBAny is problematic. Some uses are just a union of other IDB types, |
557 # which need no conversion.. Others include data values which require | 557 # which need no conversion.. Others include data values which require |
558 # serialized script value processing. | 558 # serialized script value processing. |
559 'IDBAny get IDBCursorWithValue.value': | 559 'IDBAny get IDBCursorWithValue.value': |
560 Conversion('_convertNativeToDart_IDBAny', 'dynamic', 'dynamic'), | 560 Conversion('_convertNativeToDart_IDBAny', 'dynamic', 'dynamic'), |
561 | 561 |
562 # This is problematic. The result property of IDBRequest is used for | 562 # This is problematic. The result property of IDBRequest is used for |
563 # all requests. Read requests like IDBDataStore.getObject need | 563 # all requests. Read requests like IDBDataStore.getObject need |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
613 'IDBRequest.result': "@Creates('Null')", | 613 'IDBRequest.result': "@Creates('Null')", |
614 | 614 |
615 # The source is usually a participant in the operation that generated the | 615 # The source is usually a participant in the operation that generated the |
616 # IDBRequest. | 616 # IDBRequest. |
617 'IDBRequest.source': "@Creates('Null')", | 617 'IDBRequest.source': "@Creates('Null')", |
618 | 618 |
619 'IDBFactory.open': "@Creates('IDBDatabase')", | 619 'IDBFactory.open': "@Creates('IDBDatabase')", |
620 | 620 |
621 'IDBObjectStore.put': "@_annotation_Creates_IDBKey", | 621 'IDBObjectStore.put': "@_annotation_Creates_IDBKey", |
622 'IDBObjectStore.add': "@_annotation_Creates_IDBKey", | 622 'IDBObjectStore.add': "@_annotation_Creates_IDBKey", |
623 'IDBObjectStore.get': "@annotation_Creates_SerializedScriptValue", | 623 'IDBObjectStore.get': "@_annotation_Creates_SerializedScriptValue", |
624 'IDBObjectStore.openCursor': "@Creates('IDBCursor')", | 624 'IDBObjectStore.openCursor': "@Creates('IDBCursor')", |
625 | 625 |
626 'IDBIndex.get': "@annotation_Creates_SerializedScriptValue", | 626 'IDBIndex.get': "@_annotation_Creates_SerializedScriptValue", |
627 'IDBIndex.getKey': | 627 'IDBIndex.getKey': |
628 "@annotation_Creates_SerializedScriptValue " | 628 "@_annotation_Creates_SerializedScriptValue " |
629 # The source is the object store behind the index. | 629 # The source is the object store behind the index. |
630 "@Creates('IDBObjectStore')", | 630 "@Creates('IDBObjectStore')", |
631 'IDBIndex.openCursor': "@Creates('IDBCursor')", | 631 'IDBIndex.openCursor': "@Creates('IDBCursor')", |
632 'IDBIndex.openKeyCursor': "@Creates('IDBCursor')", | 632 'IDBIndex.openKeyCursor': "@Creates('IDBCursor')", |
633 | 633 |
634 'IDBCursorWithValue.value': | 634 'IDBCursorWithValue.value': |
635 '@annotation_Creates_SerializedScriptValue ' | 635 '@_annotation_Creates_SerializedScriptValue ' |
636 '@annotation_Returns_SerializedScriptValue', | 636 '@_annotation_Returns_SerializedScriptValue', |
637 | 637 |
638 'IDBCursor.key': "@_annotation_Creates_IDBKey @_annotation_Returns_IDBKey", | 638 'IDBCursor.key': "@_annotation_Creates_IDBKey @_annotation_Returns_IDBKey", |
639 | 639 |
640 '+IDBRequest': "@Returns('IDBRequest') @Creates('IDBRequest')", | 640 '+IDBRequest': "@Returns('IDBRequest') @Creates('IDBRequest')", |
641 | 641 |
642 '+IDBOpenDBRequest': "@Returns('IDBRequest') @Creates('IDBRequest')", | 642 '+IDBOpenDBRequest': "@Returns('IDBRequest') @Creates('IDBRequest')", |
643 '+IDBVersionChangeRequest': "@Returns('IDBRequest') @Creates('IDBRequest')", | 643 '+IDBVersionChangeRequest': "@Returns('IDBRequest') @Creates('IDBRequest')", |
644 | 644 |
645 | 645 |
646 'MessageEvent.ports': "@Creates('=List')", | 646 'MessageEvent.ports': "@Creates('=List')", |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1079 'CSSValueList': TypeData(clazz='Interface', | 1079 'CSSValueList': TypeData(clazz='Interface', |
1080 item_type='CSSValue', suppress_interface=True), | 1080 item_type='CSSValue', suppress_interface=True), |
1081 'DOMMimeTypeArray': TypeData(clazz='Interface', item_type='DOMMimeType'), | 1081 'DOMMimeTypeArray': TypeData(clazz='Interface', item_type='DOMMimeType'), |
1082 'DOMPluginArray': TypeData(clazz='Interface', item_type='DOMPlugin'), | 1082 'DOMPluginArray': TypeData(clazz='Interface', item_type='DOMPlugin'), |
1083 'DOMStringList': TypeData(clazz='Interface', item_type='DOMString', | 1083 'DOMStringList': TypeData(clazz='Interface', item_type='DOMString', |
1084 suppress_interface=True, custom_to_native=True), | 1084 suppress_interface=True, custom_to_native=True), |
1085 'EntryArray': TypeData(clazz='Interface', item_type='Entry', | 1085 'EntryArray': TypeData(clazz='Interface', item_type='Entry', |
1086 suppress_interface=True), | 1086 suppress_interface=True), |
1087 'EntryArraySync': TypeData(clazz='Interface', item_type='EntrySync', | 1087 'EntryArraySync': TypeData(clazz='Interface', item_type='EntrySync', |
1088 suppress_interface=True), | 1088 suppress_interface=True), |
1089 'FileList': TypeData(clazz='Interface', item_type='File'), | 1089 'FileList': TypeData(clazz='Interface', item_type='File', |
| 1090 suppress_interface=True), |
1090 'GamepadList': TypeData(clazz='Interface', item_type='Gamepad', | 1091 'GamepadList': TypeData(clazz='Interface', item_type='Gamepad', |
1091 suppress_interface=True), | 1092 suppress_interface=True), |
1092 'HTMLAllCollection': TypeData(clazz='Interface', item_type='Node'), | 1093 'HTMLAllCollection': TypeData(clazz='Interface', item_type='Node'), |
1093 'HTMLCollection': TypeData(clazz='Interface', item_type='Node'), | 1094 'HTMLCollection': TypeData(clazz='Interface', item_type='Node'), |
1094 'MediaStreamList': TypeData(clazz='Interface', | 1095 'MediaStreamList': TypeData(clazz='Interface', |
1095 item_type='MediaStream', suppress_interface=True), | 1096 item_type='MediaStream', suppress_interface=True), |
1096 'NamedNodeMap': TypeData(clazz='Interface', item_type='Node'), | 1097 'NamedNodeMap': TypeData(clazz='Interface', item_type='Node'), |
1097 'NodeList': TypeData(clazz='Interface', item_type='Node', | 1098 'NodeList': TypeData(clazz='Interface', item_type='Node', |
1098 suppress_interface=True), | 1099 suppress_interface=True), |
1099 'SVGAnimatedLengthList': TypeData(clazz='Interface', | 1100 'SVGAnimatedLengthList': TypeData(clazz='Interface', |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1200 self) | 1201 self) |
1201 | 1202 |
1202 if type_data.clazz == 'SVGTearOff': | 1203 if type_data.clazz == 'SVGTearOff': |
1203 dart_interface_name = self._renamer.RenameInterface( | 1204 dart_interface_name = self._renamer.RenameInterface( |
1204 self._database.GetInterface(type_name)) | 1205 self._database.GetInterface(type_name)) |
1205 return SVGTearOffIDLTypeInfo( | 1206 return SVGTearOffIDLTypeInfo( |
1206 type_name, type_data, dart_interface_name, self) | 1207 type_name, type_data, dart_interface_name, self) |
1207 | 1208 |
1208 class_name = '%sIDLTypeInfo' % type_data.clazz | 1209 class_name = '%sIDLTypeInfo' % type_data.clazz |
1209 return globals()[class_name](type_name, type_data) | 1210 return globals()[class_name](type_name, type_data) |
OLD | NEW |