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 "vm/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/become.h" | 10 #include "vm/become.h" |
(...skipping 12045 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12056 } | 12056 } |
12057 } | 12057 } |
12058 if (!func.IsNull()) { | 12058 if (!func.IsNull()) { |
12059 return func.raw(); | 12059 return func.raw(); |
12060 } | 12060 } |
12061 } | 12061 } |
12062 return Function::null(); | 12062 return Function::null(); |
12063 } | 12063 } |
12064 | 12064 |
12065 | 12065 |
| 12066 RawObject* Library::GetFunctionClosure(const String& name) const { |
| 12067 Thread* thread = Thread::Current(); |
| 12068 Zone* zone = thread->zone(); |
| 12069 Function& func = Function::Handle(zone, LookupFunctionAllowPrivate(name)); |
| 12070 if (func.IsNull()) { |
| 12071 // Check whether the function is reexported into the library. |
| 12072 const Object& obj = Object::Handle(zone, LookupReExport(name)); |
| 12073 if (obj.IsFunction()) { |
| 12074 func ^= obj.raw(); |
| 12075 } else { |
| 12076 // Check if there is a getter of 'name', in which case invoke it |
| 12077 // and return the result. |
| 12078 const String& getter_name = String::Handle(zone, Field::GetterName(name)); |
| 12079 func = LookupFunctionAllowPrivate(getter_name); |
| 12080 if (func.IsNull()) { |
| 12081 return Closure::null(); |
| 12082 } |
| 12083 // Invoke the getter and return the result. |
| 12084 return DartEntry::InvokeFunction(func, Object::empty_array()); |
| 12085 } |
| 12086 } |
| 12087 func = func.ImplicitClosureFunction(); |
| 12088 return func.ImplicitStaticClosure(); |
| 12089 } |
| 12090 |
| 12091 |
12066 #if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT) | 12092 #if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT) |
12067 void Library::CheckFunctionFingerprints() { | 12093 void Library::CheckFunctionFingerprints() { |
12068 GrowableArray<Library*> all_libs; | 12094 GrowableArray<Library*> all_libs; |
12069 Function& func = Function::Handle(); | 12095 Function& func = Function::Handle(); |
12070 bool has_errors = false; | 12096 bool has_errors = false; |
12071 | 12097 |
12072 #define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \ | 12098 #define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \ |
12073 func = GetFunction(all_libs, #class_name, #function_name); \ | 12099 func = GetFunction(all_libs, #class_name, #function_name); \ |
12074 if (func.IsNull()) { \ | 12100 if (func.IsNull()) { \ |
12075 has_errors = true; \ | 12101 has_errors = true; \ |
(...skipping 11317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
23393 return UserTag::null(); | 23419 return UserTag::null(); |
23394 } | 23420 } |
23395 | 23421 |
23396 | 23422 |
23397 const char* UserTag::ToCString() const { | 23423 const char* UserTag::ToCString() const { |
23398 const String& tag_label = String::Handle(label()); | 23424 const String& tag_label = String::Handle(label()); |
23399 return tag_label.ToCString(); | 23425 return tag_label.ToCString(); |
23400 } | 23426 } |
23401 | 23427 |
23402 } // namespace dart | 23428 } // namespace dart |
OLD | NEW |