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

Unified Diff: frog/gen.dart

Issue 9365050: Fix for issue 1623: bind does not work on safari. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 10 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 | « frog/corejs.dart ('k') | tests/language/BindTest.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/gen.dart
===================================================================
--- frog/gen.dart (revision 4175)
+++ frog/gen.dart (working copy)
@@ -543,6 +543,7 @@
if (m.isNative && m._provideGetter) {
MethodGenerator._maybeGenerateBoundGetter(m, writer);
kasperl 2012/02/14 11:53:37 Do you have to ensure bind if maybeGenerateBoundGe
ngeoffray 2012/02/14 11:59:21 maybeGenerateBoundGetter looks for 'provideGetter'
+ world.gen.corejs.ensureBind();
}
}
@@ -904,8 +905,9 @@
// TODO(jimhug): Lots of string translation here - perf bottleneck?
defWriter.writeln(writer.text);
+ bool usesBind = false;
if (names != null) {
- // TODO(jmesserly): bind isn't implemented in older Safari.
+ usesBind = true;
defWriter.exitBlock('}).bind(null, ${Strings.join(names, ", ")})');
} else if (isClosure && method.name == '') {
defWriter.exitBlock('})');
@@ -921,18 +923,21 @@
_provideOptionalParamInfo(defWriter);
if (method is MethodMember) {
- _maybeGenerateBoundGetter(method, defWriter);
+ usesBind = _maybeGenerateBoundGetter(method, defWriter);
}
+
+ if (usesBind) world.gen.corejs.ensureBind();
}
- static _maybeGenerateBoundGetter(MethodMember m, CodeWriter defWriter) {
+ static bool _maybeGenerateBoundGetter(MethodMember m, CodeWriter defWriter) {
if (m._provideGetter) {
String suffix = world.gen._writePrototypePatch(m.declaringType,
'get\$' + m.jsname, 'function() {', defWriter, false);
- // TODO(jimhug): Bind not available in older Safari, need fallback?
defWriter.writeln('return this.${m.jsname}.bind(this);');
defWriter.exitBlock(suffix);
+ return true;
}
+ return false;
}
/**
« no previous file with comments | « frog/corejs.dart ('k') | tests/language/BindTest.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698