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

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

Issue 8528010: Changes to pass the current isolate to all runtime and native calls. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 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 | « no previous file | runtime/vm/allocation.h » ('j') | runtime/vm/code_generator.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "vm/bootstrap_natives.h" 5 #include "vm/bootstrap_natives.h"
6 6
7 #include "vm/assert.h" 7 #include "vm/assert.h"
8 #include "vm/class_finalizer.h" 8 #include "vm/class_finalizer.h"
9 #include "vm/dart.h" 9 #include "vm/dart.h"
10 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 delete data; 139 delete data;
140 140
141 Isolate::SetCurrent(isolate); 141 Isolate::SetCurrent(isolate);
142 // Intialize stack limit in case we are running isolate in a 142 // Intialize stack limit in case we are running isolate in a
143 // different thread than in which it was initialized. 143 // different thread than in which it was initialized.
144 isolate->SetStackLimitFromCurrentTOS(reinterpret_cast<uword>(&isolate)); 144 isolate->SetStackLimitFromCurrentTOS(reinterpret_cast<uword>(&isolate));
145 LongJump* base = isolate->long_jump_base(); 145 LongJump* base = isolate->long_jump_base();
146 LongJump jump; 146 LongJump jump;
147 isolate->set_long_jump_base(&jump); 147 isolate->set_long_jump_base(&jump);
148 if (setjmp(*jump.Set()) == 0) { 148 if (setjmp(*jump.Set()) == 0) {
149 Zone zone; 149 Zone zone(isolate);
150 HandleScope handle_scope; 150 HandleScope handle_scope(isolate);
151 ASSERT(ClassFinalizer::FinalizePendingClasses()); 151 ASSERT(ClassFinalizer::FinalizePendingClasses());
152 // Lookup the target class by name, create an instance and call the run 152 // Lookup the target class by name, create an instance and call the run
153 // method. 153 // method.
154 const String& lib_name = String::Handle(String::NewSymbol(library_url)); 154 const String& lib_name = String::Handle(String::NewSymbol(library_url));
155 const Library& lib = Library::Handle(Library::LookupLibrary(lib_name)); 155 const Library& lib = Library::Handle(Library::LookupLibrary(lib_name));
156 ASSERT(!lib.IsNull()); 156 ASSERT(!lib.IsNull());
157 const String& cls_name = String::Handle(String::NewSymbol(class_name)); 157 const String& cls_name = String::Handle(String::NewSymbol(class_name));
158 const Class& target_class = Class::Handle(lib.LookupClass(cls_name)); 158 const Class& target_class = Class::Handle(lib.LookupClass(cls_name));
159 // TODO(iposva): Deserialize or call the constructor after allocating. 159 // TODO(iposva): Deserialize or call the constructor after allocating.
160 // For now, we only support a non-parameterized or raw target class. 160 // For now, we only support a non-parameterized or raw target class.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 if (result.IsUnhandledException()) { 199 if (result.IsUnhandledException()) {
200 UnhandledException& uhe = UnhandledException::Handle(); 200 UnhandledException& uhe = UnhandledException::Handle();
201 uhe ^= result.raw(); 201 uhe ^= result.raw();
202 ProcessUnhandledException(uhe); 202 ProcessUnhandledException(uhe);
203 } 203 }
204 ASSERT(result.IsNull()); 204 ASSERT(result.IsNull());
205 free(class_name); 205 free(class_name);
206 isolate->StandardRunLoop(); 206 isolate->StandardRunLoop();
207 207
208 } else { 208 } else {
209 Zone zone; 209 Zone zone(isolate);
210 HandleScope handle_scope; 210 HandleScope handle_scope(isolate);
211 const String& error = String::Handle( 211 const String& error = String::Handle(
212 Isolate::Current()->object_store()->sticky_error()); 212 Isolate::Current()->object_store()->sticky_error());
213 const char* errmsg = error.ToCString(); 213 const char* errmsg = error.ToCString();
214 fprintf(stderr, "%s\n", errmsg); 214 fprintf(stderr, "%s\n", errmsg);
215 exit(255); 215 exit(255);
216 } 216 }
217 isolate->set_long_jump_base(base); 217 isolate->set_long_jump_base(base);
218 Dart::ShutdownIsolate(); 218 Dart::ShutdownIsolate();
219 } 219 }
220 220
221 221
222 static bool CheckArguments(const char* library_url, const char* class_name) { 222 static bool CheckArguments(const char* library_url, const char* class_name) {
223 Zone zone; 223 Isolate* isolate = Isolate::Current();
224 HandleScope handle_scope; 224 Zone zone(isolate);
225 HandleScope handle_scope(isolate);
225 String& name = String::Handle(); 226 String& name = String::Handle();
226 if (!ClassFinalizer::FinalizePendingClasses()) { 227 if (!ClassFinalizer::FinalizePendingClasses()) {
227 return false; 228 return false;
228 } 229 }
229 // Lookup the target class by name, create an instance and call the run 230 // Lookup the target class by name, create an instance and call the run
230 // method. 231 // method.
231 name ^= String::NewSymbol(library_url); 232 name ^= String::NewSymbol(library_url);
232 const Library& lib = Library::Handle(Library::LookupLibrary(name)); 233 const Library& lib = Library::Handle(Library::LookupLibrary(name));
233 if (lib.IsNull()) { 234 if (lib.IsNull()) {
234 const String& error = String::Handle( 235 const String& error = String::Handle(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 strdup(class_name), 283 strdup(class_name),
283 port_id)); 284 port_id));
284 new Thread(RunIsolate, data); 285 new Thread(RunIsolate, data);
285 } else { 286 } else {
286 // Error spawning the isolate, maybe due to initialization errors or 287 // Error spawning the isolate, maybe due to initialization errors or
287 // errors while loading the application into spawned isolate, shut 288 // errors while loading the application into spawned isolate, shut
288 // it down and report error. 289 // it down and report error.
289 // Make sure to grab the error message out of the isolate before it has 290 // Make sure to grab the error message out of the isolate before it has
290 // been shutdown and to allocate it in the preserved isolates zone. 291 // been shutdown and to allocate it in the preserved isolates zone.
291 { 292 {
292 Zone zone; 293 Zone zone(spawned_isolate);
293 HandleScope scope; 294 HandleScope scope(spawned_isolate);
294 const String& error = String::Handle( 295 const String& error = String::Handle(
295 spawned_isolate->object_store()->sticky_error()); 296 spawned_isolate->object_store()->sticky_error());
296 const char* temp_error_msg = error.ToCString(); 297 const char* temp_error_msg = error.ToCString();
297 intptr_t err_len = strlen(temp_error_msg) + 1; 298 intptr_t err_len = strlen(temp_error_msg) + 1;
298 Zone* preserved_zone = preserved_isolate->current_zone(); 299 Zone* preserved_zone = preserved_isolate->current_zone();
299 error_msg = reinterpret_cast<char*>(preserved_zone->Allocate(err_len)); 300 error_msg = reinterpret_cast<char*>(preserved_zone->Allocate(err_len));
300 OS::SNPrint( 301 OS::SNPrint(
301 const_cast<char*>(error_msg), err_len, "%s", temp_error_msg); 302 const_cast<char*>(error_msg), err_len, "%s", temp_error_msg);
302 } 303 }
303 Dart::ShutdownIsolate(); 304 Dart::ShutdownIsolate();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 intptr_t send_id = Smi::CheckedHandle(arguments->At(0)).Value(); 347 intptr_t send_id = Smi::CheckedHandle(arguments->At(0)).Value();
347 intptr_t reply_id = Smi::CheckedHandle(arguments->At(1)).Value(); 348 intptr_t reply_id = Smi::CheckedHandle(arguments->At(1)).Value();
348 // TODO(iposva): Allow for arbitrary messages to be sent. 349 // TODO(iposva): Allow for arbitrary messages to be sent.
349 void* data = SerializeObject(Instance::CheckedHandle(arguments->At(2))); 350 void* data = SerializeObject(Instance::CheckedHandle(arguments->At(2)));
350 351
351 // TODO(turnidge): Throw an exception when the return value is false? 352 // TODO(turnidge): Throw an exception when the return value is false?
352 PortMap::PostMessage(send_id, reply_id, data); 353 PortMap::PostMessage(send_id, reply_id, data);
353 } 354 }
354 355
355 } // namespace dart 356 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/allocation.h » ('j') | runtime/vm/code_generator.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698