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

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

Issue 11065003: Convert between Dart and JavaScript SerializedScriptValues on postMessage. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 2 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 | « lib/html/dart2js/html_dart2js.dart ('k') | lib/html/src/dart2js_Conversions.dart » ('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 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 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 """Represents a way of converting between types.""" 515 """Represents a way of converting between types."""
516 def __init__(self, name, input_type, output_type): 516 def __init__(self, name, input_type, output_type):
517 # input_type is the type of the API input (and the argument type of the 517 # input_type is the type of the API input (and the argument type of the
518 # conversion function) 518 # conversion function)
519 # output_type is the type of the API output (and the result type of the 519 # output_type is the type of the API output (and the result type of the
520 # conversion function) 520 # conversion function)
521 self.function_name = name 521 self.function_name = name
522 self.input_type = input_type 522 self.input_type = input_type
523 self.output_type = output_type 523 self.output_type = output_type
524 524
525 # TYPE -> "DIRECTION INTERFACE.MEMBER" -> conversion 525 # "TYPE DIRECTION INTERFACE.MEMBER" -> conversion
526 # TYPE -> "DIRECTION INTERFACE.*" -> conversion 526 # Specific member of interface
527 # TYPE -> "DIRECTION" -> conversion 527 # "TYPE DIRECTION INTERFACE.*" -> conversion
528 # All members of interface getting (setting) with type.
529 # "TYPE DIRECTION" -> conversion
530 # All getters (setters) of type.
528 # 531 #
529 # where DIRECTION is 'get' for getters and operation return values, 'set' for 532 # where DIRECTION is 'get' for getters and operation return values, 'set' for
530 # setters and operation arguments. INTERFACE and MEMBER are the idl names. 533 # setters and operation arguments. INTERFACE and MEMBER are the idl names.
531 # 534 #
535
536 _serialize_SSV = Conversion('_convertDartToNative_SerializedScriptValue',
537 'Dynamic', 'Dynamic')
538
532 dart2js_conversions = { 539 dart2js_conversions = {
533 'IDBKey': { 540 'IDBKey get':
534 'get': 541 Conversion('_convertNativeToDart_IDBKey', 'Dynamic', 'Dynamic'),
535 Conversion('_convertNativeToDart_IDBKey', 'Dynamic', 'Dynamic'), 542 'IDBKey set':
536 'set': 543 Conversion('_convertDartToNative_IDBKey', 'Dynamic', 'Dynamic'),
537 Conversion('_convertDartToNative_IDBKey', 'Dynamic', 'Dynamic'),
538 },
539 'ImageData': {
540 'get':
541 Conversion('_convertNativeToDart_ImageData', 'Dynamic', 'ImageData'),
542 'set':
543 Conversion('_convertDartToNative_ImageData', 'ImageData', 'Dynamic')
544 },
545 'Dictionary': {
546 'get':
547 Conversion('_convertNativeToDart_Dictionary', 'Dynamic', 'Map'),
548 'set':
549 Conversion('_convertDartToNative_Dictionary', 'Map', 'Dynamic'),
550 },
551 544
552 'DOMString[]': { 545 'ImageData get':
553 'set': 546 Conversion('_convertNativeToDart_ImageData', 'Dynamic', 'ImageData'),
554 Conversion( 547 'ImageData set':
555 '_convertDartToNative_StringArray', 'List<String>', 'List'), 548 Conversion('_convertDartToNative_ImageData', 'ImageData', 'Dynamic'),
556 },
557 549
558 'any': { 550 'Dictionary get':
559 'set IDBObjectStore.add': 551 Conversion('_convertNativeToDart_Dictionary', 'Dynamic', 'Map'),
560 Conversion('_convertDartToNative_SerializedScriptValue', 552 'Dictionary set':
561 'Dynamic', 'Dynamic'), 553 Conversion('_convertDartToNative_Dictionary', 'Map', 'Dynamic'),
562 'set IDBObjectStore.put': 554
563 Conversion('_convertDartToNative_SerializedScriptValue', 555 'DOMString[] set':
564 'Dynamic', 'Dynamic'), 556 Conversion('_convertDartToNative_StringArray', 'List<String>', 'List'),
565 'set IDBCursor.update': 557
566 Conversion('_convertDartToNative_SerializedScriptValue', 558 'any set IDBObjectStore.add': _serialize_SSV,
567 'Dynamic', 'Dynamic'), 559 'any set IDBObjectStore.put': _serialize_SSV,
568 }, 560 'any set IDBCursor.update': _serialize_SSV,
561
562 # postMessage
563 'any set DedicatedWorkerContext.postMessage': _serialize_SSV,
564 'any set MessagePort.postMessage': _serialize_SSV,
565 'SerializedScriptValue set DOMWindow.postMessage': _serialize_SSV,
566 'SerializedScriptValue set Worker.postMessage': _serialize_SSV,
567
568 # receiving message via MessageEvent
569 'DOMObject get MessageEvent.data':
570 Conversion('_convertNativeToDart_SerializedScriptValue',
571 'Dynamic', 'Dynamic'),
569 572
570 573
571 # IDBAny is problematic. Some uses are just a union of other IDB types, 574 # IDBAny is problematic. Some uses are just a union of other IDB types,
572 # which need no conversion.. Others include data values which require 575 # which need no conversion.. Others include data values which require
573 # serialized script value processing. 576 # serialized script value processing.
574 'IDBAny': { 577 'IDBAny get IDBCursorWithValue.value':
575 'get IDBCursorWithValue.value': 578 Conversion('_convertNativeToDart_IDBAny', 'Dynamic', 'Dynamic'),
576 Conversion('_convertNativeToDart_IDBAny', 'Dynamic', 'Dynamic'),
577 579
578 # This is problematic. The result property of IDBRequest is used for 580 # This is problematic. The result property of IDBRequest is used for
579 # all requests. Read requests like IDBDataStore.getObject need 581 # all requests. Read requests like IDBDataStore.getObject need
580 # conversion, but other requests like opening a database return 582 # conversion, but other requests like opening a database return
581 # something that does not need conversion. 583 # something that does not need conversion.
582 'get IDBRequest.result': 584 'IDBAny get IDBRequest.result':
583 Conversion('_convertNativeToDart_IDBAny', 'Dynamic', 'Dynamic'), 585 Conversion('_convertNativeToDart_IDBAny', 'Dynamic', 'Dynamic'),
584 586
585 # "source: On getting, returns the IDBObjectStore or IDBIndex that the 587 # "source: On getting, returns the IDBObjectStore or IDBIndex that the
586 # cursor is iterating. ...". So we should not try to convert it. 588 # cursor is iterating. ...". So we should not try to convert it.
587 'get IDBCursor.source': None, 589 'IDBAny get IDBCursor.source': None,
588 590
589 # Should be either a DOMString, an Array of DOMStrings or null. 591 # Should be either a DOMString, an Array of DOMStrings or null.
590 'get IDBObjectStore.keyPath': None 592 'IDBAny get IDBObjectStore.keyPath': None,
591 },
592 } 593 }
593 594
594 def FindConversion(idl_type, direction, interface, member): 595 def FindConversion(idl_type, direction, interface, member):
595 table = dart2js_conversions.get(idl_type) 596 table = dart2js_conversions
596 if table: 597 return (table.get('%s %s %s.%s' % (idl_type, direction, interface, member)) or
597 return (table.get('%s %s.%s' % (direction, interface, member)) or 598 table.get('%s %s %s.*' % (idl_type, direction, interface)) or
598 table.get('%s %s.*' % (direction, interface)) or 599 table.get('%s %s' % (idl_type, direction)))
599 table.get(direction))
600 return None 600 return None
601 601
602 # ------------------------------------------------------------------------------ 602 # ------------------------------------------------------------------------------
603 603
604 class IDLTypeInfo(object): 604 class IDLTypeInfo(object):
605 def __init__(self, idl_type, data): 605 def __init__(self, idl_type, data):
606 self._idl_type = idl_type 606 self._idl_type = idl_type
607 self._data = data 607 self._data = data
608 608
609 def idl_type(self): 609 def idl_type(self):
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 if type_data.clazz == 'Interface': 1029 if type_data.clazz == 'Interface':
1030 if self._database.HasInterface(type_name): 1030 if self._database.HasInterface(type_name):
1031 dart_interface_name = self._renamer.RenameInterface( 1031 dart_interface_name = self._renamer.RenameInterface(
1032 self._database.GetInterface(type_name)) 1032 self._database.GetInterface(type_name))
1033 else: 1033 else:
1034 dart_interface_name = type_name 1034 dart_interface_name = type_name
1035 return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name) 1035 return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name)
1036 1036
1037 class_name = '%sIDLTypeInfo' % type_data.clazz 1037 class_name = '%sIDLTypeInfo' % type_data.clazz
1038 return globals()[class_name](type_name, type_data) 1038 return globals()[class_name](type_name, type_data)
OLDNEW
« no previous file with comments | « lib/html/dart2js/html_dart2js.dart ('k') | lib/html/src/dart2js_Conversions.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698