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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 new_operation.arguments = new_operation.arguments[:i] | 251 new_operation.arguments = new_operation.arguments[:i] |
252 split_operations.append(new_operation) | 252 split_operations.append(new_operation) |
253 split_operations.append(operation) | 253 split_operations.append(operation) |
254 | 254 |
255 # Zip together arguments from each overload by position, then convert | 255 # Zip together arguments from each overload by position, then convert |
256 # to a dart argument. | 256 # to a dart argument. |
257 args = map(lambda *args: _DartArg(args, interface), | 257 args = map(lambda *args: _DartArg(args, interface), |
258 *(op.arguments for op in split_operations)) | 258 *(op.arguments for op in split_operations)) |
259 | 259 |
260 info = OperationInfo() | 260 info = OperationInfo() |
| 261 info.operations = operations |
261 info.overloads = split_operations | 262 info.overloads = split_operations |
262 info.declared_name = operations[0].id | 263 info.declared_name = operations[0].id |
263 info.name = operations[0].ext_attrs.get('DartName', info.declared_name) | 264 info.name = operations[0].ext_attrs.get('DartName', info.declared_name) |
264 info.constructor_name = None | 265 info.constructor_name = None |
265 info.js_name = info.declared_name | 266 info.js_name = info.declared_name |
266 info.type_name = DartType(operations[0].type.id) # TODO: widen. | 267 info.type_name = DartType(operations[0].type.id) # TODO: widen. |
267 info.param_infos = args | 268 info.param_infos = args |
268 return info | 269 return info |
269 | 270 |
270 | 271 |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 return self._idl_type | 522 return self._idl_type |
522 | 523 |
523 def dart_type(self): | 524 def dart_type(self): |
524 return self._dart_type or self._idl_type | 525 return self._dart_type or self._idl_type |
525 | 526 |
526 def native_type(self): | 527 def native_type(self): |
527 return self._native_type or self._idl_type | 528 return self._native_type or self._idl_type |
528 | 529 |
529 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): | 530 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): |
530 if 'Callback' in idl_node.ext_attrs: | 531 if 'Callback' in idl_node.ext_attrs: |
531 if 'RequiredCppParameter' in idl_node.ext_attrs: | 532 if set(['Optional', 'Callback']).issubset(idl_node.ext_attrs.keys()): |
532 flag = 'DartUtilities::ConvertNullToDefaultValue' | 533 flag = 'DartUtilities::ConvertNullToDefaultValue' |
533 else: | 534 else: |
534 flag = 'DartUtilities::ConvertNone' | 535 flag = 'DartUtilities::ConvertNone' |
535 emitter.Emit( | 536 emitter.Emit( |
536 '\n' | 537 '\n' |
537 ' RefPtr<$TYPE> $NAME = Dart$IDL_TYPE::create($HANDLE, $FLAG, exc
eption);\n' | 538 ' RefPtr<$TYPE> $NAME = Dart$IDL_TYPE::create($HANDLE, $FLAG, exc
eption);\n' |
538 ' if (exception)\n' | 539 ' if (exception)\n' |
539 ' goto fail;\n', | 540 ' goto fail;\n', |
540 TYPE=self.native_type(), | 541 TYPE=self.native_type(), |
541 NAME=name, | 542 NAME=name, |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 def __init__(self, idl_type, dart_type, native_type=None, | 631 def __init__(self, idl_type, dart_type, native_type=None, |
631 webcore_getter_name='getAttribute', | 632 webcore_getter_name='getAttribute', |
632 webcore_setter_name='setAttribute'): | 633 webcore_setter_name='setAttribute'): |
633 super(PrimitiveIDLTypeInfo, self).__init__(idl_type, dart_type=dart_type, | 634 super(PrimitiveIDLTypeInfo, self).__init__(idl_type, dart_type=dart_type, |
634 native_type=native_type) | 635 native_type=native_type) |
635 self._webcore_getter_name = webcore_getter_name | 636 self._webcore_getter_name = webcore_getter_name |
636 self._webcore_setter_name = webcore_setter_name | 637 self._webcore_setter_name = webcore_setter_name |
637 | 638 |
638 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): | 639 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): |
639 arguments = [handle] | 640 arguments = [handle] |
640 if idl_node.ext_attrs.get('Optional') == 'DefaultIsNullString' or 'RequiredC
ppParameter' in idl_node.ext_attrs: | 641 if idl_node.ext_attrs.get('Optional') == 'DefaultIsNullString': |
641 arguments.append('DartUtilities::ConvertNullToDefaultValue') | 642 arguments.append('DartUtilities::ConvertNullToDefaultValue') |
642 emitter.Emit( | 643 emitter.Emit( |
643 '\n' | 644 '\n' |
644 ' const ParameterAdapter<$TYPE> $NAME($ARGUMENTS);\n' | 645 ' const ParameterAdapter<$TYPE> $NAME($ARGUMENTS);\n' |
645 ' if (!$NAME.conversionSuccessful()) {\n' | 646 ' if (!$NAME.conversionSuccessful()) {\n' |
646 ' exception = $NAME.exception();\n' | 647 ' exception = $NAME.exception();\n' |
647 ' goto fail;\n' | 648 ' goto fail;\n' |
648 ' }\n', | 649 ' }\n', |
649 TYPE=self.native_type(), | 650 TYPE=self.native_type(), |
650 NAME=name, | 651 NAME=name, |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
795 '"SVGAnimatedListPropertyTearOff.h"', | 796 '"SVGAnimatedListPropertyTearOff.h"', |
796 '"SVGTransformListPropertyTearOff.h"', | 797 '"SVGTransformListPropertyTearOff.h"', |
797 '"SVGPathSegListPropertyTearOff.h"', | 798 '"SVGPathSegListPropertyTearOff.h"', |
798 ] | 799 ] |
799 | 800 |
800 def GetIDLTypeInfo(idl_type_name): | 801 def GetIDLTypeInfo(idl_type_name): |
801 match = re.match(r'sequence<(\w+)>$', idl_type_name) | 802 match = re.match(r'sequence<(\w+)>$', idl_type_name) |
802 if match: | 803 if match: |
803 return SequenceIDLTypeInfo(idl_type_name, GetIDLTypeInfo(match.group(1))) | 804 return SequenceIDLTypeInfo(idl_type_name, GetIDLTypeInfo(match.group(1))) |
804 return _idl_type_registry.get(idl_type_name, IDLTypeInfo(idl_type_name)) | 805 return _idl_type_registry.get(idl_type_name, IDLTypeInfo(idl_type_name)) |
OLD | NEW |