Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Static Public Member Functions | Friends | List of all members
dart::Api Class Reference

#include <dart_api_impl.h>

Inheritance diagram for dart::Api:
dart::AllStatic

Classes

class  Scope
 

Static Public Member Functions

static Dart_Handle NewHandle (Thread *thread, ObjectPtr raw)
 
static ObjectPtr UnwrapHandle (Dart_Handle object)
 
static const StringUnwrapStringHandle (const ReusableObjectHandleScope &reused, Dart_Handle object)
 
static const InstanceUnwrapInstanceHandle (const ReusableObjectHandleScope &reused, Dart_Handle object)
 
static Dart_Handle CheckAndFinalizePendingClasses (Thread *thread)
 
static Dart_Isolate CastIsolate (Isolate *isolate)
 
static Dart_IsolateGroup CastIsolateGroup (IsolateGroup *isolate_group)
 
static Dart_Handle Success ()
 
static bool IsSmi (Dart_Handle handle)
 
static intptr_t SmiValue (Dart_Handle handle)
 
static bool IsInstance (Dart_Handle handle)
 
static bool IsValid (Dart_Handle handle)
 
static bool IsError (Dart_Handle handle)
 
static intptr_t ClassId (Dart_Handle handle)
 
static Dart_Handle NewError (const char *format,...) PRINTF_ATTRIBUTE(1
 
static Dart_Handle static Dart_Handle NewArgumentError (const char *format,...) PRINTF_ATTRIBUTE(1
 
static Dart_Handle static Dart_Handle static Dart_Handle Null ()
 
static Dart_Handle True ()
 
static Dart_Handle False ()
 
static Dart_Handle EmptyString ()
 
static Dart_Handle NoCallbacksError ()
 
static Dart_Handle UnwindInProgressError ()
 
static bool IsProtectedHandle (Dart_Handle object)
 
static ApiLocalScopeTopScope (Thread *thread)
 
static void Init ()
 
static void InitHandles ()
 
static void Cleanup ()
 
static bool StringGetPeerHelper (NativeArguments *args, int arg_index, void **peer)
 
static bool GetNativeReceiver (NativeArguments *args, intptr_t *value)
 
static bool GetNativeBooleanArgument (NativeArguments *args, int arg_index, bool *value)
 
static bool GetNativeIntegerArgument (NativeArguments *args, int arg_index, int64_t *value)
 
static bool GetNativeDoubleArgument (NativeArguments *args, int arg_index, double *value)
 
static bool GetNativeFieldsOfArgument (NativeArguments *args, int arg_index, int num_fields, intptr_t *field_values)
 
static void SetReturnValue (NativeArguments *args, Dart_Handle retval)
 
static void SetSmiReturnValue (NativeArguments *args, intptr_t retval)
 
static void SetIntegerReturnValue (NativeArguments *args, int64_t retval)
 
static void SetDoubleReturnValue (NativeArguments *args, double retval)
 
static void SetWeakHandleReturnValue (NativeArguments *args, Dart_WeakPersistentHandle retval)
 
static StringPtr GetEnvironmentValue (Thread *thread, const String &name)
 
static bool IsFfiEnabled ()
 

Friends

class ApiNativeScope
 

Detailed Description

Definition at line 133 of file dart_api_impl.h.

Member Function Documentation

◆ CastIsolate()

Dart_Isolate dart::Api::CastIsolate ( Isolate isolate)
static

Definition at line 433 of file dart_api_impl.cc.

433 {
434 return reinterpret_cast<Dart_Isolate>(isolate);
435}
struct _Dart_Isolate * Dart_Isolate
Definition dart_api.h:88

◆ CastIsolateGroup()

Dart_IsolateGroup dart::Api::CastIsolateGroup ( IsolateGroup isolate_group)
static

Definition at line 437 of file dart_api_impl.cc.

437 {
438 return reinterpret_cast<Dart_IsolateGroup>(isolate_group);
439}
struct _Dart_IsolateGroup * Dart_IsolateGroup
Definition dart_api.h:89

◆ CheckAndFinalizePendingClasses()

Dart_Handle dart::Api::CheckAndFinalizePendingClasses ( Thread thread)
static

Definition at line 420 of file dart_api_impl.cc.

420 {
421 Isolate* isolate = thread->isolate();
422 if (!isolate->AllowClassFinalization()) {
423 // Class finalization is blocked for the isolate. Do nothing.
424 return Api::Success();
425 }
427 return Api::Success();
428 }
429 ASSERT(thread->sticky_error() != Object::null());
430 return Api::NewHandle(thread, thread->sticky_error());
431}
static Dart_Handle Success()
static Dart_Handle NewHandle(Thread *thread, ObjectPtr raw)
static bool ProcessPendingClasses()
static ObjectPtr null()
Definition object.h:433
#define ASSERT(E)

◆ ClassId()

static intptr_t dart::Api::ClassId ( Dart_Handle  handle)
inlinestatic

Definition at line 212 of file dart_api_impl.h.

212 {
213 ObjectPtr raw = UnwrapHandle(handle);
214 if (!raw->IsHeapObject()) {
215 return kSmiCid;
216 }
217 return raw->GetClassId();
218 }
static ObjectPtr UnwrapHandle(Dart_Handle object)

◆ Cleanup()

void dart::Api::Cleanup ( )
static

Definition at line 552 of file dart_api_impl.cc.

552 {
553 true_handle_ = nullptr;
554 false_handle_ = nullptr;
555 null_handle_ = nullptr;
556 empty_string_handle_ = nullptr;
557 no_callbacks_error_handle_ = nullptr;
558 unwind_in_progress_error_handle_ = nullptr;
559}

◆ EmptyString()

static Dart_Handle dart::Api::EmptyString ( )
inlinestatic

Definition at line 235 of file dart_api_impl.h.

235{ return empty_string_handle_; }

◆ False()

static Dart_Handle dart::Api::False ( )
inlinestatic

Definition at line 232 of file dart_api_impl.h.

232{ return false_handle_; }

◆ GetEnvironmentValue()

StringPtr dart::Api::GetEnvironmentValue ( Thread thread,
const String name 
)
static

Definition at line 5258 of file dart_api_impl.cc.

5258 {
5259 String& result = String::Handle(CallEnvironmentCallback(thread, name));
5260 if (result.IsNull()) {
5261 // Every 'dart:X' library introduces an environment variable
5262 // 'dart.library.X' that is set to 'true'.
5263 // We just need to make sure to hide private libraries (starting with
5264 // "_", and the mirrors library, if it is not supported.
5265
5266 if (!FLAG_enable_mirrors && name.Equals(Symbols::DartLibraryMirrors())) {
5267 return Symbols::False().ptr();
5268 }
5269
5270 if (!Api::IsFfiEnabled() && name.Equals(Symbols::DartLibraryFfi())) {
5271 return Symbols::False().ptr();
5272 }
5273
5274 if (name.Equals(Symbols::DartVMProduct())) {
5275#ifdef PRODUCT
5276 return Symbols::True().ptr();
5277#else
5278 return Symbols::False().ptr();
5279#endif
5280 }
5281
5282 if (name.Equals(Symbols::DartDeveloperTimeline())) {
5283#ifdef SUPPORT_TIMELINE
5284 return Symbols::True().ptr();
5285#else
5286 return Symbols::False().ptr();
5287#endif
5288 }
5289
5290 const String& prefix = Symbols::DartLibrary();
5291 if (name.StartsWith(prefix)) {
5292 const String& library_name =
5294
5295 // Private libraries (starting with "_") are not exposed to the user.
5296 if (!library_name.IsNull() && library_name.CharAt(0) != '_') {
5297 const String& dart_library_name =
5298 String::Handle(String::Concat(Symbols::DartScheme(), library_name));
5299 const Library& library =
5300 Library::Handle(Library::LookupLibrary(thread, dart_library_name));
5301 if (!library.IsNull()) {
5302 return Symbols::True().ptr();
5303 }
5304 }
5305 }
5306 // Check for default VM provided values. If it was not overridden on the
5307 // command line.
5308 if (Symbols::DartIsVM().Equals(name)) {
5309 return Symbols::True().ptr();
5310 }
5311 }
5312 return result.ptr();
5313}
static bool IsFfiEnabled()
static LibraryPtr LookupLibrary(Thread *thread, const String &url)
Definition object.cc:14646
ObjectPtr ptr() const
Definition object.h:332
static Object & Handle()
Definition object.h:407
static StringPtr SubString(const String &str, intptr_t begin_index, Heap::Space space=Heap::kNew)
Definition object.cc:24159
static StringPtr Concat(const String &str1, const String &str2, Heap::Space space=Heap::kNew)
Definition object.cc:24116
static const String & True()
Definition symbols.h:692
static const String & False()
Definition symbols.h:688
GAsyncResult * result
static bool Equals(const Object &expected, const Object &actual)
const char *const name

◆ GetNativeBooleanArgument()

bool dart::Api::GetNativeBooleanArgument ( NativeArguments args,
int  arg_index,
bool *  value 
)
static

Definition at line 600 of file dart_api_impl.cc.

602 {
603 NoSafepointScope no_safepoint_scope;
604 ObjectPtr raw_obj = arguments->NativeArgAt(arg_index);
605 if (raw_obj->IsHeapObject()) {
606 intptr_t cid = raw_obj->GetClassId();
607 if (cid == kBoolCid) {
608 *value = (raw_obj == Object::bool_true().ptr());
609 return true;
610 }
611 if (cid == kNullCid) {
612 *value = false;
613 return true;
614 }
615 }
616 return false;
617}
uint8_t value
@ kNullCid
Definition class_id.h:252
const intptr_t cid

◆ GetNativeDoubleArgument()

bool dart::Api::GetNativeDoubleArgument ( NativeArguments args,
int  arg_index,
double *  value 
)
static

Definition at line 636 of file dart_api_impl.cc.

638 {
639 NoSafepointScope no_safepoint_scope;
640 ObjectPtr raw_obj = arguments->NativeArgAt(arg_index);
641 if (raw_obj->IsHeapObject()) {
642 intptr_t cid = raw_obj->GetClassId();
643 if (cid == kDoubleCid) {
644 *value = static_cast<DoublePtr>(raw_obj)->untag()->value_;
645 return true;
646 }
647 if (cid == kMintCid) {
648 *value =
649 static_cast<double>(static_cast<MintPtr>(raw_obj)->untag()->value_);
650 return true;
651 }
652 return false;
653 }
654 *value = static_cast<double>(Smi::Value(static_cast<SmiPtr>(raw_obj)));
655 return true;
656}
intptr_t Value() const
Definition object.h:9969
raw_obj untag() -> num_entries()) VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(TypedData, TypedData::ElementSizeInBytes(raw_obj->GetClassId()) *Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(Record, RecordShape(raw_obj->untag() ->shape()).num_fields()) VARIABLE_NULL_VISITOR(CompressedStackMaps, CompressedStackMaps::PayloadSizeOf(raw_obj)) VARIABLE_NULL_VISITOR(OneByteString, Smi::Value(raw_obj->untag() ->length())) VARIABLE_NULL_VISITOR(TwoByteString, Smi::Value(raw_obj->untag() ->length())) intptr_t UntaggedField::VisitFieldPointers(FieldPtr raw_obj, ObjectPointerVisitor *visitor)

◆ GetNativeFieldsOfArgument()

bool dart::Api::GetNativeFieldsOfArgument ( NativeArguments args,
int  arg_index,
int  num_fields,
intptr_t *  field_values 
)
static

Definition at line 658 of file dart_api_impl.cc.

661 {
662 NoSafepointScope no_safepoint_scope;
663 ObjectPtr raw_obj = arguments->NativeArgAt(arg_index);
664 intptr_t cid = raw_obj->GetClassIdMayBeSmi();
665 int class_num_fields = arguments->thread()
666 ->isolate_group()
667 ->class_table()
668 ->At(cid)
669 ->untag()
670 ->num_native_fields_;
671 if (num_fields != class_num_fields) {
672 // No native fields or mismatched native field count.
673 return false;
674 }
675 TypedDataPtr native_fields =
676 reinterpret_cast<CompressedTypedDataPtr*>(
677 UntaggedObject::ToAddr(raw_obj) + sizeof(UntaggedObject))
678 ->Decompress(raw_obj->heap_base());
679 if (native_fields == TypedData::null()) {
680 // Native fields not initialized.
681 memset(field_values, 0, (num_fields * sizeof(field_values[0])));
682 return true;
683 }
684 ASSERT(class_num_fields == Smi::Value(native_fields->untag()->length()));
685 intptr_t* native_values =
686 reinterpret_cast<intptr_t*>(native_fields->untag()->data());
687 memmove(field_values, native_values, (num_fields * sizeof(field_values[0])));
688 return true;
689}
static uword ToAddr(const UntaggedObject *raw_obj)
Definition raw_object.h:501

◆ GetNativeIntegerArgument()

bool dart::Api::GetNativeIntegerArgument ( NativeArguments args,
int  arg_index,
int64_t *  value 
)
static

Definition at line 619 of file dart_api_impl.cc.

621 {
622 NoSafepointScope no_safepoint_scope;
623 ObjectPtr raw_obj = arguments->NativeArgAt(arg_index);
624 if (raw_obj->IsHeapObject()) {
625 intptr_t cid = raw_obj->GetClassId();
626 if (cid == kMintCid) {
627 *value = static_cast<MintPtr>(raw_obj)->untag()->value_;
628 return true;
629 }
630 return false;
631 }
632 *value = Smi::Value(static_cast<SmiPtr>(raw_obj));
633 return true;
634}

◆ GetNativeReceiver()

bool dart::Api::GetNativeReceiver ( NativeArguments args,
intptr_t *  value 
)
static

Definition at line 578 of file dart_api_impl.cc.

578 {
579 NoSafepointScope no_safepoint_scope;
580 ObjectPtr raw_obj = arguments->NativeArg0();
581 if (raw_obj->IsHeapObject()) {
582 intptr_t cid = raw_obj->GetClassId();
583 if (cid >= kNumPredefinedCids) {
584 ASSERT(Instance::Cast(Object::Handle(raw_obj)).IsValidNativeIndex(0));
585 TypedDataPtr native_fields =
586 reinterpret_cast<CompressedTypedDataPtr*>(
587 UntaggedObject::ToAddr(raw_obj) + sizeof(UntaggedObject))
588 ->Decompress(raw_obj->heap_base());
589 if (native_fields == TypedData::null()) {
590 *value = 0;
591 } else {
592 *value = *bit_cast<intptr_t*, uint8_t*>(native_fields->untag()->data());
593 }
594 return true;
595 }
596 }
597 return false;
598}
@ kNumPredefinedCids
Definition class_id.h:257

◆ Init()

void dart::Api::Init ( )
static

Definition at line 510 of file dart_api_impl.cc.

510 {
511 if (api_native_key_ == kUnsetThreadLocalKey) {
512 api_native_key_ = OSThread::CreateThreadLocal();
513 }
514 ASSERT(api_native_key_ != kUnsetThreadLocalKey);
515}
static ThreadLocalKey CreateThreadLocal(ThreadDestructor destructor=nullptr)
static const ThreadLocalKey kUnsetThreadLocalKey

◆ InitHandles()

void dart::Api::InitHandles ( )
static

Definition at line 524 of file dart_api_impl.cc.

524 {
525 Isolate* isolate = Isolate::Current();
526 ASSERT(isolate != nullptr);
527 ASSERT(isolate == Dart::vm_isolate());
528 ApiState* state = isolate->group()->api_state();
529 ASSERT(state != nullptr);
530
531 ASSERT(true_handle_ == nullptr);
532 true_handle_ = InitNewReadOnlyApiHandle(Bool::True().ptr());
533
534 ASSERT(false_handle_ == nullptr);
535 false_handle_ = InitNewReadOnlyApiHandle(Bool::False().ptr());
536
537 ASSERT(null_handle_ == nullptr);
538 null_handle_ = InitNewReadOnlyApiHandle(Object::null());
539
540 ASSERT(empty_string_handle_ == nullptr);
541 empty_string_handle_ = InitNewReadOnlyApiHandle(Symbols::Empty().ptr());
542
543 ASSERT(no_callbacks_error_handle_ == nullptr);
544 no_callbacks_error_handle_ =
545 InitNewReadOnlyApiHandle(Object::no_callbacks_error().ptr());
546
547 ASSERT(unwind_in_progress_error_handle_ == nullptr);
548 unwind_in_progress_error_handle_ =
549 InitNewReadOnlyApiHandle(Object::unwind_in_progress_error().ptr());
550}
static const Bool & False()
Definition object.h:10778
static const Bool & True()
Definition object.h:10776
static Isolate * vm_isolate()
Definition dart.h:68
static Isolate * Current()
Definition isolate.h:939
static const String & Empty()
Definition symbols.h:687
AtkStateType state
static Dart_Handle InitNewReadOnlyApiHandle(ObjectPtr raw)

◆ IsError()

static bool dart::Api::IsError ( Dart_Handle  handle)
inlinestatic

Definition at line 208 of file dart_api_impl.h.

208 {
209 return IsErrorClassId(ClassId(handle));
210 }
bool IsErrorClassId(intptr_t index)
Definition class_id.h:321
ClassId
Definition class_id.h:212

◆ IsFfiEnabled()

static bool dart::Api::IsFfiEnabled ( )
inlinestatic

Definition at line 312 of file dart_api_impl.h.

312{ return FLAG_enable_ffi; }

◆ IsInstance()

static bool dart::Api::IsInstance ( Dart_Handle  handle)
inlinestatic

Definition at line 200 of file dart_api_impl.h.

200 {
201 return !IsInternalOnlyClassId(ClassId(handle));
202 }
bool IsInternalOnlyClassId(intptr_t index)
Definition class_id.h:299

◆ IsProtectedHandle()

static bool dart::Api::IsProtectedHandle ( Dart_Handle  object)
inlinestatic

Definition at line 245 of file dart_api_impl.h.

245 {
246 if (object == nullptr) return false;
247 return (object == true_handle_) || (object == false_handle_) ||
248 (object == null_handle_) || (object == empty_string_handle_) ||
249 (object == no_callbacks_error_handle_) ||
250 (object == unwind_in_progress_error_handle_);
251 }

◆ IsSmi()

static bool dart::Api::IsSmi ( Dart_Handle  handle)
inlinestatic

Definition at line 184 of file dart_api_impl.h.

184 {
185 // Important: we do not require current thread to be in VM state because
186 // we do not dereference the handle.
187 ObjectPtr raw = *(reinterpret_cast<ObjectPtr*>(handle));
188 return !raw->IsHeapObject();
189 }

◆ IsValid()

bool dart::Api::IsValid ( Dart_Handle  handle)
static

Definition at line 486 of file dart_api_impl.cc.

486 {
487 Isolate* isolate = Isolate::Current();
488 Thread* thread = Thread::Current();
489 ASSERT(thread->IsDartMutatorThread());
490 CHECK_ISOLATE(isolate);
491
492 // Check against all of the handles in the current isolate as well as the
493 // read-only handles.
494 return thread->IsValidHandle(handle) ||
495 isolate->group()->api_state()->IsActivePersistentHandle(
496 reinterpret_cast<Dart_PersistentHandle>(handle)) ||
497 isolate->group()->api_state()->IsActiveWeakPersistentHandle(
498 reinterpret_cast<Dart_WeakPersistentHandle>(handle)) ||
500 Dart::IsReadOnlyHandle(reinterpret_cast<uword>(handle));
501}
static bool IsReadOnlyHandle(uword address)
Definition dart.cc:1139
static bool IsReadOnlyApiHandle(Dart_Handle handle)
Definition dart.cc:1144
static Thread * Current()
Definition thread.h:361
Dart_Handle Dart_PersistentHandle
Definition dart_api.h:259
struct _Dart_WeakPersistentHandle * Dart_WeakPersistentHandle
Definition dart_api.h:260
#define CHECK_ISOLATE(isolate)
uintptr_t uword
Definition globals.h:501

◆ NewArgumentError()

Dart_Handle dart::Api::NewArgumentError ( const char *  format,
  ... 
)
static

Definition at line 459 of file dart_api_impl.cc.

459 {
460 Thread* T = Thread::Current();
463 // Ensure we transition safepoint state to VM if we are not already in
464 // that state.
465 TransitionToVM transition(T);
466 HANDLESCOPE(T);
467
468 va_list args;
470 char* buffer = OS::VSCreate(Z, format, args);
471 va_end(args);
472
473 const String& message = String::Handle(Z, String::New(buffer));
474 const Array& arguments = Array::Handle(Z, Array::New(1));
475 arguments.SetAt(0, message);
476 Object& error = Object::Handle(
479 Symbols::ArgumentError(), Symbols::Dot(), arguments));
480 if (!error.IsError()) {
482 }
483 return Api::NewHandle(T, error.ptr());
484}
#define Z
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition object.h:10933
static ObjectPtr InstanceCreate(const Library &library, const String &exception_name, const String &constructor_name, const Array &arguments)
static LibraryPtr CoreLibrary()
Definition object.cc:14834
static char static char * VSCreate(Zone *zone, const char *format, va_list args)
static StringPtr New(const char *cstr, Heap::Space space=Heap::kNew)
Definition object.cc:23777
static const String & Dot()
Definition symbols.h:612
static UnhandledExceptionPtr New(const Instance &exception, const Instance &stacktrace, Heap::Space space=Heap::kNew)
Definition object.cc:19989
#define CHECK_API_SCOPE(thread)
#define CHECK_CALLBACK_STATE(thread)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
static const uint8_t buffer[]
const uint8_t uint32_t uint32_t GError ** error
uint32_t uint32_t * format
#define HANDLESCOPE(thread)
Definition handles.h:321
Win32Message message
va_start(args, format)
va_end(args)
#define T

