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

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

Issue 10807007: Support proper emission of V8Scope handles. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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 | « lib/dom/scripts/generator.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/dom/scripts/systemnative.py
diff --git a/lib/dom/scripts/systemnative.py b/lib/dom/scripts/systemnative.py
index ec661bd68bf6640ded5bc809e994713e638e9bf6..6415fd3c417604f75ab8749d2106d5043619ce1f 100644
--- a/lib/dom/scripts/systemnative.py
+++ b/lib/dom/scripts/systemnative.py
@@ -316,7 +316,9 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
parameter_definitions=parameter_definitions_emitter.Fragments(),
needs_receiver=False, invocation=invocation,
raises_exceptions=raises_exceptions,
- runtime_check=runtime_check)
+ runtime_check=runtime_check,
+ requires_v8_scope=self._RequiresV8Scope(ext_attrs, constructor_info.idl_args))
+
def _ImplClassName(self, interface_name):
return '_%sImpl' % interface_name
@@ -452,15 +454,10 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
return False
if call_with == 'ScriptArguments|CallStack':
- self._cpp_impl_includes.add('"DOMWindow.h"')
self._cpp_impl_includes.add('"ScriptArguments.h"')
self._cpp_impl_includes.add('"ScriptCallStack.h"')
- self._cpp_impl_includes.add('"V8Proxy.h"')
- self._cpp_impl_includes.add('"v8.h"')
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'
@@ -494,7 +491,8 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
arguments = []
parameter_definitions_emitter = emitter.Emitter()
- raises_exceptions = self._GenerateCallWithHandling(attr, parameter_definitions_emitter, arguments)
+ raises_exceptions = self._GenerateCallWithHandling(
+ attr, parameter_definitions_emitter, arguments)
raises_exceptions = raises_exceptions or attr.get_raises
if 'Reflect' in attr.ext_attrs:
@@ -519,7 +517,9 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
invocation = self._GenerateWebCoreInvocation(function_expression,
arguments, attr.type.id, attr.ext_attrs, attr.get_raises)
self._GenerateNativeCallback(cpp_callback_name, parameter_definitions_emitter.Fragments(),
- True, invocation, raises_exceptions=raises_exceptions, runtime_check=None)
+ True, invocation, raises_exceptions=raises_exceptions,
+ runtime_check=None,
+ requires_v8_scope=self._RequiresV8Scope(attr.ext_attrs, []))
def _AddSetter(self, attr, html_name):
type_info = self._TypeInfo(attr.type.id)
@@ -555,7 +555,9 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
arguments, 'void', attr.ext_attrs, attr.set_raises)
self._GenerateNativeCallback(cpp_callback_name, parameter_definitions_emitter.Fragments(),
- True, invocation, raises_exceptions=True, runtime_check=None)
+ True, invocation, raises_exceptions=True,
+ runtime_check=None,
+ requires_v8_scope=self._RequiresV8Scope(attr.ext_attrs, [attr]))
def AddIndexer(self, element_type):
"""Adds all the methods required to complete implementation of List."""
@@ -791,13 +793,19 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
parameter_definitions=parameter_definitions_emitter.Fragments(),
needs_receiver=not operation.is_static, invocation=invocation,
raises_exceptions=raises_exceptions,
- runtime_check=None)
+ runtime_check=None,
+ requires_v8_scope=self._RequiresV8Scope(operation.ext_attrs, arguments))
def _GenerateNativeCallback(self, callback_name, parameter_definitions,
- needs_receiver, invocation, raises_exceptions, runtime_check):
+ needs_receiver, invocation, raises_exceptions, runtime_check,
+ requires_v8_scope):
head_emitter = emitter.Emitter()
+ if requires_v8_scope:
+ head_emitter.Emit(
+ ' V8Scope v8scope;\n\n')
+
if runtime_check:
head_emitter.Emit(
'$RUNTIME_CHECK\n',
@@ -841,14 +849,23 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
CALLBACK_NAME=callback_name,
BODY=body)
- def _GenerateToNative(self, emitter, idl_node, index,
- argument_name=None):
+ def _GenerateToNative(self, emitter, idl_node, index, argument_name=None):
"""idl_node is IDLArgument or IDLAttribute."""
type_info = self._TypeInfo(idl_node.type.id)
self._cpp_impl_includes |= set(type_info.to_native_includes())
argument_name = argument_name or idl_node.id
handle = 'Dart_GetNativeArgument(args, %i)' % index
- return type_info.emit_to_native(emitter, idl_node, argument_name, handle, self._interface.id)
+ argument_expression = type_info.emit_to_native(
+ emitter, idl_node, argument_name, handle, self._interface.id)
+ return argument_expression
+
+ def _RequiresV8Scope(self, ext_attrs, arguments):
+ if 'CallWith' in ext_attrs and ext_attrs['CallWith'] == 'ScriptArguments|CallStack':
+ return True
+ for argument in arguments:
+ if self._TypeInfo(argument.type.id).requires_v8_scope():
+ return True
+ return False
def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration,
native_suffix, is_custom):
« no previous file with comments | « lib/dom/scripts/generator.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698