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

Unified Diff: client/dom/scripts/systemnative.py

Issue 9694042: Support CallWith on attributes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/dom/scripts/systemnative.py
diff --git a/client/dom/scripts/systemnative.py b/client/dom/scripts/systemnative.py
index b43ea930d01d53dbf32e8e91d61ea312de49eea1..066d344b31d4cff1813b1808f5ef3536dba6b3ce 100644
--- a/client/dom/scripts/systemnative.py
+++ b/client/dom/scripts/systemnative.py
@@ -355,6 +355,43 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator):
TO_DART_VALUE=to_dart_value_emitter.Fragments(),
DECLARATIONS=self._cpp_declarations_emitter.Fragments())
+ def _GenerateCallWithHandling(self, node, parameter_definitions_emitter, arguments):
+ if 'CallWith' not in node.ext_attrs:
+ return False
+
+ call_with = node.ext_attrs['CallWith']
+ if call_with == 'ScriptExecutionContext':
+ parameter_definitions_emitter.Emit(
+ '\n'
+ ' ScriptExecutionContext* context = DartUtilities::scriptExecutionContext();\n'
+ ' if (!context)\n'
+ ' return;\n')
+ arguments.append('context')
+ return False
+
+ if call_with == 'ScriptArguments|CallStack':
+ self._cpp_impl_includes.add('DOMWindow')
+ self._cpp_impl_includes.add('ScriptArguments')
+ self._cpp_impl_includes.add('ScriptCallStack')
+ self._cpp_impl_includes.add('V8Proxy')
+ self._cpp_impl_includes.add('v8')
+ parameter_definitions_emitter.Emit(
+ '\n'
+ ' v8::HandleScope handleScope;\n'
+ ' v8::Context::Scope scope(V8Proxy::mainWorldContext(DartUtilities::domWindowForCurrentIsolate()->frame()));\n'
+ ' Dart_Handle customArgument = Dart_GetNativeArgument(args, $INDEX);\n'
+ ' RefPtr<ScriptArguments> scriptArguments(DartUtilities::createScriptArguments(customArgument, exception));\n'
+ ' if (!scriptArguments)\n'
+ ' goto fail;\n'
+ ' RefPtr<ScriptCallStack> scriptCallStack(DartUtilities::createScriptCallStack());\n'
+ ' if (!scriptCallStack->size())\n'
+ ' return;\n',
+ INDEX=len(node.arguments))
+ arguments.extend(['scriptArguments', 'scriptCallStack'])
+ return True
+
+ return False
+
def AddAttribute(self, getter, setter):
# FIXME: Dartium does not support attribute event listeners. However, JS
# implementation falls back to them when addEventListener is not available.
@@ -393,6 +430,10 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator):
return
arguments = []
+ parameter_definitions_emitter = emitter.Emitter()
+ raises_exceptions = self._GenerateCallWithHandling(attr, parameter_definitions_emitter, arguments)
+ raises_exceptions = raises_exceptions or attr.get_raises
+
if 'Reflect' in attr.ext_attrs:
webcore_function_name = GetIDLTypeInfo(attr.type.id).webcore_getter_name()
if 'URL' in attr.ext_attrs:
@@ -418,8 +459,8 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator):
function_expression = self._GenerateWebCoreFunctionExpression(webcore_function_name, attr)
invocation = self._GenerateWebCoreInvocation(function_expression,
arguments, attr.type.id, attr.ext_attrs, attr.get_raises)
- self._GenerateNativeCallback(cpp_callback_name, '', True, invocation,
- raises_exceptions=attr.get_raises)
+ self._GenerateNativeCallback(cpp_callback_name, parameter_definitions_emitter.Fragments(),
+ True, invocation, raises_exceptions=raises_exceptions)
def _AddSetter(self, attr):
type_info = GetIDLTypeInfo(attr.type.id)
@@ -432,6 +473,9 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator):
return
arguments = []
+ parameter_definitions_emitter = emitter.Emitter()
+ self._GenerateCallWithHandling(attr, parameter_definitions_emitter, arguments)
+
if 'Reflect' in attr.ext_attrs:
webcore_function_name = GetIDLTypeInfo(attr.type.id).webcore_setter_name()
arguments.append(self._GenerateWebCoreReflectionAttributeName(attr))
@@ -446,16 +490,14 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator):
cpp_arg_name = CppSafeName(attr.id)
arguments.append(cpp_arg_name)
- parameter_definitions_emitter = emitter.Emitter()
self._GenerateParameterAdapter(
parameter_definitions_emitter, attr, cpp_arg_name, 0)
- parameter_definitions = parameter_definitions_emitter.Fragments()
function_expression = self._GenerateWebCoreFunctionExpression(webcore_function_name, attr)
invocation = self._GenerateWebCoreInvocation(function_expression,
arguments, 'void', attr.ext_attrs, attr.set_raises)
- self._GenerateNativeCallback(cpp_callback_name, parameter_definitions,
+ self._GenerateNativeCallback(cpp_callback_name, parameter_definitions_emitter.Fragments(),
True, invocation, raises_exceptions=True)
def _HasNativeIndexGetter(self, interface):
@@ -551,37 +593,10 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator):
webcore_function_name = operation.ext_attrs.get('ImplementedAs', operation.id)
parameter_definitions_emitter = emitter.Emitter()
- raises_dart_exceptions = len(operation.arguments) > 0 or operation.raises
arguments = []
-
- # Process 'CallWith' argument.
- if 'CallWith' in operation.ext_attrs:
- call_with = operation.ext_attrs['CallWith']
- if call_with == 'ScriptExecutionContext':
- parameter_definitions_emitter.Emit(
- ' ScriptExecutionContext* context = DartUtilities::scriptExecutionContext();\n'
- ' if (!context)\n'
- ' return;\n')
- arguments.append('context')
- elif call_with == 'ScriptArguments|CallStack':
- raises_dart_exceptions = True
- self._cpp_impl_includes.add('DOMWindow')
- self._cpp_impl_includes.add('ScriptArguments')
- self._cpp_impl_includes.add('ScriptCallStack')
- self._cpp_impl_includes.add('V8Proxy')
- self._cpp_impl_includes.add('v8')
- parameter_definitions_emitter.Emit(
- ' v8::HandleScope handleScope;\n'
- ' v8::Context::Scope scope(V8Proxy::mainWorldContext(DartUtilities::domWindowForCurrentIsolate()->frame()));\n'
- ' Dart_Handle customArgument = Dart_GetNativeArgument(args, $INDEX);\n'
- ' RefPtr<ScriptArguments> scriptArguments(DartUtilities::createScriptArguments(customArgument, exception));\n'
- ' if (!scriptArguments)\n'
- ' goto fail;\n'
- ' RefPtr<ScriptCallStack> scriptCallStack(DartUtilities::createScriptCallStack());\n'
- ' if (!scriptCallStack->size())\n'
- ' return;\n',
- INDEX=len(operation.arguments))
- arguments.extend(['scriptArguments', 'scriptCallStack'])
+ raises_dart_exceptions = self._GenerateCallWithHandling(
podivilov 2012/03/14 12:28:58 Please rename to raises_exceptions.
Anton Muhin 2012/03/14 17:49:22 Sorry, it was the original name. I'll leave it fo
+ operation, parameter_definitions_emitter, arguments)
+ raises_dart_exceptions = raises_dart_exceptions or len(operation.arguments) > 0 or operation.raises
# Process Dart arguments.
for (i, argument) in enumerate(operation.arguments):
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698