OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
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. | |
4 | |
5 // Test that hidden native class names are not used by generated code. | |
6 | |
7 class A native "*B" { | |
8 get name() => 'A'; | |
9 static A create() => makeA(); | |
10 } | |
11 | |
12 class B native "*C" { | |
13 get name() => 'B'; | |
14 static B create() => makeB(); | |
15 } | |
16 | |
17 class C { // Ordinary class with name clashing with native class. | |
18 get name() => 'C'; | |
19 static C create() => new C(); | |
20 } | |
21 | |
22 makeA() native; | |
23 makeB() native; | |
24 | |
25 void setup1() native """ | |
26 // Poison hidden native names 'B' and 'C' to prove the compiler didn't place | |
27 // anthing on the hidden native class. | |
28 B = null; | |
29 C = null; | |
30 """; | |
31 | |
32 void setup2() native """ | |
33 // This code is all inside 'setup' and so not accesible from the global scope. | |
34 function B(){} | |
35 function C(){} | |
36 makeA = function(){return new B}; // A is "*B" | |
37 makeB = function(){return new C}; // B is "*C" | |
38 """; | |
39 | |
40 int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); | |
41 | |
42 main() { | |
43 setup1(); | |
44 setup2(); | |
45 | |
46 var things = [A.create(), B.create(), C.create()]; | |
47 var a = things[inscrutable(0)]; | |
48 var b = things[inscrutable(1)]; | |
49 var c = things[inscrutable(2)]; | |
50 | |
51 Expect.equals('A', a.name); | |
52 Expect.equals('B', b.name); | |
53 Expect.equals('C', c.name); | |
54 } | |
OLD | NEW |