Chromium Code Reviews| Index: lib/dom/scripts/systemnative.py |
| diff --git a/lib/dom/scripts/systemnative.py b/lib/dom/scripts/systemnative.py |
| index 3629bc5750dc06db5dd6792ecdeb6ea3c55839dd..ec87d8118d670136df3e623eabddb262c13921ec 100644 |
| --- a/lib/dom/scripts/systemnative.py |
| +++ b/lib/dom/scripts/systemnative.py |
| @@ -11,6 +11,7 @@ import os |
| import systemwrapping |
| from generator import * |
| from systembase import * |
| +from idlnode import IDLOperation |
| class NativeImplementationSystem(System): |
| @@ -581,11 +582,15 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
| 'Callback', True) |
| return |
| + modifier = '' |
| + if info.IsStatic(): |
| + modifier = 'static ' |
| body = self._members_emitter.Emit( |
| '\n' |
| - ' $TYPE $NAME($PARAMETERS) {\n' |
| + ' $MODIFIER$TYPE $NAME($PARAMETERS) {\n' |
| '$!BODY' |
| ' }\n', |
| + MODIFIER=modifier, |
| TYPE=info.type_name, |
| NAME=info.name, |
| PARAMETERS=info.ParametersImplementationDeclaration()) |
| @@ -629,7 +634,10 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
| NATIVENAME=native_name, |
| ARGS=argument_list) |
| # Generate binding. |
| - dart_declaration = '%s _%s(%s)' % (info.type_name, native_name, |
| + modifier = '' |
| + if operation.is_static: |
| + modifier = 'static ' |
| + dart_declaration = '%s%s _%s(%s)' % (modifier, info.type_name, native_name, |
| argument_list) |
| is_custom = 'Custom' in operation.ext_attrs |
| cpp_callback_name = self._GenerateNativeBinding( |
| @@ -648,8 +656,11 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
| raises_exceptions = raises_exceptions or len(operation.arguments) > 0 or operation.raises |
| # Process Dart arguments. |
| - for (i, argument) in enumerate(operation.arguments): |
| - if (i == len(operation.arguments) - 1 and |
| + start_index = 1 |
| + if operation.is_static: |
| + start_index = 0 |
| + for (i, argument) in enumerate(operation.arguments, start_index): |
| + if (i - start_index == len(operation.arguments) - 1 and |
| self._interface.id == 'Console' and |
| argument.id == 'arg'): |
| # FIXME: we are skipping last argument here because it was added in |
| @@ -678,7 +689,7 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
| operation.type.id, operation.ext_attrs, operation.raises) |
| self._GenerateNativeCallback(cpp_callback_name, |
| parameter_definitions=parameter_definitions_emitter.Fragments(), |
| - needs_receiver=True, invocation=invocation, |
| + needs_receiver=not operation.is_static, invocation=invocation, |
| raises_exceptions=raises_exceptions) |
| def _GenerateNativeCallback(self, callback_name, parameter_definitions, |
| @@ -740,7 +751,7 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
| ' }\n', |
| ADAPTER_TYPE=adapter_type, |
| NAME=adapter_name or idl_node.id, |
| - INDEX=index + 1, |
| + INDEX=index, |
| FLAGS=flags) |
| def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration, |
| @@ -783,6 +794,8 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
| def _GenerateWebCoreFunctionExpression(self, function_name, idl_node): |
| if 'ImplementedBy' in idl_node.ext_attrs: |
| return '%s::%s' % (idl_node.ext_attrs['ImplementedBy'], function_name) |
| + if isinstance(idl_node, IDLOperation) and idl_node.is_static: |
|
podivilov
2012/05/03 09:05:42
I doubt that static attributes will be accessible
|
| + return '%s::%s' % (self._interface_type_info.idl_type(), function_name) |
| return '%s%s' % (self._interface_type_info.receiver(), function_name) |
| def _GenerateWebCoreInvocation(self, function_expression, arguments, |