Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: runtime/vm/isolate.cc

Issue 73893004: Revert "Fix VM not accepting static methods for Isolate.spawn." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/isolate.h ('k') | tests/isolate/static_function_lib.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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/isolate.h" 5 #include "vm/isolate.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 "platform/json.h" 9 #include "platform/json.h"
10 #include "lib/mirrors.h" 10 #include "lib/mirrors.h"
(...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 T* handle = reinterpret_cast<T*>(reusable_handles_.AllocateScopedHandle()); 989 T* handle = reinterpret_cast<T*>(reusable_handles_.AllocateScopedHandle());
990 T::initializeHandle(handle, T::null()); 990 T::initializeHandle(handle, T::null());
991 return handle; 991 return handle;
992 } 992 }
993 993
994 994
995 IsolateSpawnState::IsolateSpawnState(const Function& func) 995 IsolateSpawnState::IsolateSpawnState(const Function& func)
996 : isolate_(NULL), 996 : isolate_(NULL),
997 script_url_(NULL), 997 script_url_(NULL),
998 library_url_(NULL), 998 library_url_(NULL),
999 class_name_(NULL),
1000 function_name_(NULL), 999 function_name_(NULL),
1001 exception_callback_name_(NULL) { 1000 exception_callback_name_(NULL) {
1002 script_url_ = NULL; 1001 script_url_ = NULL;
1003 const Class& cls = Class::Handle(func.Owner()); 1002 const Class& cls = Class::Handle(func.Owner());
1003 ASSERT(cls.IsTopLevel());
1004 const Library& lib = Library::Handle(cls.library()); 1004 const Library& lib = Library::Handle(cls.library());
1005 const String& lib_url = String::Handle(lib.url()); 1005 const String& lib_url = String::Handle(lib.url());
1006 library_url_ = strdup(lib_url.ToCString()); 1006 library_url_ = strdup(lib_url.ToCString());
1007 1007
1008 const String& func_name = String::Handle(func.name()); 1008 const String& func_name = String::Handle(func.name());
1009 function_name_ = strdup(func_name.ToCString()); 1009 function_name_ = strdup(func_name.ToCString());
1010 if (!cls.IsTopLevel()) {
1011 const String& class_name = String::Handle(cls.Name());
1012 class_name_ = strdup(class_name.ToCString());
1013 }
1014 exception_callback_name_ = strdup("_unhandledExceptionCallback"); 1010 exception_callback_name_ = strdup("_unhandledExceptionCallback");
1015 } 1011 }
1016 1012
1017 1013
1018 IsolateSpawnState::IsolateSpawnState(const char* script_url) 1014 IsolateSpawnState::IsolateSpawnState(const char* script_url)
1019 : isolate_(NULL), 1015 : isolate_(NULL),
1020 library_url_(NULL), 1016 library_url_(NULL),
1021 class_name_(NULL),
1022 function_name_(NULL), 1017 function_name_(NULL),
1023 exception_callback_name_(NULL) { 1018 exception_callback_name_(NULL) {
1024 script_url_ = strdup(script_url); 1019 script_url_ = strdup(script_url);
1025 library_url_ = NULL; 1020 library_url_ = NULL;
1026 function_name_ = strdup("main"); 1021 function_name_ = strdup("main");
1027 exception_callback_name_ = strdup("_unhandledExceptionCallback"); 1022 exception_callback_name_ = strdup("_unhandledExceptionCallback");
1028 } 1023 }
1029 1024
1030 1025
1031 IsolateSpawnState::~IsolateSpawnState() { 1026 IsolateSpawnState::~IsolateSpawnState() {
1032 free(script_url_); 1027 free(script_url_);
1033 free(library_url_); 1028 free(library_url_);
1034 free(function_name_); 1029 free(function_name_);
1035 free(class_name_);
1036 free(exception_callback_name_); 1030 free(exception_callback_name_);
1037 } 1031 }
1038 1032
1039 1033
1040 RawObject* IsolateSpawnState::ResolveFunction() { 1034 RawObject* IsolateSpawnState::ResolveFunction() {
1041 // Resolve the library. 1035 // Resolve the library.
1042 Library& lib = Library::Handle(); 1036 Library& lib = Library::Handle();
1043 if (library_url()) { 1037 if (library_url()) {
1044 const String& lib_url = String::Handle(String::New(library_url())); 1038 const String& lib_url = String::Handle(String::New(library_url()));
1045 lib = Library::LookupLibrary(lib_url); 1039 lib = Library::LookupLibrary(lib_url);
1046 if (lib.IsNull() || lib.IsError()) { 1040 if (lib.IsNull() || lib.IsError()) {
1047 const String& msg = String::Handle(String::NewFormatted( 1041 const String& msg = String::Handle(String::NewFormatted(
1048 "Unable to find library '%s'.", library_url())); 1042 "Unable to find library '%s'.", library_url()));
1049 return LanguageError::New(msg); 1043 return LanguageError::New(msg);
1050 } 1044 }
1051 } else { 1045 } else {
1052 lib = isolate()->object_store()->root_library(); 1046 lib = isolate()->object_store()->root_library();
1053 } 1047 }
1054 ASSERT(!lib.IsNull()); 1048 ASSERT(!lib.IsNull());
1055 1049
1056 // Resolve the function. 1050 // Resolve the function.
1057 const String& func_name = String::Handle(String::New(function_name())); 1051 const String& func_name =
1058 1052 String::Handle(String::New(function_name()));
1059 if (class_name() == NULL) { 1053 const Function& func = Function::Handle(lib.LookupLocalFunction(func_name));
1060 const Function& func = Function::Handle(lib.LookupLocalFunction(func_name));
1061 if (func.IsNull()) {
1062 const String& msg = String::Handle(String::NewFormatted(
1063 "Unable to resolve function '%s' in library '%s'.",
1064 function_name(),
1065 (library_url() != NULL ? library_url() : script_url())));
1066 return LanguageError::New(msg);
1067 }
1068 return func.raw();
1069 }
1070
1071 const String& cls_name = String::Handle(String::New(class_name()));
1072 const Class& cls = Class::Handle(lib.LookupLocalClass(cls_name));
1073 if (cls.IsNull()) {
1074 const String& msg = String::Handle(String::NewFormatted(
1075 "Unable to resolve class '%s' in library '%s'.",
1076 class_name(),
1077 (library_url() != NULL ? library_url() : script_url())));
1078 return LanguageError::New(msg);
1079 }
1080 const Function& func =
1081 Function::Handle(cls.LookupStaticFunctionAllowPrivate(func_name));
1082 if (func.IsNull()) { 1054 if (func.IsNull()) {
1083 const String& msg = String::Handle(String::NewFormatted( 1055 const String& msg = String::Handle(String::NewFormatted(
1084 "Unable to resolve static method '%s.%s' in library '%s'.", 1056 "Unable to resolve function '%s' in library '%s'.",
1085 class_name(), function_name(), 1057 function_name(), (library_url() ? library_url() : script_url())));
1086 (library_url() != NULL ? library_url() : script_url())));
1087 return LanguageError::New(msg); 1058 return LanguageError::New(msg);
1088 } 1059 }
1089 return func.raw(); 1060 return func.raw();
1090 } 1061 }
1091 1062
1092 1063
1093 void IsolateSpawnState::Cleanup() { 1064 void IsolateSpawnState::Cleanup() {
1094 SwitchIsolateScope switch_scope(isolate()); 1065 SwitchIsolateScope switch_scope(isolate());
1095 Dart::ShutdownIsolate(); 1066 Dart::ShutdownIsolate();
1096 } 1067 }
1097 1068
1098 } // namespace dart 1069 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/isolate.h ('k') | tests/isolate/static_function_lib.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698