| 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 "platform/assert.h" | 5 #include "platform/assert.h" | 
| 6 #include "vm/bootstrap_natives.h" | 6 #include "vm/bootstrap_natives.h" | 
| 7 #include "vm/class_finalizer.h" | 7 #include "vm/class_finalizer.h" | 
| 8 #include "vm/dart.h" | 8 #include "vm/dart.h" | 
| 9 #include "vm/dart_api_impl.h" | 9 #include "vm/dart_api_impl.h" | 
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 37 | 37 | 
| 38 | 38 | 
| 39 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { | 39 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { | 
| 40   void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); | 40   void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); | 
| 41   return reinterpret_cast<uint8_t*>(new_ptr); | 41   return reinterpret_cast<uint8_t*>(new_ptr); | 
| 42 } | 42 } | 
| 43 | 43 | 
| 44 | 44 | 
| 45 static void StoreError(Isolate* isolate, const Object& obj) { | 45 static void StoreError(Isolate* isolate, const Object& obj) { | 
| 46   ASSERT(obj.IsError()); | 46   ASSERT(obj.IsError()); | 
| 47   Error& error = Error::Handle(); | 47   isolate->object_store()->set_sticky_error(Error::Cast(obj)); | 
| 48   error |= obj.raw(); |  | 
| 49   isolate->object_store()->set_sticky_error(error); |  | 
| 50 } | 48 } | 
| 51 | 49 | 
| 52 | 50 | 
| 53 // TODO(turnidge): Move to DartLibraryCalls. | 51 // TODO(turnidge): Move to DartLibraryCalls. | 
| 54 static RawObject* ReceivePortCreate(intptr_t port_id) { | 52 static RawObject* ReceivePortCreate(intptr_t port_id) { | 
| 55   Isolate* isolate = Isolate::Current(); | 53   Isolate* isolate = Isolate::Current(); | 
| 56   Function& func = | 54   Function& func = | 
| 57       Function::Handle(isolate, | 55       Function::Handle(isolate, | 
| 58                        isolate->object_store()->receive_port_create_function()); | 56                        isolate->object_store()->receive_port_create_function()); | 
| 59   const int kNumArguments = 1; | 57   const int kNumArguments = 1; | 
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 184                                Api::NewHandle(isolate, library.raw()), | 182                                Api::NewHandle(isolate, library.raw()), | 
| 185                                Api::NewHandle(isolate, uri.raw())); | 183                                Api::NewHandle(isolate, uri.raw())); | 
| 186   const Object& obj = Object::Handle(Api::UnwrapHandle(result)); | 184   const Object& obj = Object::Handle(Api::UnwrapHandle(result)); | 
| 187   if (obj.IsError()) { | 185   if (obj.IsError()) { | 
| 188     Error& error_obj = Error::Handle(); | 186     Error& error_obj = Error::Handle(); | 
| 189     error_obj ^= obj.raw(); | 187     error_obj ^= obj.raw(); | 
| 190     *error = zone->PrintToString("Unable to canonicalize uri '%s': %s", | 188     *error = zone->PrintToString("Unable to canonicalize uri '%s': %s", | 
| 191                                  uri.ToCString(), error_obj.ToErrorCString()); | 189                                  uri.ToCString(), error_obj.ToErrorCString()); | 
| 192     return false; | 190     return false; | 
| 193   } else if (obj.IsString()) { | 191   } else if (obj.IsString()) { | 
| 194     String& string_obj = String::Handle(); | 192     *canonical_uri = zone->MakeCopyOfString(String::Cast(obj).ToCString()); | 
| 195     string_obj |= obj.raw(); |  | 
| 196     *canonical_uri = zone->MakeCopyOfString(string_obj.ToCString()); |  | 
| 197     return true; | 193     return true; | 
| 198   } else { | 194   } else { | 
| 199     *error = zone->PrintToString("Unable to canonicalize uri '%s': " | 195     *error = zone->PrintToString("Unable to canonicalize uri '%s': " | 
| 200                                  "library tag handler returned wrong type", | 196                                  "library tag handler returned wrong type", | 
| 201                                  uri.ToCString()); | 197                                  uri.ToCString()); | 
| 202     return false; | 198     return false; | 
| 203   } | 199   } | 
| 204 } | 200 } | 
| 205 | 201 | 
| 206 | 202 | 
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 370     Object& result = Object::Handle(); | 366     Object& result = Object::Handle(); | 
| 371     result = state->ResolveFunction(); | 367     result = state->ResolveFunction(); | 
| 372     delete state; | 368     delete state; | 
| 373     state = NULL; | 369     state = NULL; | 
| 374     if (result.IsError()) { | 370     if (result.IsError()) { | 
| 375       StoreError(isolate, result); | 371       StoreError(isolate, result); | 
| 376       return false; | 372       return false; | 
| 377     } | 373     } | 
| 378     ASSERT(result.IsFunction()); | 374     ASSERT(result.IsFunction()); | 
| 379     Function& func = Function::Handle(isolate); | 375     Function& func = Function::Handle(isolate); | 
| 380     func |= result.raw(); | 376     func ^= result.raw(); | 
| 381     result = DartEntry::InvokeStatic(func, Object::empty_array()); | 377     result = DartEntry::InvokeStatic(func, Object::empty_array()); | 
| 382     if (result.IsError()) { | 378     if (result.IsError()) { | 
| 383       StoreError(isolate, result); | 379       StoreError(isolate, result); | 
| 384       return false; | 380       return false; | 
| 385     } | 381     } | 
| 386   } | 382   } | 
| 387   return true; | 383   return true; | 
| 388 } | 384 } | 
| 389 | 385 | 
| 390 | 386 | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 415 | 411 | 
| 416   return port.raw(); | 412   return port.raw(); | 
| 417 } | 413 } | 
| 418 | 414 | 
| 419 | 415 | 
| 420 DEFINE_NATIVE_ENTRY(isolate_spawnFunction, 2) { | 416 DEFINE_NATIVE_ENTRY(isolate_spawnFunction, 2) { | 
| 421   GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(0)); | 417   GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(0)); | 
| 422   bool throw_exception = false; | 418   bool throw_exception = false; | 
| 423   Function& func = Function::Handle(); | 419   Function& func = Function::Handle(); | 
| 424   if (closure.IsClosure()) { | 420   if (closure.IsClosure()) { | 
| 425     func |= Closure::function(closure); | 421     func = Closure::function(closure); | 
| 426     const Class& cls = Class::Handle(func.Owner()); | 422     const Class& cls = Class::Handle(func.Owner()); | 
| 427     if (!func.IsClosureFunction() || !func.is_static() || !cls.IsTopLevel()) { | 423     if (!func.IsClosureFunction() || !func.is_static() || !cls.IsTopLevel()) { | 
| 428       throw_exception = true; | 424       throw_exception = true; | 
| 429     } | 425     } | 
| 430   } else { | 426   } else { | 
| 431     throw_exception = true; | 427     throw_exception = true; | 
| 432   } | 428   } | 
| 433   if (throw_exception) { | 429   if (throw_exception) { | 
| 434     const String& msg = String::Handle(String::New( | 430     const String& msg = String::Handle(String::New( | 
| 435         "spawnFunction expects to be passed a closure to a top-level static " | 431         "spawnFunction expects to be passed a closure to a top-level static " | 
| 436         "function")); | 432         "function")); | 
| 437     ThrowIllegalArgException(msg); | 433     ThrowIllegalArgException(msg); | 
| 438   } | 434   } | 
| 439 | 435 | 
| 440   GET_NATIVE_ARGUMENT(Instance, callback, arguments->NativeArgAt(1)); | 436   GET_NATIVE_ARGUMENT(Instance, callback, arguments->NativeArgAt(1)); | 
| 441   Function& callback_func = Function::Handle(); | 437   Function& callback_func = Function::Handle(); | 
| 442   if (callback.IsClosure()) { | 438   if (callback.IsClosure()) { | 
| 443     callback_func |= Closure::function(callback); | 439     callback_func = Closure::function(callback); | 
| 444     const Class& cls = Class::Handle(callback_func.Owner()); | 440     const Class& cls = Class::Handle(callback_func.Owner()); | 
| 445     if (!callback_func.IsClosureFunction() || !callback_func.is_static() || | 441     if (!callback_func.IsClosureFunction() || !callback_func.is_static() || | 
| 446         !cls.IsTopLevel()) { | 442         !cls.IsTopLevel()) { | 
| 447       throw_exception = true; | 443       throw_exception = true; | 
| 448     } | 444     } | 
| 449   } else if (!callback.IsNull()) { | 445   } else if (!callback.IsNull()) { | 
| 450     throw_exception = true; | 446     throw_exception = true; | 
| 451   } | 447   } | 
| 452   if (throw_exception) { | 448   if (throw_exception) { | 
| 453     const String& msg = String::Handle(String::New( | 449     const String& msg = String::Handle(String::New( | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 491 | 487 | 
| 492 DEFINE_NATIVE_ENTRY(isolate_getPortInternal, 0) { | 488 DEFINE_NATIVE_ENTRY(isolate_getPortInternal, 0) { | 
| 493   const Object& port = Object::Handle(ReceivePortCreate(isolate->main_port())); | 489   const Object& port = Object::Handle(ReceivePortCreate(isolate->main_port())); | 
| 494   if (port.IsError()) { | 490   if (port.IsError()) { | 
| 495     Exceptions::PropagateError(Error::Cast(port)); | 491     Exceptions::PropagateError(Error::Cast(port)); | 
| 496   } | 492   } | 
| 497   return port.raw(); | 493   return port.raw(); | 
| 498 } | 494 } | 
| 499 | 495 | 
| 500 }  // namespace dart | 496 }  // namespace dart | 
| OLD | NEW | 
|---|