◆ NewError()

Dart_Handle dart::Api::NewError ( const char *  format,
  ... 
)
static

Definition at line 441 of file dart_api_impl.cc.

441 {
442 Thread* T = Thread::Current();
445 // Ensure we transition safepoint state to VM if we are not already in
446 // that state.
447 TransitionToVM transition(T);
448 HANDLESCOPE(T);
449
450 va_list args;
452 char* buffer = OS::VSCreate(Z, format, args);
453 va_end(args);
454
455 const String& message = String::Handle(Z, String::New(buffer));
456 return Api::NewHandle(T, ApiError::New(message));
457}

◆ NewHandle()

Dart_Handle dart::Api::NewHandle ( Thread thread,
ObjectPtr  raw 
)
static

Definition at line 362 of file dart_api_impl.cc.

362 {
363 if (raw == Object::null()) {
364 return Null();
365 }
366 if (raw == Bool::True().ptr()) {
367 return True();
368 }
369 if (raw == Bool::False().ptr()) {
370 return False();
371 }
372 ASSERT(thread->execution_state() == Thread::kThreadInVM);
373 return InitNewHandle(thread, raw);
374}
static Dart_Handle False()
static Dart_Handle static Dart_Handle static Dart_Handle Null()
static Dart_Handle True()

◆ NoCallbacksError()

