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

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') | frog/minfrog » ('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 4212)
+++ frog/gen.dart (working copy)
@@ -542,7 +542,9 @@
m.methodData.writeDefinition(m, writer);
if (m.isNative && m._provideGetter) {
- MethodGenerator._maybeGenerateBoundGetter(m, writer);
+ if (MethodGenerator._maybeGenerateBoundGetter(m, writer)) {
+ world.gen.corejs.ensureBind();
+ }
}
}
@@ -904,8 +906,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 +924,23 @@
_provideOptionalParamInfo(defWriter);
if (method is MethodMember) {
- _maybeGenerateBoundGetter(method, defWriter);
+ if (_maybeGenerateBoundGetter(method, defWriter)) {
+ usesBind = true;
+ }
}
+
+ 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') | frog/minfrog » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698