| 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 systems to generate | 6 """This module provides shared functionality for the systems to generate |
| 7 frog binding from the IDL database.""" | 7 frog binding from the IDL database.""" |
| 8 | 8 |
| 9 import os | 9 import os |
| 10 from generator import * | 10 from generator import * |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 self._members_emitter = self._dart_code.Emit( | 121 self._members_emitter = self._dart_code.Emit( |
| 122 self._template, | 122 self._template, |
| 123 #class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC { | 123 #class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC { |
| 124 #$!MEMBERS | 124 #$!MEMBERS |
| 125 #} | 125 #} |
| 126 CLASSNAME=self._class_name, | 126 CLASSNAME=self._class_name, |
| 127 EXTENDS=extends, | 127 EXTENDS=extends, |
| 128 IMPLEMENTS=' implements ' + ', '.join(implements), | 128 IMPLEMENTS=' implements ' + ', '.join(implements), |
| 129 NATIVESPEC=' native "' + native_spec + '"') | 129 NATIVESPEC=' native "' + native_spec + '"') |
| 130 | 130 |
| 131 element_type = MaybeTypedArrayElementType(interface) | |
| 132 if element_type: | |
| 133 self.AddTypedArrayConstructors(element_type) | |
| 134 | |
| 135 # Emit a factory provider class for the constructor. | 131 # Emit a factory provider class for the constructor. |
| 136 constructor_info = AnalyzeConstructor(interface) | 132 constructor_info = AnalyzeConstructor(interface) |
| 137 if constructor_info: | 133 if constructor_info: |
| 138 self._EmitFactoryProvider(interface_name, constructor_info) | 134 self._EmitFactoryProvider(interface_name, constructor_info) |
| 139 | 135 |
| 140 | 136 |
| 141 def FinishInterface(self): | 137 def FinishInterface(self): |
| 142 """.""" | 138 """.""" |
| 143 pass | 139 pass |
| 144 | 140 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 ' }\n', | 334 ' }\n', |
| 339 TYPE=self._NarrowInputType(element_type)) | 335 TYPE=self._NarrowInputType(element_type)) |
| 340 | 336 |
| 341 # TODO(sra): Use separate mixins for mutable implementations of List<T>. | 337 # TODO(sra): Use separate mixins for mutable implementations of List<T>. |
| 342 # TODO(sra): Use separate mixins for typed array implementations of List<T>. | 338 # TODO(sra): Use separate mixins for typed array implementations of List<T>. |
| 343 template_file = 'immutable_list_mixin.darttemplate' | 339 template_file = 'immutable_list_mixin.darttemplate' |
| 344 template = self._system._templates.Load(template_file) | 340 template = self._system._templates.Load(template_file) |
| 345 self._members_emitter.Emit(template, E=DartType(element_type)) | 341 self._members_emitter.Emit(template, E=DartType(element_type)) |
| 346 | 342 |
| 347 | 343 |
| 348 def AddTypedArrayConstructors(self, element_type): | |
| 349 self._members_emitter.Emit( | |
| 350 '\n' | |
| 351 ' factory $CTOR(int length) => _construct_$CTOR(length);\n' | |
| 352 '\n' | |
| 353 ' factory $CTOR.fromList(List<$TYPE> list) => _construct_$CTOR(list);\n
' | |
| 354 '\n' | |
| 355 ' factory $CTOR.fromBuffer(ArrayBuffer buffer) => _construct_$CTOR(buff
er);\n' | |
| 356 '\n' | |
| 357 ' static _construct_$CTOR(arg) native \'return new $CTOR(arg);\';\n', | |
| 358 CTOR=self._interface.id, | |
| 359 TYPE=DartType(element_type)) | |
| 360 | |
| 361 | |
| 362 def AddOperation(self, info): | 344 def AddOperation(self, info): |
| 363 """ | 345 """ |
| 364 Arguments: | 346 Arguments: |
| 365 info: An OperationInfo object. | 347 info: An OperationInfo object. |
| 366 """ | 348 """ |
| 367 # TODO(vsm): Handle overloads. | 349 # TODO(vsm): Handle overloads. |
| 368 params = info.ParametersImplementationDeclaration( | 350 params = info.ParametersImplementationDeclaration( |
| 369 lambda type_name: self._NarrowInputType(type_name)) | 351 lambda type_name: self._NarrowInputType(type_name)) |
| 370 | 352 |
| 353 native_string = '' |
| 354 if info.declared_name != info.name: |
| 355 native_string = " '%s'" % info.declared_name |
| 356 |
| 371 native_body = dom_frog_native_bodies.get( | 357 native_body = dom_frog_native_bodies.get( |
| 372 self._interface.id + '.' + info.name, '') | 358 self._interface.id + '.' + info.name, '') |
| 373 if native_body: | 359 if native_body: |
| 374 native_body = " '''" + native_body + "'''" | 360 native_string = " '''" + native_body + "'''" |
| 375 | 361 |
| 376 self._members_emitter.Emit( | 362 self._members_emitter.Emit( |
| 377 '\n' | 363 '\n' |
| 378 ' $TYPE $NAME($PARAMS) native$NATIVESTRING;\n', | 364 ' $TYPE $NAME($PARAMS) native$NATIVESTRING;\n', |
| 379 TYPE=self._NarrowOutputType(info.type_name), | 365 TYPE=self._NarrowOutputType(info.type_name), |
| 380 NAME=info.name, | 366 NAME=info.name, |
| 381 PARAMS=params, | 367 PARAMS=params, |
| 382 NATIVESTRING=native_body) | 368 NATIVESTRING=native_string) |
| OLD | NEW |