| Index: lib/compiler/implementation/native_emitter.dart
|
| ===================================================================
|
| --- lib/compiler/implementation/native_emitter.dart (revision 8546)
|
| +++ lib/compiler/implementation/native_emitter.dart (working copy)
|
| @@ -168,15 +168,19 @@
|
| }
|
|
|
| void potentiallyConvertDartClosuresToJs(StringBuffer code,
|
| - FunctionElement member) {
|
| + FunctionElement member,
|
| + List<String> argumentsBuffer) {
|
| FunctionSignature parameters = member.computeSignature(compiler);
|
| Element converter =
|
| compiler.findHelper(const SourceString('convertDartClosureToJS'));
|
| String closureConverter = compiler.namer.isolateAccess(converter);
|
| parameters.forEachParameter((Element parameter) {
|
| + String name = parameter.name.slowToString();
|
| + // If [name] is not in [argumentsBuffer], then the parameter is
|
| + // an optional parameter that was not provided for that stub.
|
| + if (argumentsBuffer.indexOf(name) == -1) return;
|
| Type type = parameter.computeType(compiler);
|
| if (type is FunctionType) {
|
| - String name = parameter.name.slowToString();
|
| int arity = type.computeArity();
|
| code.add(' $name = $closureConverter($name, $arity);\n');
|
| }
|
| @@ -206,7 +210,7 @@
|
| String nativeArguments = Strings.join(nativeArgumentsBuffer, ",");
|
|
|
| StringBuffer code = new StringBuffer();
|
| - potentiallyConvertDartClosuresToJs(code, member);
|
| + potentiallyConvertDartClosuresToJs(code, member, argumentsBuffer);
|
|
|
| if (!nativeMethods.contains(member)) {
|
| // When calling a method that has a native body, we call it
|
|
|