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

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

Issue 260893007: Initial overloading implementation in _blink (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Eliminated duplicate entry in dart.idl Created 6 years, 8 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 | « tools/dom/scripts/systemhtml.py ('k') | tools/dom/src/html_native_DOMImplementation.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/dom/scripts/systemnative.py
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index 3f3043ed8e786e3f356d20fac7de8ead75347aea..fc97bbe816790b6d1d466511cde5c994b8f6752d 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -245,7 +245,7 @@ class DartiumBackend(HtmlDartGenerator):
def __init__(self, interface, native_library_emitter,
cpp_library_emitter, options, dart_use_blink):
- super(DartiumBackend, self).__init__(interface, options)
+ super(DartiumBackend, self).__init__(interface, options, dart_use_blink)
self._interface = interface
self._cpp_library_emitter = cpp_library_emitter
@@ -256,9 +256,6 @@ class DartiumBackend(HtmlDartGenerator):
self._interface_type_info = self._type_registry.TypeInfo(self._interface.id)
self._metadata = options.metadata
self._native_library_name = "_blink"
- # This goes away after the Chrome 35 roll (or whenever we commit to the
- # dart:blink refactor)
- self._dart_use_blink = dart_use_blink
# These get initialized by StartInterface
self._cpp_header_emitter = None
self._cpp_impl_emitter = None
@@ -450,7 +447,7 @@ class DartiumBackend(HtmlDartGenerator):
def _EmitConstructorInfrastructure(self,
constructor_info, constructor_callback_cpp_name, factory_method_name,
- argument_count=None):
+ argument_count=None, emit_to_native=False):
constructor_callback_id = self._interface.id + '_' + constructor_callback_cpp_name
if argument_count is None:
argument_count = len(constructor_info.param_infos)
@@ -472,16 +469,17 @@ class DartiumBackend(HtmlDartGenerator):
# Then we emit the impedance matching wrapper to call out to the
# toplevel wrapper
- self._members_emitter.Emit(
- '\n @DocsEditable()\n'
- ' static $INTERFACE_NAME $FACTORY_METHOD_NAME($PARAMETERS) => '
- '$TOPLEVEL_NAME($OUTPARAMETERS);\n',
- INTERFACE_NAME=self._interface_type_info.interface_name(),
- FACTORY_METHOD_NAME=factory_method_name,
- PARAMETERS=typed_formals,
- TOPLEVEL_NAME=DeriveQualifiedName(self._native_library_name,
- dart_native_name),
- OUTPARAMETERS=parameters)
+ if not emit_to_native:
+ self._members_emitter.Emit(
+ '\n @DocsEditable()\n'
+ ' static $INTERFACE_NAME $FACTORY_METHOD_NAME($PARAMETERS) => '
+ '$TOPLEVEL_NAME($OUTPARAMETERS);\n',
+ INTERFACE_NAME=self._interface_type_info.interface_name(),
+ FACTORY_METHOD_NAME=factory_method_name,
+ PARAMETERS=typed_formals,
+ TOPLEVEL_NAME=DeriveQualifiedName(self._native_library_name,
+ dart_native_name),
+ OUTPARAMETERS=parameters)
else:
self._members_emitter.Emit(
'\n @DocsEditable()\n'
@@ -531,7 +529,8 @@ class DartiumBackend(HtmlDartGenerator):
def EmitStaticFactoryOverload(self, constructor_info, name, arguments):
constructor_callback_cpp_name = name + 'constructorCallback'
self._EmitConstructorInfrastructure(
- constructor_info, constructor_callback_cpp_name, name, len(arguments))
+ constructor_info, constructor_callback_cpp_name, name, len(arguments),
+ emit_to_native=self._dart_use_blink)
ext_attrs = self._interface.ext_attrs
@@ -1014,34 +1013,73 @@ class DartiumBackend(HtmlDartGenerator):
if not is_custom:
self._GenerateOperationNativeCallback(operation, operation.arguments, cpp_callback_name, auto_scope_setup)
else:
- self._GenerateDispatcher(info, info.operations, dart_declaration)
+ self._GenerateDispatcher(info, info.operations, dart_declaration, html_name)
- def _GenerateDispatcher(self, info, operations, dart_declaration):
+ def _GenerateDispatcher(self, info, operations, dart_declaration, html_name):
def GenerateCall(
stmts_emitter, call_emitter, version, operation, argument_count):
- overload_name = '_%s_%s' % (operation.id, version)
- return_type = self.SecureOutputType(operation.type.id)
+ native_suffix = 'Callback'
actuals = info.ParametersAsListOfVariables(argument_count)
- actuals_s = ", ".join(actuals)
+ return_type = self.SecureOutputType(operation.type.id)
+ if self._dart_use_blink:
+ base_name = '_%s_%s' % (operation.id, version)
+ overload_name = \
+ DeriveNativeName(self._interface.id, base_name, native_suffix)
+ static = True
+ if not operation.is_static:
+ actuals = ['mthis'] + actuals
+ actuals_s = ", ".join(actuals)
+ dart_declaration = '%s(%s)' % (
+ base_name, actuals_s)
+ else:
+ base_name = '_%s_%s' % (operation.id, version)
+ overload_name = base_name
+ static = operation.is_static
+ actuals_s = ", ".join(actuals)
+ dart_declaration = '%s%s %s(%s)' % (
+ 'static ' if static else '',
+ return_type,
+ overload_name, actuals_s)
+
call_emitter.Emit('$NAME($ARGS)', NAME=overload_name, ARGS=actuals_s)
- dart_declaration = '%s%s %s(%s)' % (
- 'static ' if operation.is_static else '',
- return_type,
- overload_name, actuals_s)
is_custom = 'Custom' in operation.ext_attrs
native_suffix = 'Callback'
auto_scope_setup = \
- self._GenerateAutoSetupScope(overload_name, native_suffix)
+ self._GenerateAutoSetupScope(base_name, native_suffix)
cpp_callback_name = self._GenerateNativeBinding(
- overload_name, (0 if operation.is_static else 1) + argument_count,
- dart_declaration, operation.is_static, return_type, actuals,
- 'Callback', is_custom, auto_scope_setup, emit_metadata=False)
+ base_name, (0 if static else 1) + argument_count,
+ dart_declaration, static, return_type, actuals,
+ native_suffix, is_custom, auto_scope_setup, emit_metadata=False,
+ emit_to_native=self._dart_use_blink)
if not is_custom:
self._GenerateOperationNativeCallback(operation,
operation.arguments[:argument_count], cpp_callback_name,
auto_scope_setup)
+
+ if self._dart_use_blink:
+ name = DeriveNativeName(self._interface.id, html_name, "")
+ qual_name = DeriveQualifiedName(self._native_library_name,
+ name)
+ actuals = info.ParametersAsListOfVariables()
+ formals = info.ParametersAsListOfVariables()
+ if not info.IsStatic():
+ formals = ['mthis'] + formals
+ actuals = ['this'] + actuals
+ actuals_s = ', '.join(actuals)
+ formals_s = ', '.join(formals)
+ self._members_emitter.Emit(
+ '\n'
+ ' $DECLARATION => $NATIVE_NAME($ACTUALS);\n',
+ DECLARATION=dart_declaration,
+ NATIVE_NAME=qual_name,
+ ACTUALS=actuals_s)
+
+ dart_declaration = \
+ '// Generated overload resolver\n' \
+ '%s(%s)' % (name, formals_s)
+
self._GenerateDispatcherBody(
info,
operations,
@@ -1441,7 +1479,7 @@ class DartiumBackend(HtmlDartGenerator):
def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration,
static, return_type, parameters, native_suffix, is_custom,
- auto_scope_setup=True, emit_metadata=True):
+ auto_scope_setup=True, emit_metadata=True, emit_to_native=False):
metadata = []
if emit_metadata:
metadata = self._metadata.GetFormattedMetadata(
@@ -1465,17 +1503,17 @@ class DartiumBackend(HtmlDartGenerator):
FORMALS=formals,
NATIVE_BINDING=native_binding)
- # We then emit a class method which calls out to the mangled toplevel
- # function. Eventually this will be replaced with a call to an
- # interceptor
- self._members_emitter.Emit(
- '\n'
- ' $METADATA$DART_DECLARATION => $DART_NAME($ACTUALS);\n',
- METADATA=metadata,
- DART_DECLARATION=dart_declaration,
- DART_NAME=DeriveQualifiedName(self._native_library_name,
- dart_native_name),
- ACTUALS=actuals)
+ if not emit_to_native:
+ caller_emitter = self._members_emitter
+ full_dart_name = DeriveQualifiedName(self._native_library_name,
+ dart_native_name)
+ caller_emitter.Emit(
+ '\n'
+ ' $METADATA$DART_DECLARATION => $DART_NAME($ACTUALS);\n',
+ METADATA=metadata,
+ DART_DECLARATION=dart_declaration,
+ DART_NAME=full_dart_name,
+ ACTUALS=actuals)
else:
self._members_emitter.Emit(
'\n'
« no previous file with comments | « tools/dom/scripts/systemhtml.py ('k') | tools/dom/src/html_native_DOMImplementation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698