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 native binding from the IDL database.""" | 7 native binding from the IDL database.""" |
8 | 8 |
9 import emitter | 9 import emitter |
10 import os | 10 import os |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
272 self._cpp_declarations_emitter.Emit( | 272 self._cpp_declarations_emitter.Emit( |
273 '\n' | 273 '\n' |
274 'void constructorCallback(Dart_NativeArguments);\n') | 274 'void constructorCallback(Dart_NativeArguments);\n') |
275 return | 275 return |
276 | 276 |
277 raises_dom_exceptions = 'ConstructorRaisesException' in self._interface.ext_ attrs | 277 raises_dom_exceptions = 'ConstructorRaisesException' in self._interface.ext_ attrs |
278 raises_dart_exceptions = raises_dom_exceptions or len(constructor_info.idl_a rgs) > 0 | 278 raises_dart_exceptions = raises_dom_exceptions or len(constructor_info.idl_a rgs) > 0 |
279 type_info = GetIDLTypeInfo(self._interface) | 279 type_info = GetIDLTypeInfo(self._interface) |
280 arguments = [] | 280 arguments = [] |
281 parameter_definitions_emitter = emitter.Emitter() | 281 parameter_definitions_emitter = emitter.Emitter() |
282 create_function = 'create' | |
283 if 'NamedConstructor' in self._interface.ext_attrs: | |
284 raises_dart_exceptions = True | |
285 parameter_definitions_emitter.Emit( | |
286 ' DOMWindow* domWindow = DartUtilities::domWindowForCurrentIs olate();\n' | |
287 ' if (!domWindow) {\n' | |
288 ' exception = Dart_NewString("Failed to fetch domWindow") ;\n' | |
289 ' goto fail;\n' | |
290 ' }\n' | |
291 ' Document* document = domWindow->document();\n') | |
podivilov
2012/02/27 15:53:48
Our constructors seems to be very simple comparing
antonm
2012/02/27 15:59:36
I am not sure. For example, I am not sure they re
| |
292 arguments.append('document') | |
293 create_function = 'createForJSConstructor' | |
282 if 'CallWith' in self._interface.ext_attrs: | 294 if 'CallWith' in self._interface.ext_attrs: |
283 call_with = self._interface.ext_attrs['CallWith'] | 295 call_with = self._interface.ext_attrs['CallWith'] |
284 if call_with == 'ScriptExecutionContext': | 296 if call_with == 'ScriptExecutionContext': |
285 raises_dart_exceptions = True | 297 raises_dart_exceptions = True |
286 parameter_definitions_emitter.Emit( | 298 parameter_definitions_emitter.Emit( |
287 ' ScriptExecutionContext* context = DartUtilities::scriptExec utionContext();\n' | 299 ' ScriptExecutionContext* context = DartUtilities::scriptExec utionContext();\n' |
288 ' if (!context) {\n' | 300 ' if (!context) {\n' |
289 ' exception = Dart_NewString("Failed to create an object" );\n' | 301 ' exception = Dart_NewString("Failed to create an object" );\n' |
290 ' goto fail;\n' | 302 ' goto fail;\n' |
291 ' }\n') | 303 ' }\n') |
292 arguments.append('context') | 304 arguments.append('context') |
293 else: | 305 else: |
294 raise Exception('Unsupported CallWith=%s attribute' % call_with) | 306 raise Exception('Unsupported CallWith=%s attribute' % call_with) |
295 | 307 |
296 # Process constructor arguments. | 308 # Process constructor arguments. |
297 for (i, arg) in enumerate(constructor_info.idl_args): | 309 for (i, arg) in enumerate(constructor_info.idl_args): |
298 self._GenerateParameterAdapter(parameter_definitions_emitter, arg, i - 1) | 310 self._GenerateParameterAdapter(parameter_definitions_emitter, arg, i - 1) |
299 arguments.append(arg.id) | 311 arguments.append(arg.id) |
300 | 312 |
301 self._GenerateNativeCallback( | 313 self._GenerateNativeCallback( |
302 callback_name='constructorCallback', | 314 callback_name='constructorCallback', |
303 idl_node=self._interface, | 315 idl_node=self._interface, |
304 parameter_definitions=parameter_definitions_emitter.Fragments(), | 316 parameter_definitions=parameter_definitions_emitter.Fragments(), |
305 needs_receiver=False, function_name='%s::create' % type_info.native_type (), | 317 needs_receiver=False, function_name='%s::%s' % (type_info.native_type(), create_function), |
306 arguments=arguments, | 318 arguments=arguments, |
307 idl_return_type=self._interface, | 319 idl_return_type=self._interface, |
308 raises_dart_exceptions=raises_dart_exceptions, | 320 raises_dart_exceptions=raises_dart_exceptions, |
309 raises_dom_exceptions=raises_dom_exceptions) | 321 raises_dom_exceptions=raises_dom_exceptions) |
310 | 322 |
311 | 323 |
312 def _ImplClassName(self, interface_name): | 324 def _ImplClassName(self, interface_name): |
313 return interface_name + 'Implementation' | 325 return interface_name + 'Implementation' |
314 | 326 |
315 def _IsConstructable(self): | 327 def _IsConstructable(self): |
316 # FIXME: support ConstructorTemplate. | 328 # FIXME: support ConstructorTemplate. |
317 # FIXME: support NamedConstructor. | 329 return set(['CustomConstructor', 'V8CustomConstructor', 'Constructor', 'Name dConstructor']) & set(self._interface.ext_attrs) |
318 return set(['CustomConstructor', 'V8CustomConstructor', 'Constructor']) & se t(self._interface.ext_attrs) | |
319 | 330 |
320 def FinishInterface(self): | 331 def FinishInterface(self): |
321 base = self._BaseClassName(self._interface) | 332 base = self._BaseClassName(self._interface) |
322 self._dart_impl_emitter.Emit( | 333 self._dart_impl_emitter.Emit( |
323 self._templates.Load('dart_implementation.darttemplate'), | 334 self._templates.Load('dart_implementation.darttemplate'), |
324 CLASS=self._class_name, BASE=base, INTERFACE=self._interface.id, | 335 CLASS=self._class_name, BASE=base, INTERFACE=self._interface.id, |
325 MEMBERS=self._members_emitter.Fragments()) | 336 MEMBERS=self._members_emitter.Fragments()) |
326 | 337 |
327 self._GenerateCppHeader() | 338 self._GenerateCppHeader() |
328 | 339 |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
729 callback = emitter.Format(template, **template_parameters) | 740 callback = emitter.Format(template, **template_parameters) |
730 | 741 |
731 self._cpp_definitions_emitter.Emit(callback) | 742 self._cpp_definitions_emitter.Emit(callback) |
732 | 743 |
733 def _GenerateParameterAdapter(self, emitter, idl_argument, index): | 744 def _GenerateParameterAdapter(self, emitter, idl_argument, index): |
734 type_info = GetIDLTypeInfo(idl_argument.type) | 745 type_info = GetIDLTypeInfo(idl_argument.type) |
735 (adapter_type, include_name) = type_info.parameter_adapter_info() | 746 (adapter_type, include_name) = type_info.parameter_adapter_info() |
736 if include_name: | 747 if include_name: |
737 self._cpp_impl_includes[include_name] = 1 | 748 self._cpp_impl_includes[include_name] = 1 |
738 flags = '' | 749 flags = '' |
739 if idl_argument.ext_attrs.get('Optionial') == 'DefaultIsNullString': | 750 if idl_argument.ext_attrs.get('Optional') == 'DefaultIsNullString': |
podivilov
2012/02/27 15:53:48
This code is not actually used, do we really want
antonm
2012/02/27 15:59:36
Why it's not used? It's need, e.g., to make (most
podivilov
2012/02/27 16:59:49
Ok, seems like it is used for constructor paramete
| |
740 flags = ', DartUtilities::ConvertNullToEmptyString' | 751 flags = ', DartUtilities::ConvertNullToEmptyString' |
741 emitter.Emit( | 752 emitter.Emit( |
742 '\n' | 753 '\n' |
743 ' const $ADAPTER_TYPE $NAME(Dart_GetNativeArgument(args, $INDEX)$ FLAGS);\n' | 754 ' const $ADAPTER_TYPE $NAME(Dart_GetNativeArgument(args, $INDEX)$ FLAGS);\n' |
744 ' if (!$NAME.conversionSuccessful()) {\n' | 755 ' if (!$NAME.conversionSuccessful()) {\n' |
745 ' exception = $NAME.exception();\n' | 756 ' exception = $NAME.exception();\n' |
746 ' goto fail;\n' | 757 ' goto fail;\n' |
747 ' }\n', | 758 ' }\n', |
748 ADAPTER_TYPE=adapter_type, | 759 ADAPTER_TYPE=adapter_type, |
749 NAME=idl_argument.id, | 760 NAME=idl_argument.id, |
(...skipping 29 matching lines...) Expand all Loading... | |
779 namespace = 'HTMLNames' | 790 namespace = 'HTMLNames' |
780 svg_exceptions = ['class', 'id', 'onabort', 'onclick', 'onerror', 'onload', | 791 svg_exceptions = ['class', 'id', 'onabort', 'onclick', 'onerror', 'onload', |
781 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', | 792 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', |
782 'onmouseup', 'onresize', 'onscroll', 'onunload'] | 793 'onmouseup', 'onresize', 'onscroll', 'onunload'] |
783 if self._interface.id.startswith('SVG') and not attr.id in svg_exceptions: | 794 if self._interface.id.startswith('SVG') and not attr.id in svg_exceptions: |
784 namespace = 'SVGNames' | 795 namespace = 'SVGNames' |
785 self._cpp_impl_includes[namespace] = 1 | 796 self._cpp_impl_includes[namespace] = 1 |
786 | 797 |
787 attribute_name = attr.ext_attrs['Reflect'] or attr.id.lower() | 798 attribute_name = attr.ext_attrs['Reflect'] or attr.id.lower() |
788 return 'WebCore::%s::%sAttr' % (namespace, attribute_name) | 799 return 'WebCore::%s::%sAttr' % (namespace, attribute_name) |
OLD | NEW |