Index: lib/compiler/implementation/ssa/codegen.dart |
=================================================================== |
--- lib/compiler/implementation/ssa/codegen.dart (revision 6616) |
+++ lib/compiler/implementation/ssa/codegen.dart (working copy) |
@@ -15,7 +15,27 @@ |
SsaOptimizedCodeGenerator codegen = new SsaOptimizedCodeGenerator( |
compiler, work, parameters, parameterNames); |
codegen.visitGraph(graph); |
- return 'function($parameters) {\n${codegen.buffer}}'; |
+ |
+ FunctionElement element = work.element; |
+ String code; |
+ if (element.isInstanceMember() |
+ && element.enclosingElement.isClass() |
+ && element.enclosingElement.isNative() |
+ && native.isOverriddenMethod(element, |
+ element.enclosingElement, |
+ compiler.emitter.nativeEmitter)) { |
+ // Record that this method is overridden. In case of optional |
+ // arguments, the emitter will generate stubs to handle them, |
+ // and needs to know if the method is overridden. |
+ compiler.emitter.nativeEmitter.overriddenMethods.add(element); |
+ StringBuffer buffer = new StringBuffer(); |
+ native.generateMethodWithPrototypeCheckForElement( |
+ compiler, buffer, element, '${codegen.buffer}', parameters); |
+ code = buffer.toString(); |
+ } else { |
+ code = codegen.buffer.toString(); |
+ } |
+ return 'function($parameters) {\n$code}'; |
}); |
} |