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 12035 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12046 } | 12046 } |
12047 } | 12047 } |
12048 if (!func.IsNull()) { | 12048 if (!func.IsNull()) { |
12049 return func.raw(); | 12049 return func.raw(); |
12050 } | 12050 } |
12051 } | 12051 } |
12052 return Function::null(); | 12052 return Function::null(); |
12053 } | 12053 } |
12054 | 12054 |
12055 | 12055 |
| 12056 RawObject* Library::GetFunctionClosure(const String& name) const { |
| 12057 Thread* thread = Thread::Current(); |
| 12058 Zone* zone = thread->zone(); |
| 12059 Function& func = Function::Handle(zone, LookupFunctionAllowPrivate(name)); |
| 12060 if (func.IsNull()) { |
| 12061 // Check whether the function is reexported into the library. |
| 12062 const Object& obj = Object::Handle(zone, LookupReExport(name)); |
| 12063 if (obj.IsFunction()) { |
| 12064 func ^= obj.raw(); |
| 12065 } else { |
| 12066 // Check if there is a getter of 'name', in which case invoke it |
| 12067 // and return the result. |
| 12068 const String& getter_name = String::Handle(zone, Field::GetterName(name)); |
| 12069 func = LookupFunctionAllowPrivate(getter_name); |
| 12070 if (func.IsNull()) { |
| 12071 return Closure::null(); |
| 12072 } |
| 12073 // Invoke the getter and return the result. |
| 12074 return DartEntry::InvokeFunction(func, Object::empty_array()); |
| 12075 } |
| 12076 } |
| 12077 func = func.ImplicitClosureFunction(); |
| 12078 return func.ImplicitStaticClosure(); |
| 12079 } |
| 12080 |
| 12081 |
12056 #if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT) | 12082 #if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT) |
12057 void Library::CheckFunctionFingerprints() { | 12083 void Library::CheckFunctionFingerprints() { |
12058 GrowableArray<Library*> all_libs; | 12084 GrowableArray<Library*> all_libs; |
12059 Function& func = Function::Handle(); | 12085 Function& func = Function::Handle(); |
12060 bool has_errors = false; | 12086 bool has_errors = false; |
12061 | 12087 |
12062 #define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \ | 12088 #define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \ |
12063 func = GetFunction(all_libs, #class_name, #function_name); \ | 12089 func = GetFunction(all_libs, #class_name, #function_name); \ |
12064 if (func.IsNull()) { \ | 12090 if (func.IsNull()) { \ |
12065 has_errors = true; \ | 12091 has_errors = true; \ |
(...skipping 11310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
23376 return UserTag::null(); | 23402 return UserTag::null(); |
23377 } | 23403 } |
23378 | 23404 |
23379 | 23405 |
23380 const char* UserTag::ToCString() const { | 23406 const char* UserTag::ToCString() const { |
23381 const String& tag_label = String::Handle(label()); | 23407 const String& tag_label = String::Handle(label()); |
23382 return tag_label.ToCString(); | 23408 return tag_label.ToCString(); |
23383 } | 23409 } |
23384 | 23410 |
23385 } // namespace dart | 23411 } // namespace dart |
OLD | NEW |