static Dart_Handle dart::Api::NoCallbacksError ( )
inlinestatic

Definition at line 238 of file dart_api_impl.h.

238{ return no_callbacks_error_handle_; }

◆ Null()

static Dart_Handle static Dart_Handle static Dart_Handle dart::Api::Null ( )
inlinestatic

Definition at line 226 of file dart_api_impl.h.

226{ return null_handle_; }

◆ SetDoubleReturnValue()

static void dart::Api::SetDoubleReturnValue ( NativeArguments args,
double  retval 
)
inlinestatic

Definition at line 304 of file dart_api_impl.h.

304 {
305 args->SetReturnUnsafe(Double::New(retval));
306 }
static DoublePtr New(double d, Heap::Space space=Heap::kNew)
Definition object.cc:23481

◆ SetIntegerReturnValue()

static void dart::Api::SetIntegerReturnValue ( NativeArguments args,
int64_t  retval 
)
inlinestatic

Definition at line 301 of file dart_api_impl.h.

301 {
302 args->SetReturnUnsafe(Integer::New(retval));
303 }
static IntegerPtr New(const String &str, Heap::Space space=Heap::kNew)
Definition object.cc:23063

◆ SetReturnValue()

static void dart::Api::SetReturnValue ( NativeArguments args,
Dart_Handle  retval 
)
inlinestatic

