| OLD | NEW | 
|---|
| 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 import "native_testing.dart"; | 5 import "dart:_js_helper"; | 
|  | 6 import "package:expect/expect.dart"; | 
| 6 | 7 | 
| 7 makeCC() native ; | 8 makeCC() native ; | 
| 8 nativeFirst(x, y) native ; | 9 nativeFirst(x, y) native ; | 
| 9 | 10 | 
| 10 void setup() native """ | 11 void setup() native """ | 
| 11 function CC() {} | 12 function CC() {} | 
| 12 makeCC = function() { return new CC; } | 13 makeCC = function() { return new CC; } | 
| 13 nativeFirst = function(x, y) { return x; } | 14 nativeFirst = function(x, y) { return x; } | 
| 14 self.nativeConstructor(CC); |  | 
| 15 """; | 15 """; | 
| 16 | 16 | 
| 17 class C { | 17 class C { | 
| 18   foo(x) => x; | 18   foo(x) => x; | 
| 19 } | 19 } | 
| 20 | 20 | 
| 21 @Native("CC") | 21 @Native("CC") | 
| 22 class ClickCounter { | 22 class ClickCounter { | 
| 23   var status; | 23   var status; | 
| 24 | 24 | 
| 25   var foo; | 25   var foo; | 
| 26 | 26 | 
| 27   init() { | 27   init() { | 
| 28     foo = wrap(g); | 28     foo = wrap(g); | 
| 29   } | 29   } | 
| 30 | 30 | 
| 31   g(val) => "### $val ###"; | 31   g(val) => "### $val ###"; | 
| 32 } | 32 } | 
| 33 | 33 | 
| 34 wrap(cb) { | 34 wrap(cb) { | 
| 35   return (val) { | 35   return (val) { | 
| 36     return cb("!!! $val !!!"); | 36     return cb("!!! $val !!!"); | 
| 37   }; | 37   }; | 
| 38 } | 38 } | 
| 39 | 39 | 
| 40 main() { | 40 main() { | 
| 41   nativeTesting(); |  | 
| 42   setup(); | 41   setup(); | 
| 43   var c = makeCC(); | 42   var c = makeCC(); | 
| 44   c.init(); | 43   c.init(); | 
| 45   var c2 = new C(); | 44   var c2 = new C(); | 
| 46   c = nativeFirst(c, c2); | 45   c = nativeFirst(c, c2); | 
| 47   // After the `nativeFirst` invocation dart2js doesn't know if c is a | 46   // After the `nativeFirst` invocation dart2js doesn't know if c is a | 
| 48   // ClickCounter or C. It must go through the interceptor and call the foo$1 | 47   // ClickCounter or C. It must go through the interceptor and call the foo$1 | 
| 49   // invocation. | 48   // invocation. | 
| 50   Expect.equals("### !!! 499 !!! ###", c.foo(499)); | 49   Expect.equals("### !!! 499 !!! ###", c.foo(499)); | 
| 51 } | 50 } | 
| OLD | NEW | 
|---|