| 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 import "package:expect/expect.dart"; |
| 6 |
| 7 // A plain class that implements many fields. |
| 8 class A { |
| 9 var fieldA1 = 0x1; |
| 10 var fieldA2 = 0x2; |
| 11 var fieldA3 = 0x4; |
| 12 var fieldA4 = 0x8; |
| 13 |
| 14 var fieldB1 = 0x10; |
| 15 var fieldB2 = 0x20; |
| 16 var fieldB3 = 0x40; |
| 17 var fieldB4 = 0x80; |
| 18 |
| 19 var fieldC1 = 0x100; |
| 20 var fieldC2 = 0x200; |
| 21 var fieldC3 = 0x400; |
| 22 var fieldC4 = 0x800; |
| 23 |
| 24 var fieldD1 = 0x1000; |
| 25 var fieldD2 = 0x2000; |
| 26 var fieldD3 = 0x4000; |
| 27 var fieldD4 = 0x8000; |
| 28 |
| 29 var fieldXA1 = 0x1; |
| 30 var fieldXA2 = 0x2; |
| 31 var fieldXA3 = 0x4; |
| 32 var fieldXA4 = 0x8; |
| 33 |
| 34 var fieldXB1 = 0x10; |
| 35 var fieldXB2 = 0x20; |
| 36 var fieldXB3 = 0x40; |
| 37 var fieldXB4 = 0x80; |
| 38 |
| 39 var fieldXC1 = 0x1; |
| 40 var fieldXC2 = 0x2; |
| 41 var fieldXC3 = 0x4; |
| 42 var fieldXC4 = 0x8; |
| 43 |
| 44 var fieldXD1 = 0x10; |
| 45 var fieldXD2 = 0x20; |
| 46 var fieldXD3 = 0x40; |
| 47 var fieldXD4 = 0x80; |
| 48 |
| 49 var fieldYA1 = 0x1; |
| 50 var fieldYA2 = 0x200; |
| 51 var fieldYA3 = 0x400; |
| 52 var fieldYA4 = 0x800; |
| 53 |
| 54 var fieldYB1 = 0x10; |
| 55 var fieldYB2 = 0x200; |
| 56 var fieldYB3 = 0x400; |
| 57 var fieldYB4 = 0x800; |
| 58 |
| 59 var fieldYC1 = 0x100; |
| 60 var fieldYC2 = 0x2000; |
| 61 var fieldYC3 = 0x4000; |
| 62 var fieldYC4 = 0x8000; |
| 63 |
| 64 var fieldYD1 = 0x1000; |
| 65 var fieldYD2 = 0x2000; |
| 66 var fieldYD3 = 0x4000; |
| 67 var fieldYD4 = 0x8000; |
| 68 } |
| 69 |
| 70 // Implementing the same fields using inheritance and a mixin. |
| 71 class B { |
| 72 var fieldA1 = 0x0011; |
| 73 var fieldA2 = 0x0002; |
| 74 var fieldA3 = 0x0044; |
| 75 var fieldA4 = 0x0008; |
| 76 |
| 77 var fieldB1 = 0x0010; |
| 78 var fieldB2 = 0x0220; |
| 79 var fieldB3 = 0x0040; |
| 80 var fieldB4 = 0x0880; |
| 81 |
| 82 var fieldC1 = 0x0101; |
| 83 var fieldC2 = 0x0200; |
| 84 var fieldC3 = 0x0404; |
| 85 var fieldC4 = 0x0810; |
| 86 |
| 87 var fieldD1 = 0x1000; |
| 88 var fieldD2 = 0x2204; |
| 89 var fieldD3 = 0x4040; |
| 90 var fieldD4 = 0x8801; |
| 91 } |
| 92 |
| 93 class C { |
| 94 var fieldXA1 = 0x8001; |
| 95 var fieldXA2 = 0x4002; |
| 96 var fieldXA3 = 0x2004; |
| 97 var fieldXA4 = 0x1008; |
| 98 |
| 99 var fieldXB1 = 0x810; |
| 100 var fieldXB2 = 0x420; |
| 101 var fieldXB3 = 0x240; |
| 102 var fieldXB4 = 0x180; |
| 103 |
| 104 var fieldXC1 = 0x180; |
| 105 var fieldXC2 = 0x240; |
| 106 var fieldXC3 = 0x420; |
| 107 var fieldXC4 = 0x810; |
| 108 |
| 109 var fieldXD1 = 0x1008; |
| 110 var fieldXD2 = 0x2004; |
| 111 var fieldXD3 = 0x4002; |
| 112 var fieldXD4 = 0x8001; |
| 113 } |
| 114 |
| 115 class D extends B with C { |
| 116 var fieldYA1 = 0x8001; |
| 117 var fieldYA2 = 0x4002; |
| 118 var fieldYA3 = 0x2004; |
| 119 var fieldYA4 = 0x0008; |
| 120 |
| 121 var fieldYB1 = 0x810; |
| 122 var fieldYB2 = 0x420; |
| 123 var fieldYB3 = 0x240; |
| 124 var fieldYB4 = 0x080; |
| 125 |
| 126 var fieldYC1 = 0x180; |
| 127 var fieldYC2 = 0x240; |
| 128 var fieldYC3 = 0x420; |
| 129 var fieldYC4 = 0x800; |
| 130 |
| 131 var fieldYD1 = 0x1008; |
| 132 var fieldYD2 = 0x2004; |
| 133 var fieldYD3 = 0x4002; |
| 134 var fieldYD4 = 0x8000; |
| 135 } |
| 136 |
| 137 // Mix in the mixin into the full implementation, shadowing some fields. |
| 138 class E extends A with C { |
| 139 } |
| 140 |
| 141 // Another mixin for block C. |
| 142 class F { |
| 143 var fieldYA1 = 0x0001; |
| 144 var fieldYA2 = 0x1022; |
| 145 var fieldYA3 = 0x0004; |
| 146 var fieldYA4 = 0x0088; |
| 147 |
| 148 var fieldYB1 = 0x0410; |
| 149 var fieldYB2 = 0x0022; |
| 150 var fieldYB3 = 0x0040; |
| 151 var fieldYB4 = 0x0880; |
| 152 |
| 153 var fieldYC1 = 0x1001; |
| 154 var fieldYC2 = 0x2200; |
| 155 var fieldYC3 = 0x4400; |
| 156 var fieldYC4 = 0x8800; |
| 157 |
| 158 var fieldYD1 = 0x1108; |
| 159 var fieldYD2 = 0x2200; |
| 160 var fieldYD3 = 0x4044; |
| 161 var fieldYD4 = 0x8001; |
| 162 } |
| 163 |
| 164 // Use two mixins in a single class. |
| 165 class G extends B with C, F { |
| 166 } |
| 167 |
| 168 bool checkFields(cls) { |
| 169 var blockA = |
| 170 cls.fieldA1 ^ cls.fieldA2 ^ cls.fieldA3 ^ cls.fieldA4 ^ |
| 171 cls.fieldB1 ^ cls.fieldB2 ^ cls.fieldB3 ^ cls.fieldB4 ^ |
| 172 cls.fieldC1 ^ cls.fieldC2 ^ cls.fieldC3 ^ cls.fieldC4 ^ |
| 173 cls.fieldD1 ^ cls.fieldD2 ^ cls.fieldD3 ^ cls.fieldD4; |
| 174 var blockB = |
| 175 cls.fieldXA1 ^ cls.fieldXA2 ^ cls.fieldXA3 ^ cls.fieldXA4 ^ |
| 176 cls.fieldXB1 ^ cls.fieldXB2 ^ cls.fieldXB3 ^ cls.fieldXB4 ^ |
| 177 cls.fieldXC1 ^ cls.fieldXC2 ^ cls.fieldXC3 ^ cls.fieldXC4 ^ |
| 178 cls.fieldXD1 ^ cls.fieldXD2 ^ cls.fieldXD3 ^ cls.fieldXD4; |
| 179 var blockC = |
| 180 cls.fieldYA1 ^ cls.fieldYA2 ^ cls.fieldYA3 ^ cls.fieldYA4 ^ |
| 181 cls.fieldYB1 ^ cls.fieldYB2 ^ cls.fieldYB3 ^ cls.fieldYB4 ^ |
| 182 cls.fieldYC1 ^ cls.fieldYC2 ^ cls.fieldYC3 ^ cls.fieldYC4 ^ |
| 183 cls.fieldYD1 ^ cls.fieldYD2 ^ cls.fieldYD3 ^ cls.fieldYD4; |
| 184 return blockA == 0xFFFF && blockB == 0x0000 && blockC == 0x1111; |
| 185 } |
| 186 |
| 187 main () { |
| 188 var instances = [new A(), new D(), new E(), new G()]; |
| 189 for (var instance in instances) { |
| 190 Expect.isTrue(checkFields(instance)); |
| 191 } |
| 192 } |
| OLD | NEW |