OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 #include "platform/assert.h" | 5 #include "platform/assert.h" |
6 #include "vm/assembler.h" | 6 #include "vm/assembler.h" |
7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
8 #include "vm/isolate.h" | 8 #include "vm/isolate.h" |
9 #include "vm/object.h" | 9 #include "vm/object.h" |
10 #include "vm/object_store.h" | 10 #include "vm/object_store.h" |
| 11 #include "vm/symbols.h" |
11 #include "vm/unit_test.h" | 12 #include "vm/unit_test.h" |
12 | 13 |
13 namespace dart { | 14 namespace dart { |
14 | 15 |
15 TEST_CASE(Class) { | 16 TEST_CASE(Class) { |
16 // Allocate the class first. | 17 // Allocate the class first. |
17 const String& class_name = String::Handle(String::NewSymbol("MyClass")); | 18 const String& class_name = String::Handle(Symbols::New("MyClass")); |
18 const Script& script = Script::Handle(); | 19 const Script& script = Script::Handle(); |
19 const Class& cls = Class::Handle( | 20 const Class& cls = Class::Handle( |
20 Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 21 Class::New(class_name, script, Scanner::kDummyTokenIndex)); |
21 | 22 |
22 // Class has no fields. | 23 // Class has no fields. |
23 const Array& no_fields = Array::Handle(Array::Empty()); | 24 const Array& no_fields = Array::Handle(Array::Empty()); |
24 cls.SetFields(no_fields); | 25 cls.SetFields(no_fields); |
25 | 26 |
26 // Create and populate the function arrays. | 27 // Create and populate the function arrays. |
27 const Array& functions = Array::Handle(Array::New(6)); | 28 const Array& functions = Array::Handle(Array::New(6)); |
28 Function& function = Function::Handle(); | 29 Function& function = Function::Handle(); |
29 String& function_name = String::Handle(); | 30 String& function_name = String::Handle(); |
30 function_name = String::NewSymbol("foo"); | 31 function_name = Symbols::New("foo"); |
31 function = Function::New( | 32 function = Function::New( |
32 function_name, RawFunction::kRegularFunction, false, false, 0); | 33 function_name, RawFunction::kRegularFunction, false, false, 0); |
33 functions.SetAt(0, function); | 34 functions.SetAt(0, function); |
34 function_name = String::NewSymbol("bar"); | 35 function_name = Symbols::New("bar"); |
35 function = Function::New( | 36 function = Function::New( |
36 function_name, RawFunction::kRegularFunction, false, false, 0); | 37 function_name, RawFunction::kRegularFunction, false, false, 0); |
37 | 38 |
38 const int kNumFixedParameters = 2; | 39 const int kNumFixedParameters = 2; |
39 const int kNumOptionalParameters = 3; | 40 const int kNumOptionalParameters = 3; |
40 function.set_num_fixed_parameters(kNumFixedParameters); | 41 function.set_num_fixed_parameters(kNumFixedParameters); |
41 function.set_num_optional_parameters(kNumOptionalParameters); | 42 function.set_num_optional_parameters(kNumOptionalParameters); |
42 functions.SetAt(1, function); | 43 functions.SetAt(1, function); |
43 | 44 |
44 function_name = String::NewSymbol("baz"); | 45 function_name = Symbols::New("baz"); |
45 function = Function::New( | 46 function = Function::New( |
46 function_name, RawFunction::kRegularFunction, false, false, 0); | 47 function_name, RawFunction::kRegularFunction, false, false, 0); |
47 functions.SetAt(2, function); | 48 functions.SetAt(2, function); |
48 | 49 |
49 function_name = String::NewSymbol("Foo"); | 50 function_name = Symbols::New("Foo"); |
50 function = Function::New( | 51 function = Function::New( |
51 function_name, RawFunction::kRegularFunction, true, false, 0); | 52 function_name, RawFunction::kRegularFunction, true, false, 0); |
52 functions.SetAt(3, function); | 53 functions.SetAt(3, function); |
53 function_name = String::NewSymbol("Bar"); | 54 function_name = Symbols::New("Bar"); |
54 function = Function::New( | 55 function = Function::New( |
55 function_name, RawFunction::kRegularFunction, true, false, 0); | 56 function_name, RawFunction::kRegularFunction, true, false, 0); |
56 functions.SetAt(4, function); | 57 functions.SetAt(4, function); |
57 function_name = String::NewSymbol("BaZ"); | 58 function_name = Symbols::New("BaZ"); |
58 function = Function::New( | 59 function = Function::New( |
59 function_name, RawFunction::kRegularFunction, true, false, 0); | 60 function_name, RawFunction::kRegularFunction, true, false, 0); |
60 functions.SetAt(5, function); | 61 functions.SetAt(5, function); |
61 | 62 |
62 // Setup the functions in the class. | 63 // Setup the functions in the class. |
63 cls.SetFunctions(functions); | 64 cls.SetFunctions(functions); |
64 | 65 |
65 function_name = String::New("Foo"); | 66 function_name = String::New("Foo"); |
66 function = cls.LookupDynamicFunction(function_name); | 67 function = cls.LookupDynamicFunction(function_name); |
67 EXPECT(function.IsNull()); | 68 EXPECT(function.IsNull()); |
(...skipping 19 matching lines...) Expand all Loading... |
87 | 88 |
88 function_name = String::New("bar"); | 89 function_name = String::New("bar"); |
89 function = cls.LookupDynamicFunction(function_name); | 90 function = cls.LookupDynamicFunction(function_name); |
90 EXPECT(!function.IsNull()); | 91 EXPECT(!function.IsNull()); |
91 EXPECT_EQ(kNumFixedParameters, function.num_fixed_parameters()); | 92 EXPECT_EQ(kNumFixedParameters, function.num_fixed_parameters()); |
92 EXPECT_EQ(kNumOptionalParameters, function.num_optional_parameters()); | 93 EXPECT_EQ(kNumOptionalParameters, function.num_optional_parameters()); |
93 | 94 |
94 const Array& interfaces = Array::Handle(Array::New(2)); | 95 const Array& interfaces = Array::Handle(Array::New(2)); |
95 Class& interface = Class::Handle(); | 96 Class& interface = Class::Handle(); |
96 String& interface_name = String::Handle(); | 97 String& interface_name = String::Handle(); |
97 interface_name = String::NewSymbol("Harley"); | 98 interface_name = Symbols::New("Harley"); |
98 interface = Class::New(interface_name, script, Scanner::kDummyTokenIndex); | 99 interface = Class::New(interface_name, script, Scanner::kDummyTokenIndex); |
99 interfaces.SetAt(0, Type::Handle(Type::NewNonParameterizedType(interface))); | 100 interfaces.SetAt(0, Type::Handle(Type::NewNonParameterizedType(interface))); |
100 interface_name = String::NewSymbol("Norton"); | 101 interface_name = Symbols::New("Norton"); |
101 interface = Class::New(interface_name, script, Scanner::kDummyTokenIndex); | 102 interface = Class::New(interface_name, script, Scanner::kDummyTokenIndex); |
102 interfaces.SetAt(1, Type::Handle(Type::NewNonParameterizedType(interface))); | 103 interfaces.SetAt(1, Type::Handle(Type::NewNonParameterizedType(interface))); |
103 cls.set_interfaces(interfaces); | 104 cls.set_interfaces(interfaces); |
104 cls.Finalize(); | 105 cls.Finalize(); |
105 | 106 |
106 const Array& array = Array::Handle(cls.functions_cache()); | 107 const Array& array = Array::Handle(cls.functions_cache()); |
107 array.SetAt(0, function_name); | 108 array.SetAt(0, function_name); |
108 cls.set_functions_cache(array); | 109 cls.set_functions_cache(array); |
109 String& test_name = String::Handle(); | 110 String& test_name = String::Handle(); |
110 test_name ^= Array::Handle(cls.functions_cache()).At(0); | 111 test_name ^= Array::Handle(cls.functions_cache()).At(0); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 iterator.Advance(); | 151 iterator.Advance(); |
151 iterator.Advance(); // Advance to '.' token. | 152 iterator.Advance(); // Advance to '.' token. |
152 EXPECT_EQ(Token::kPERIOD, iterator.CurrentTokenKind()); | 153 EXPECT_EQ(Token::kPERIOD, iterator.CurrentTokenKind()); |
153 iterator.Advance(); // Advance to end of stream. | 154 iterator.Advance(); // Advance to end of stream. |
154 EXPECT_EQ(Token::kEOS, iterator.CurrentTokenKind()); | 155 EXPECT_EQ(Token::kEOS, iterator.CurrentTokenKind()); |
155 } | 156 } |
156 | 157 |
157 | 158 |
158 TEST_CASE(InstanceClass) { | 159 TEST_CASE(InstanceClass) { |
159 // Allocate the class first. | 160 // Allocate the class first. |
160 String& class_name = String::Handle(String::NewSymbol("EmptyClass")); | 161 String& class_name = String::Handle(Symbols::New("EmptyClass")); |
161 Script& script = Script::Handle(); | 162 Script& script = Script::Handle(); |
162 const Class& empty_class = | 163 const Class& empty_class = |
163 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 164 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); |
164 | 165 |
165 // No functions and no super class for the EmptyClass. | 166 // No functions and no super class for the EmptyClass. |
166 const Array& no_fields = Array::Handle(Array::Empty()); | 167 const Array& no_fields = Array::Handle(Array::Empty()); |
167 empty_class.SetFields(no_fields); | 168 empty_class.SetFields(no_fields); |
168 empty_class.Finalize(); | 169 empty_class.Finalize(); |
169 EXPECT_EQ(kObjectAlignment, empty_class.instance_size()); | 170 EXPECT_EQ(kObjectAlignment, empty_class.instance_size()); |
170 Instance& instance = Instance::Handle(Instance::New(empty_class)); | 171 Instance& instance = Instance::Handle(Instance::New(empty_class)); |
171 EXPECT_EQ(empty_class.raw(), instance.clazz()); | 172 EXPECT_EQ(empty_class.raw(), instance.clazz()); |
172 | 173 |
173 class_name = String::NewSymbol("OneFieldClass"); | 174 class_name = Symbols::New("OneFieldClass"); |
174 const Class& one_field_class = | 175 const Class& one_field_class = |
175 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 176 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); |
176 | 177 |
177 // No functions and no super class for the OneFieldClass. | 178 // No functions and no super class for the OneFieldClass. |
178 const Array& one_fields = Array::Handle(Array::New(1)); | 179 const Array& one_fields = Array::Handle(Array::New(1)); |
179 const String& field_name = String::Handle(String::NewSymbol("the_field")); | 180 const String& field_name = String::Handle(Symbols::New("the_field")); |
180 const Field& field = Field::Handle(Field::New(field_name, false, false, 0)); | 181 const Field& field = Field::Handle(Field::New(field_name, false, false, 0)); |
181 one_fields.SetAt(0, field); | 182 one_fields.SetAt(0, field); |
182 one_field_class.SetFields(one_fields); | 183 one_field_class.SetFields(one_fields); |
183 one_field_class.Finalize(); | 184 one_field_class.Finalize(); |
184 intptr_t header_size = sizeof(RawObject); | 185 intptr_t header_size = sizeof(RawObject); |
185 EXPECT_EQ(Utils::RoundUp((header_size + (1 * kWordSize)), kObjectAlignment), | 186 EXPECT_EQ(Utils::RoundUp((header_size + (1 * kWordSize)), kObjectAlignment), |
186 one_field_class.instance_size()); | 187 one_field_class.instance_size()); |
187 EXPECT_EQ(header_size, field.Offset()); | 188 EXPECT_EQ(header_size, field.Offset()); |
188 } | 189 } |
189 | 190 |
190 | 191 |
191 TEST_CASE(Interface) { | 192 TEST_CASE(Interface) { |
192 String& class_name = String::Handle(String::NewSymbol("EmptyClass")); | 193 String& class_name = String::Handle(Symbols::New("EmptyClass")); |
193 Script& script = Script::Handle(); | 194 Script& script = Script::Handle(); |
194 const Class& factory_class = | 195 const Class& factory_class = |
195 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 196 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); |
196 const Array& no_fields = Array::Handle(Array::Empty()); | 197 const Array& no_fields = Array::Handle(Array::Empty()); |
197 // Finalizes the class. | 198 // Finalizes the class. |
198 factory_class.SetFields(no_fields); | 199 factory_class.SetFields(no_fields); |
199 | 200 |
200 String& interface_name = String::Handle(String::NewSymbol("MyInterface")); | 201 String& interface_name = String::Handle(Symbols::New("MyInterface")); |
201 const Class& interface = Class::Handle( | 202 const Class& interface = Class::Handle( |
202 Class::NewInterface(interface_name, script, Scanner::kDummyTokenIndex)); | 203 Class::NewInterface(interface_name, script, Scanner::kDummyTokenIndex)); |
203 EXPECT(interface.is_interface()); | 204 EXPECT(interface.is_interface()); |
204 EXPECT(!factory_class.is_interface()); | 205 EXPECT(!factory_class.is_interface()); |
205 EXPECT(!interface.HasFactoryClass()); | 206 EXPECT(!interface.HasFactoryClass()); |
206 interface.set_factory_class(factory_class); | 207 interface.set_factory_class(factory_class); |
207 EXPECT_EQ(factory_class.raw(), interface.FactoryClass()); | 208 EXPECT_EQ(factory_class.raw(), interface.FactoryClass()); |
208 } | 209 } |
209 | 210 |
210 | 211 |
(...skipping 1440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1651 | 1652 |
1652 const String& substr = String::Handle(String::SubString(str, 1, 2)); | 1653 const String& substr = String::Handle(String::SubString(str, 1, 2)); |
1653 EXPECT(!substr.IsExternalFourByteString()); | 1654 EXPECT(!substr.IsExternalFourByteString()); |
1654 EXPECT(substr.IsFourByteString()); | 1655 EXPECT(substr.IsFourByteString()); |
1655 EXPECT_EQ(2, substr.Length()); | 1656 EXPECT_EQ(2, substr.Length()); |
1656 EXPECT(substr.Equals("\xF0\x9D\x97\x88\xF0\x9D\x97\x8E")); | 1657 EXPECT(substr.Equals("\xF0\x9D\x97\x88\xF0\x9D\x97\x8E")); |
1657 } | 1658 } |
1658 | 1659 |
1659 | 1660 |
1660 TEST_CASE(Symbol) { | 1661 TEST_CASE(Symbol) { |
1661 const String& one = String::Handle(String::NewSymbol("Eins")); | 1662 const String& one = String::Handle(Symbols::New("Eins")); |
1662 EXPECT(one.IsSymbol()); | 1663 EXPECT(one.IsSymbol()); |
1663 const String& two = String::Handle(String::NewSymbol("Zwei")); | 1664 const String& two = String::Handle(Symbols::New("Zwei")); |
1664 const String& three = String::Handle(String::NewSymbol("Drei")); | 1665 const String& three = String::Handle(Symbols::New("Drei")); |
1665 const String& four = String::Handle(String::NewSymbol("Vier")); | 1666 const String& four = String::Handle(Symbols::New("Vier")); |
1666 const String& five = String::Handle(String::NewSymbol("Fuenf")); | 1667 const String& five = String::Handle(Symbols::New("Fuenf")); |
1667 const String& six = String::Handle(String::NewSymbol("Sechs")); | 1668 const String& six = String::Handle(Symbols::New("Sechs")); |
1668 const String& seven = String::Handle(String::NewSymbol("Sieben")); | 1669 const String& seven = String::Handle(Symbols::New("Sieben")); |
1669 const String& eight = String::Handle(String::NewSymbol("Acht")); | 1670 const String& eight = String::Handle(Symbols::New("Acht")); |
1670 const String& nine = String::Handle(String::NewSymbol("Neun")); | 1671 const String& nine = String::Handle(Symbols::New("Neun")); |
1671 const String& ten = String::Handle(String::NewSymbol("Zehn")); | 1672 const String& ten = String::Handle(Symbols::New("Zehn")); |
1672 String& eins = String::Handle(String::NewSymbol("Eins")); | 1673 String& eins = String::Handle(Symbols::New("Eins")); |
1673 EXPECT_EQ(one.raw(), eins.raw()); | 1674 EXPECT_EQ(one.raw(), eins.raw()); |
1674 EXPECT(one.raw() != two.raw()); | 1675 EXPECT(one.raw() != two.raw()); |
1675 EXPECT(two.Equals(String::Handle(String::New("Zwei")))); | 1676 EXPECT(two.Equals(String::Handle(String::New("Zwei")))); |
1676 EXPECT_EQ(two.raw(), String::NewSymbol("Zwei")); | 1677 EXPECT_EQ(two.raw(), Symbols::New("Zwei")); |
1677 EXPECT_EQ(three.raw(), String::NewSymbol("Drei")); | 1678 EXPECT_EQ(three.raw(), Symbols::New("Drei")); |
1678 EXPECT_EQ(four.raw(), String::NewSymbol("Vier")); | 1679 EXPECT_EQ(four.raw(), Symbols::New("Vier")); |
1679 EXPECT_EQ(five.raw(), String::NewSymbol("Fuenf")); | 1680 EXPECT_EQ(five.raw(), Symbols::New("Fuenf")); |
1680 EXPECT_EQ(six.raw(), String::NewSymbol("Sechs")); | 1681 EXPECT_EQ(six.raw(), Symbols::New("Sechs")); |
1681 EXPECT_EQ(seven.raw(), String::NewSymbol("Sieben")); | 1682 EXPECT_EQ(seven.raw(), Symbols::New("Sieben")); |
1682 EXPECT_EQ(eight.raw(), String::NewSymbol("Acht")); | 1683 EXPECT_EQ(eight.raw(), Symbols::New("Acht")); |
1683 EXPECT_EQ(nine.raw(), String::NewSymbol("Neun")); | 1684 EXPECT_EQ(nine.raw(), Symbols::New("Neun")); |
1684 EXPECT_EQ(ten.raw(), String::NewSymbol("Zehn")); | 1685 EXPECT_EQ(ten.raw(), Symbols::New("Zehn")); |
1685 | 1686 |
1686 // Make sure to cause symbol table overflow. | 1687 // Make sure to cause symbol table overflow. |
1687 for (int i = 0; i < 1024; i++) { | 1688 for (int i = 0; i < 1024; i++) { |
1688 char buf[256]; | 1689 char buf[256]; |
1689 OS::SNPrint(buf, sizeof(buf), "%d", i); | 1690 OS::SNPrint(buf, sizeof(buf), "%d", i); |
1690 String::NewSymbol(buf); | 1691 Symbols::New(buf); |
1691 } | 1692 } |
1692 eins = String::NewSymbol("Eins"); | 1693 eins = Symbols::New("Eins"); |
1693 EXPECT_EQ(one.raw(), eins.raw()); | 1694 EXPECT_EQ(one.raw(), eins.raw()); |
1694 EXPECT_EQ(two.raw(), String::NewSymbol("Zwei")); | 1695 EXPECT_EQ(two.raw(), Symbols::New("Zwei")); |
1695 EXPECT_EQ(three.raw(), String::NewSymbol("Drei")); | 1696 EXPECT_EQ(three.raw(), Symbols::New("Drei")); |
1696 EXPECT_EQ(four.raw(), String::NewSymbol("Vier")); | 1697 EXPECT_EQ(four.raw(), Symbols::New("Vier")); |
1697 EXPECT_EQ(five.raw(), String::NewSymbol("Fuenf")); | 1698 EXPECT_EQ(five.raw(), Symbols::New("Fuenf")); |
1698 EXPECT_EQ(six.raw(), String::NewSymbol("Sechs")); | 1699 EXPECT_EQ(six.raw(), Symbols::New("Sechs")); |
1699 EXPECT_EQ(seven.raw(), String::NewSymbol("Sieben")); | 1700 EXPECT_EQ(seven.raw(), Symbols::New("Sieben")); |
1700 EXPECT_EQ(eight.raw(), String::NewSymbol("Acht")); | 1701 EXPECT_EQ(eight.raw(), Symbols::New("Acht")); |
1701 EXPECT_EQ(nine.raw(), String::NewSymbol("Neun")); | 1702 EXPECT_EQ(nine.raw(), Symbols::New("Neun")); |
1702 EXPECT_EQ(ten.raw(), String::NewSymbol("Zehn")); | 1703 EXPECT_EQ(ten.raw(), Symbols::New("Zehn")); |
1703 | 1704 |
1704 // Symbols from Strings. | 1705 // Symbols from Strings. |
1705 eins = String::New("Eins"); | 1706 eins = String::New("Eins"); |
1706 EXPECT(!eins.IsSymbol()); | 1707 EXPECT(!eins.IsSymbol()); |
1707 String& ein_symbol = String::Handle(String::NewSymbol(eins)); | 1708 String& ein_symbol = String::Handle(Symbols::New(eins)); |
1708 EXPECT_EQ(one.raw(), ein_symbol.raw()); | 1709 EXPECT_EQ(one.raw(), ein_symbol.raw()); |
1709 EXPECT(one.raw() != eins.raw()); | 1710 EXPECT(one.raw() != eins.raw()); |
1710 | 1711 |
1711 uint32_t char32[] = { 'E', 'l', 'f' }; | 1712 uint32_t char32[] = { 'E', 'l', 'f' }; |
1712 String& elf = String::Handle(String::NewSymbol(char32, 3)); | 1713 String& elf = String::Handle(Symbols::New(char32, 3)); |
1713 EXPECT(elf.IsSymbol()); | 1714 EXPECT(elf.IsSymbol()); |
1714 EXPECT_EQ(elf.raw(), String::NewSymbol("Elf")); | 1715 EXPECT_EQ(elf.raw(), Symbols::New("Elf")); |
1715 } | 1716 } |
1716 | 1717 |
1717 | 1718 |
1718 TEST_CASE(Bool) { | 1719 TEST_CASE(Bool) { |
1719 const Bool& true_value = Bool::Handle(Bool::True()); | 1720 const Bool& true_value = Bool::Handle(Bool::True()); |
1720 EXPECT(true_value.value()); | 1721 EXPECT(true_value.value()); |
1721 const Bool& false_value = Bool::Handle(Bool::False()); | 1722 const Bool& false_value = Bool::Handle(Bool::False()); |
1722 EXPECT(!false_value.value()); | 1723 EXPECT(!false_value.value()); |
1723 } | 1724 } |
1724 | 1725 |
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2307 var_c = outer_scope->LocalLookupVariable(c); | 2308 var_c = outer_scope->LocalLookupVariable(c); |
2308 EXPECT(var_c->is_captured()); | 2309 EXPECT(var_c->is_captured()); |
2309 EXPECT_EQ(1, var_c->index()); | 2310 EXPECT_EQ(1, var_c->index()); |
2310 EXPECT_EQ(parent_scope_context_level - local_scope_context_level, | 2311 EXPECT_EQ(parent_scope_context_level - local_scope_context_level, |
2311 var_c->owner()->context_level()); // Adjusted context level. | 2312 var_c->owner()->context_level()); // Adjusted context level. |
2312 } | 2313 } |
2313 | 2314 |
2314 | 2315 |
2315 TEST_CASE(Closure) { | 2316 TEST_CASE(Closure) { |
2316 // Allocate the class first. | 2317 // Allocate the class first. |
2317 const String& class_name = String::Handle(String::NewSymbol("MyClass")); | 2318 const String& class_name = String::Handle(Symbols::New("MyClass")); |
2318 const Script& script = Script::Handle(); | 2319 const Script& script = Script::Handle(); |
2319 const Class& cls = | 2320 const Class& cls = |
2320 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 2321 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); |
2321 const Array& functions = Array::Handle(Array::New(1)); | 2322 const Array& functions = Array::Handle(Array::New(1)); |
2322 | 2323 |
2323 const Context& context = Context::Handle(Context::New(0)); | 2324 const Context& context = Context::Handle(Context::New(0)); |
2324 Function& parent = Function::Handle(); | 2325 Function& parent = Function::Handle(); |
2325 const String& parent_name = String::Handle(String::NewSymbol("foo_papa")); | 2326 const String& parent_name = String::Handle(Symbols::New("foo_papa")); |
2326 parent = Function::New(parent_name, RawFunction::kRegularFunction, | 2327 parent = Function::New(parent_name, RawFunction::kRegularFunction, |
2327 false, false, 0); | 2328 false, false, 0); |
2328 functions.SetAt(0, parent); | 2329 functions.SetAt(0, parent); |
2329 cls.SetFunctions(functions); | 2330 cls.SetFunctions(functions); |
2330 | 2331 |
2331 Function& function = Function::Handle(); | 2332 Function& function = Function::Handle(); |
2332 const String& function_name = String::Handle(String::NewSymbol("foo")); | 2333 const String& function_name = String::Handle(Symbols::New("foo")); |
2333 function = Function::NewClosureFunction(function_name, parent, 0); | 2334 function = Function::NewClosureFunction(function_name, parent, 0); |
2334 const Class& signature_class = Class::Handle( | 2335 const Class& signature_class = Class::Handle( |
2335 Class::NewSignatureClass(function_name, function, script)); | 2336 Class::NewSignatureClass(function_name, function, script)); |
2336 const Closure& closure = Closure::Handle(Closure::New(function, context)); | 2337 const Closure& closure = Closure::Handle(Closure::New(function, context)); |
2337 const Class& closure_class = Class::Handle(closure.clazz()); | 2338 const Class& closure_class = Class::Handle(closure.clazz()); |
2338 EXPECT(closure_class.IsSignatureClass()); | 2339 EXPECT(closure_class.IsSignatureClass()); |
2339 EXPECT(closure_class.IsCanonicalSignatureClass()); | 2340 EXPECT(closure_class.IsCanonicalSignatureClass()); |
2340 EXPECT_EQ(closure_class.raw(), signature_class.raw()); | 2341 EXPECT_EQ(closure_class.raw(), signature_class.raw()); |
2341 const Function& signature_function = | 2342 const Function& signature_function = |
2342 Function::Handle(signature_class.signature_function()); | 2343 Function::Handle(signature_class.signature_function()); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2384 str3 = OneByteString::null(); | 2385 str3 = OneByteString::null(); |
2385 EXPECT(str3.IsString()); | 2386 EXPECT(str3.IsString()); |
2386 EXPECT(!str3.IsOneByteString()); | 2387 EXPECT(!str3.IsOneByteString()); |
2387 } | 2388 } |
2388 | 2389 |
2389 | 2390 |
2390 // only ia32 and x64 can run execution tests. | 2391 // only ia32 and x64 can run execution tests. |
2391 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) | 2392 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) |
2392 | 2393 |
2393 static Function* CreateFunction(const char* name) { | 2394 static Function* CreateFunction(const char* name) { |
2394 const String& function_name = String::ZoneHandle(String::NewSymbol(name)); | 2395 const String& function_name = String::ZoneHandle(Symbols::New(name)); |
2395 Function& function = Function::ZoneHandle( | 2396 Function& function = Function::ZoneHandle( |
2396 Function::New(function_name, RawFunction::kRegularFunction, | 2397 Function::New(function_name, RawFunction::kRegularFunction, |
2397 true, false, 0)); | 2398 true, false, 0)); |
2398 return &function; | 2399 return &function; |
2399 } | 2400 } |
2400 | 2401 |
2401 // Test for Code and Instruction object creation. | 2402 // Test for Code and Instruction object creation. |
2402 TEST_CASE(Code) { | 2403 TEST_CASE(Code) { |
2403 extern void GenerateIncrement(Assembler* assembler); | 2404 extern void GenerateIncrement(Assembler* assembler); |
2404 Assembler _assembler_; | 2405 Assembler _assembler_; |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2527 EXPECT_EQ(20, pc_descs.TokenIndex(0)); | 2528 EXPECT_EQ(20, pc_descs.TokenIndex(0)); |
2528 EXPECT_EQ(3, pc_descs.TryIndex(5)); | 2529 EXPECT_EQ(3, pc_descs.TryIndex(5)); |
2529 EXPECT_EQ(static_cast<uword>(80), pc_descs.PC(5)); | 2530 EXPECT_EQ(static_cast<uword>(80), pc_descs.PC(5)); |
2530 EXPECT_EQ(150, pc_descs.TokenIndex(5)); | 2531 EXPECT_EQ(150, pc_descs.TokenIndex(5)); |
2531 EXPECT_EQ(PcDescriptors::kOther, pc_descs.DescriptorKind(0)); | 2532 EXPECT_EQ(PcDescriptors::kOther, pc_descs.DescriptorKind(0)); |
2532 EXPECT_EQ(PcDescriptors::kDeopt, pc_descs.DescriptorKind(1)); | 2533 EXPECT_EQ(PcDescriptors::kDeopt, pc_descs.DescriptorKind(1)); |
2533 } | 2534 } |
2534 | 2535 |
2535 | 2536 |
2536 static RawClass* CreateTestClass(const char* name) { | 2537 static RawClass* CreateTestClass(const char* name) { |
2537 const String& class_name = String::Handle(String::NewSymbol(name)); | 2538 const String& class_name = String::Handle(Symbols::New(name)); |
2538 const Class& cls = Class::Handle( | 2539 const Class& cls = Class::Handle( |
2539 Class::New(class_name, Script::Handle(), Scanner::kDummyTokenIndex)); | 2540 Class::New(class_name, Script::Handle(), Scanner::kDummyTokenIndex)); |
2540 return cls.raw(); | 2541 return cls.raw(); |
2541 } | 2542 } |
2542 | 2543 |
2543 | 2544 |
2544 static RawField* CreateTestField(const char* name) { | 2545 static RawField* CreateTestField(const char* name) { |
2545 const Class& cls = Class::Handle(CreateTestClass("global:")); | 2546 const Class& cls = Class::Handle(CreateTestClass("global:")); |
2546 const String& field_name = String::Handle(String::NewSymbol(name)); | 2547 const String& field_name = String::Handle(Symbols::New(name)); |
2547 const Field& field = Field::Handle(Field::New(field_name, true, false, 0)); | 2548 const Field& field = Field::Handle(Field::New(field_name, true, false, 0)); |
2548 field.set_owner(cls); | 2549 field.set_owner(cls); |
2549 return field.raw(); | 2550 return field.raw(); |
2550 } | 2551 } |
2551 | 2552 |
2552 | 2553 |
2553 TEST_CASE(ClassDictionaryIterator) { | 2554 TEST_CASE(ClassDictionaryIterator) { |
2554 Class& ae66 = Class::ZoneHandle(CreateTestClass("Ae6/6")); | 2555 Class& ae66 = Class::ZoneHandle(CreateTestClass("Ae6/6")); |
2555 Class& re44 = Class::ZoneHandle(CreateTestClass("Re4/4")); | 2556 Class& re44 = Class::ZoneHandle(CreateTestClass("Re4/4")); |
2556 Field& ce68 = Field::ZoneHandle(CreateTestField("Ce6/8")); | 2557 Field& ce68 = Field::ZoneHandle(CreateTestField("Ce6/8")); |
(...skipping 10 matching lines...) Expand all Loading... |
2567 while (iterator.HasNext()) { | 2568 while (iterator.HasNext()) { |
2568 cls = iterator.GetNextClass(); | 2569 cls = iterator.GetNextClass(); |
2569 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw())); | 2570 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw())); |
2570 count++; | 2571 count++; |
2571 } | 2572 } |
2572 ASSERT(count == 2); | 2573 ASSERT(count == 2); |
2573 } | 2574 } |
2574 | 2575 |
2575 | 2576 |
2576 static RawFunction* GetDummyTarget(const char* name) { | 2577 static RawFunction* GetDummyTarget(const char* name) { |
2577 const String& function_name = String::Handle(String::NewSymbol(name)); | 2578 const String& function_name = String::Handle(Symbols::New(name)); |
2578 const bool is_static = false; | 2579 const bool is_static = false; |
2579 const bool is_const = false; | 2580 const bool is_const = false; |
2580 return Function::New(function_name, | 2581 return Function::New(function_name, |
2581 RawFunction::kRegularFunction, | 2582 RawFunction::kRegularFunction, |
2582 is_static, | 2583 is_static, |
2583 is_const, | 2584 is_const, |
2584 0); | 2585 0); |
2585 } | 2586 } |
2586 | 2587 |
2587 | 2588 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2632 EXPECT_EQ(1, o2.NumberOfChecks()); | 2633 EXPECT_EQ(1, o2.NumberOfChecks()); |
2633 o2.GetCheckAt(0, &test_class_ids, &test_target); | 2634 o2.GetCheckAt(0, &test_class_ids, &test_target); |
2634 EXPECT_EQ(2, test_class_ids.length()); | 2635 EXPECT_EQ(2, test_class_ids.length()); |
2635 EXPECT_EQ(kSmi, test_class_ids[0]); | 2636 EXPECT_EQ(kSmi, test_class_ids[0]); |
2636 EXPECT_EQ(kSmi, test_class_ids[1]); | 2637 EXPECT_EQ(kSmi, test_class_ids[1]); |
2637 EXPECT_EQ(target1.raw(), test_target.raw()); | 2638 EXPECT_EQ(target1.raw(), test_target.raw()); |
2638 } | 2639 } |
2639 | 2640 |
2640 | 2641 |
2641 TEST_CASE(SubtypeTestCache) { | 2642 TEST_CASE(SubtypeTestCache) { |
2642 String& class_name = String::Handle(String::NewSymbol("EmptyClass")); | 2643 String& class_name = String::Handle(Symbols::New("EmptyClass")); |
2643 Script& script = Script::Handle(); | 2644 Script& script = Script::Handle(); |
2644 const Class& empty_class = | 2645 const Class& empty_class = |
2645 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 2646 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); |
2646 SubtypeTestCache& cache = SubtypeTestCache::Handle(SubtypeTestCache::New()); | 2647 SubtypeTestCache& cache = SubtypeTestCache::Handle(SubtypeTestCache::New()); |
2647 ASSERT(!cache.IsNull()); | 2648 ASSERT(!cache.IsNull()); |
2648 EXPECT_EQ(0, cache.NumberOfChecks()); | 2649 EXPECT_EQ(0, cache.NumberOfChecks()); |
2649 const TypeArguments& targ_0 = TypeArguments::Handle(TypeArguments::New(2)); | 2650 const TypeArguments& targ_0 = TypeArguments::Handle(TypeArguments::New(2)); |
2650 const TypeArguments& targ_1 = TypeArguments::Handle(TypeArguments::New(3)); | 2651 const TypeArguments& targ_1 = TypeArguments::Handle(TypeArguments::New(3)); |
2651 cache.AddCheck(empty_class.id(), targ_0, targ_1, Bool::Handle(Bool::True())); | 2652 cache.AddCheck(empty_class.id(), targ_0, targ_1, Bool::Handle(Bool::True())); |
2652 EXPECT_EQ(1, cache.NumberOfChecks()); | 2653 EXPECT_EQ(1, cache.NumberOfChecks()); |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2779 // Named double-private constructor mismatch. | 2780 // Named double-private constructor mismatch. |
2780 mangled_name = OneByteString::New("foo@12345.named@12345"); | 2781 mangled_name = OneByteString::New("foo@12345.named@12345"); |
2781 bare_name = OneByteString::New("foo.name"); | 2782 bare_name = OneByteString::New("foo.name"); |
2782 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); | 2783 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); |
2783 } | 2784 } |
2784 | 2785 |
2785 | 2786 |
2786 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 2787 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
2787 | 2788 |
2788 } // namespace dart | 2789 } // namespace dart |
OLD | NEW |