Definition at line 295 of file dart_api_impl.h.

295 {
296 args->SetReturnUnsafe(UnwrapHandle(retval));
297 }

◆ SetSmiReturnValue()

static void dart::Api::SetSmiReturnValue ( NativeArguments args,
intptr_t  retval 
)
inlinestatic

Definition at line 298 of file dart_api_impl.h.

298 {
299 args->SetReturnUnsafe(Smi::New(retval));
300 }
static SmiPtr New(intptr_t value)
Definition object.h:9985

◆ SetWeakHandleReturnValue()

void dart::Api::SetWeakHandleReturnValue ( NativeArguments args,
Dart_WeakPersistentHandle  retval 
)
static

Definition at line 691 of file dart_api_impl.cc.

692 {
693 args->SetReturnUnsafe(FinalizablePersistentHandle::Cast(retval)->ptr());
694}
static FinalizablePersistentHandle * Cast(Dart_WeakPersistentHandle handle)

◆ SmiValue()

static intptr_t dart::Api::SmiValue ( Dart_Handle  handle)
inlinestatic

Definition at line 192 of file dart_api_impl.h.

192 {
193 // Important: we do not require current thread to be in VM state because
194 // we do not dereference the handle.
195 ObjectPtr value = *(reinterpret_cast<ObjectPtr*>(handle));
196 return Smi::Value(static_cast<SmiPtr>(value));
197 }

