Chromium Code Reviews| 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; |
| } |
| /** |