| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 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 | 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 | 5 |
| 6 #include "vm/ast_printer.h" | 6 #include "vm/ast_printer.h" |
| 7 #include "vm/class_finalizer.h" | 7 #include "vm/class_finalizer.h" |
| 8 #include "vm/longjump.h" | 8 #include "vm/longjump.h" |
| 9 #include "vm/object.h" | 9 #include "vm/object.h" |
| 10 #include "vm/parser.h" | 10 #include "vm/parser.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 | 16 |
| 16 void DumpFunction(const Library& lib, const char* cname, const char* fname) { | 17 void DumpFunction(const Library& lib, const char* cname, const char* fname) { |
| 17 const String& classname = String::Handle(String::NewSymbol(cname)); | 18 const String& classname = String::Handle(Symbols::New(cname)); |
| 18 Class& cls = Class::Handle(lib.LookupClass(classname)); | 19 Class& cls = Class::Handle(lib.LookupClass(classname)); |
| 19 EXPECT(!cls.IsNull()); | 20 EXPECT(!cls.IsNull()); |
| 20 | 21 |
| 21 String& funcname = String::Handle(String::New(fname)); | 22 String& funcname = String::Handle(String::New(fname)); |
| 22 Function& function = Function::Handle(cls.LookupStaticFunction(funcname)); | 23 Function& function = Function::Handle(cls.LookupStaticFunction(funcname)); |
| 23 EXPECT(!function.IsNull()); | 24 EXPECT(!function.IsNull()); |
| 24 | 25 |
| 25 bool retval; | 26 bool retval; |
| 26 Isolate* isolate = Isolate::Current(); | 27 Isolate* isolate = Isolate::Current(); |
| 27 EXPECT(isolate != NULL); | 28 EXPECT(isolate != NULL); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 41 EXPECT(retval); | 42 EXPECT(retval); |
| 42 isolate->set_long_jump_base(base); | 43 isolate->set_long_jump_base(base); |
| 43 } | 44 } |
| 44 | 45 |
| 45 | 46 |
| 46 void CheckField(const Library& lib, | 47 void CheckField(const Library& lib, |
| 47 const char* class_name, | 48 const char* class_name, |
| 48 const char* field_name, | 49 const char* field_name, |
| 49 bool expect_static, | 50 bool expect_static, |
| 50 bool is_final) { | 51 bool is_final) { |
| 51 const String& classname = String::Handle(String::NewSymbol(class_name)); | 52 const String& classname = String::Handle(Symbols::New(class_name)); |
| 52 Class& cls = Class::Handle(lib.LookupClass(classname)); | 53 Class& cls = Class::Handle(lib.LookupClass(classname)); |
| 53 EXPECT(!cls.IsNull()); | 54 EXPECT(!cls.IsNull()); |
| 54 | 55 |
| 55 String& fieldname = String::Handle(String::New(field_name)); | 56 String& fieldname = String::Handle(String::New(field_name)); |
| 56 String& functionname = String::Handle(); | 57 String& functionname = String::Handle(); |
| 57 Function& function = Function::Handle(); | 58 Function& function = Function::Handle(); |
| 58 Field& field = Field::Handle(); | 59 Field& field = Field::Handle(); |
| 59 if (expect_static) { | 60 if (expect_static) { |
| 60 field ^= cls.LookupStaticField(fieldname); | 61 field ^= cls.LookupStaticField(fieldname); |
| 61 functionname ^= Field::GetterName(fieldname); | 62 functionname ^= Field::GetterName(fieldname); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 76 EXPECT(!field.IsNull()); | 77 EXPECT(!field.IsNull()); |
| 77 | 78 |
| 78 EXPECT_EQ(field.is_static(), expect_static); | 79 EXPECT_EQ(field.is_static(), expect_static); |
| 79 } | 80 } |
| 80 | 81 |
| 81 | 82 |
| 82 void CheckFunction(const Library& lib, | 83 void CheckFunction(const Library& lib, |
| 83 const char* class_name, | 84 const char* class_name, |
| 84 const char* function_name, | 85 const char* function_name, |
| 85 bool expect_static) { | 86 bool expect_static) { |
| 86 const String& classname = String::Handle(String::NewSymbol(class_name)); | 87 const String& classname = String::Handle(Symbols::New(class_name)); |
| 87 Class& cls = Class::Handle(lib.LookupClass(classname)); | 88 Class& cls = Class::Handle(lib.LookupClass(classname)); |
| 88 EXPECT(!cls.IsNull()); | 89 EXPECT(!cls.IsNull()); |
| 89 | 90 |
| 90 String& functionname = String::Handle(String::New(function_name)); | 91 String& functionname = String::Handle(String::New(function_name)); |
| 91 Function& function = Function::Handle(); | 92 Function& function = Function::Handle(); |
| 92 if (expect_static) { | 93 if (expect_static) { |
| 93 function ^= cls.LookupStaticFunction(functionname); | 94 function ^= cls.LookupStaticFunction(functionname); |
| 94 } else { | 95 } else { |
| 95 function ^= cls.LookupDynamicFunction(functionname); | 96 function ^= cls.LookupDynamicFunction(functionname); |
| 96 } | 97 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 124 Parser::ParseCompilationUnit(lib, script); | 125 Parser::ParseCompilationUnit(lib, script); |
| 125 EXPECT(ClassFinalizer::FinalizePendingClasses()); | 126 EXPECT(ClassFinalizer::FinalizePendingClasses()); |
| 126 CheckField(lib, "A", "f1", false, false); | 127 CheckField(lib, "A", "f1", false, false); |
| 127 CheckField(lib, "A", "f2", false, true); | 128 CheckField(lib, "A", "f2", false, true); |
| 128 CheckField(lib, "A", "f3", false, true); | 129 CheckField(lib, "A", "f3", false, true); |
| 129 CheckField(lib, "A", "f4", false, true); | 130 CheckField(lib, "A", "f4", false, true); |
| 130 CheckField(lib, "A", "s1", true, false); | 131 CheckField(lib, "A", "s1", true, false); |
| 131 CheckField(lib, "A", "s2", true, false); | 132 CheckField(lib, "A", "s2", true, false); |
| 132 // No field entries are added for static const fields. | 133 // No field entries are added for static const fields. |
| 133 String& fieldname = String::Handle(String::New("s3")); | 134 String& fieldname = String::Handle(String::New("s3")); |
| 134 const String& classname = String::Handle(String::NewSymbol("A")); | 135 const String& classname = String::Handle(Symbols::New("A")); |
| 135 const Class& cls = Class::Handle(lib.LookupClass(classname)); | 136 const Class& cls = Class::Handle(lib.LookupClass(classname)); |
| 136 const Field& field = Field::Handle(cls.LookupStaticField(fieldname)); | 137 const Field& field = Field::Handle(cls.LookupStaticField(fieldname)); |
| 137 EXPECT(!field.IsNull()); | 138 EXPECT(!field.IsNull()); |
| 138 Object& val = Object::Handle(field.value()); | 139 Object& val = Object::Handle(field.value()); |
| 139 // The static const field initializer is not evaluated and the field | 140 // The static const field initializer is not evaluated and the field |
| 140 // value is not initialized until the field is referenced by code that | 141 // value is not initialized until the field is referenced by code that |
| 141 // is compiled. | 142 // is compiled. |
| 142 EXPECT(val.raw() == Object::sentinel()); | 143 EXPECT(val.raw() == Object::sentinel()); |
| 143 | 144 |
| 144 CheckFunction(lib, "A", "bar", true); | 145 CheckFunction(lib, "A", "bar", true); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 170 Parser::ParseCompilationUnit(lib, script); | 171 Parser::ParseCompilationUnit(lib, script); |
| 171 EXPECT(ClassFinalizer::FinalizePendingClasses()); | 172 EXPECT(ClassFinalizer::FinalizePendingClasses()); |
| 172 | 173 |
| 173 DumpFunction(lib, "A", "foo"); | 174 DumpFunction(lib, "A", "foo"); |
| 174 DumpFunction(lib, "A", "bar"); | 175 DumpFunction(lib, "A", "bar"); |
| 175 DumpFunction(lib, "A", "baz"); | 176 DumpFunction(lib, "A", "baz"); |
| 176 DumpFunction(lib, "B", "bam"); | 177 DumpFunction(lib, "B", "bam"); |
| 177 } | 178 } |
| 178 | 179 |
| 179 } // namespace dart | 180 } // namespace dart |
| OLD | NEW |