◆ StringGetPeerHelper()

bool dart::Api::StringGetPeerHelper ( NativeArguments args,
int  arg_index,
void **  peer 
)
static

Definition at line 561 of file dart_api_impl.cc.

563 {
564 NoSafepointScope no_safepoint_scope;
565 ObjectPtr raw_obj = arguments->NativeArgAt(arg_index);
566 if (!raw_obj->IsHeapObject()) {
567 return false;
568 }
569 intptr_t cid = raw_obj->GetClassId();
570 if (cid == kOneByteStringCid || cid == kTwoByteStringCid) {
571 auto isolate_group = arguments->thread()->isolate_group();
572 *peer = isolate_group->heap()->GetPeer(raw_obj);
573 return (*peer != nullptr);
574 }
575 return false;
576}

◆ Success()

static Dart_Handle dart::Api::Success ( )
inlinestatic

Definition at line 181 of file dart_api_impl.h.

181{ return Api::True(); }

◆ TopScope()

ApiLocalScope * dart::Api::TopScope ( Thread thread)
static

Definition at line 503 of file dart_api_impl.cc.

503 {
504 ASSERT(thread != nullptr);
505 ApiLocalScope* scope = thread->api_top_scope();
506 ASSERT(scope != nullptr);
507 return scope;
508}

◆ True()

static Dart_Handle dart::Api::True ( )
inlinestatic

Definition at line 229 of file dart_api_impl.h.

229{ return true_handle_; }

◆ UnwindInProgressError()

static Dart_Handle dart::Api::UnwindInProgressError ( )
inlinestatic

Definition at line 241 of file dart_api_impl.h.

241 {
242 return unwind_in_progress_error_handle_;
243 }

◆ UnwrapHandle()

ObjectPtr dart::Api::UnwrapHandle ( Dart_Handle  object)
static

Definition at line 376 of file dart_api_impl.cc.

376 {
377#if defined(DEBUG)
378 Thread* thread = Thread::Current();
379 ASSERT(thread->execution_state() == Thread::kThreadInVM);
380 ASSERT(thread->IsDartMutatorThread());
381 ASSERT(thread->isolate() != nullptr);
384#endif
385 return (reinterpret_cast<LocalHandle*>(object))->ptr();
386}
static intptr_t ptr_offset()
static intptr_t ptr_offset()

◆ UnwrapInstanceHandle()

const Instance & dart::Api::UnwrapInstanceHandle ( const ReusableObjectHandleScope &  reused,
Dart_Handle  object 
)
static

Definition at line 409 of file dart_api_impl.cc.

411 {
412 Object& ref = reuse.Handle();
413 ref = Api::UnwrapHandle(dart_handle);
414 if (ref.IsInstance()) {
415 return Instance::Cast(ref);
416 }
417 return Object::null_instance();
418}

◆ UnwrapStringHandle()

const String & dart::Api::UnwrapStringHandle ( const ReusableObjectHandleScope &  reused,
Dart_Handle  object 
)
static

Definition at line 399 of file dart_api_impl.cc.

400 {
401 Object& ref = reuse.Handle();
402 ref = Api::UnwrapHandle(dart_handle);
403 if (ref.IsString()) {
404 return String::Cast(ref);
405 }
406 return Object::null_string();
407}

Friends And Related Symbol Documentation

◆ ApiNativeScope

friend class ApiNativeScope
friend

Definition at line 329 of file dart_api_impl.h.


The documentation for this class was generated from the following files: