Flutter Engine
The Flutter Engine
Classes | Public Member Functions | Static Public Member Functions | Static Public Attributes | Friends | List of all members
dart::ExceptionHandlers Class Reference

#include <object.h>

Inheritance diagram for dart::ExceptionHandlers:
dart::Object

Classes

struct  ArrayTraits
 

Public Member Functions

intptr_t num_entries () const
 
bool has_async_handler () const
 
void set_has_async_handler (bool value) const
 
void GetHandlerInfo (intptr_t try_index, ExceptionHandlerInfo *info) const
 
uword HandlerPCOffset (intptr_t try_index) const
 
intptr_t OuterTryIndex (intptr_t try_index) const
 
bool NeedsStackTrace (intptr_t try_index) const
 
bool IsGenerated (intptr_t try_index) const
 
void SetHandlerInfo (intptr_t try_index, intptr_t outer_try_index, uword handler_pc_offset, bool needs_stacktrace, bool has_catch_all, bool is_generated) const
 
ArrayPtr GetHandledTypes (intptr_t try_index) const
 
void SetHandledTypes (intptr_t try_index, const Array &handled_types) const
 
bool HasCatchAll (intptr_t try_index) const
 
void WriteToBuffer (BaseTextBuffer *buffer, uword base) const
 
- Public Member Functions inherited from dart::Object
virtual ~Object ()
 
ObjectPtr ptr () const
 
void operator= (ObjectPtr value)
 
bool IsCanonical () const
 
void SetCanonical () const
 
void ClearCanonical () const
 
bool IsImmutable () const
 
void SetImmutable () const
 
void ClearImmutable () const
 
intptr_t GetClassId () const
 
ClassPtr clazz () const
 
 CLASS_LIST_FOR_HANDLES (DEFINE_CLASS_TESTER)
 
bool IsNull () const
 
virtual const char * ToCString () const
 
void PrintJSON (JSONStream *stream, bool ref=true) const
 
virtual void PrintJSONImpl (JSONStream *stream, bool ref) const
 
void PrintImplementationFields (JSONStream *stream) const
 
virtual void PrintImplementationFieldsImpl (const JSONArray &jsarr_fields) const
 
virtual const char * JSONType () const
 
virtual StringPtr DictionaryName () const
 
bool IsNew () const
 
bool IsOld () const
 
bool InVMIsolateHeap () const
 
void Print () const
 

Static Public Member Functions

static intptr_t InstanceSize ()
 
static intptr_t InstanceSize (intptr_t len)
 
static ExceptionHandlersPtr New (intptr_t num_handlers)
 
static ExceptionHandlersPtr New (const Array &handled_types_data)
 
- Static Public Member Functions inherited from dart::Object
static ObjectPtr RawCast (ObjectPtr obj)
 
static constexpr bool ContainsCompressedPointers ()
 
static intptr_t tags_offset ()
 
static ObjectHandle ()
 
static ObjectHandle (Zone *zone)
 
static ObjectHandle (ObjectPtr ptr)
 
static ObjectHandle (Zone *zone, ObjectPtr ptr)
 
static ObjectZoneHandle ()
 
static ObjectZoneHandle (Zone *zone)
 
static ObjectZoneHandle (ObjectPtr ptr)
 
static ObjectZoneHandle (Zone *zone, ObjectPtr ptr)
 
static ObjectReadOnlyHandle ()
 
static ObjectPtr null ()
 
static void set_vm_isolate_snapshot_object_table (const Array &table)
 
static ClassPtr class_class ()
 
static ClassPtr dynamic_class ()
 
static ClassPtr void_class ()
 
static ClassPtr type_parameters_class ()
 
static ClassPtr type_arguments_class ()
 
static ClassPtr patch_class_class ()
 
static ClassPtr function_class ()
 
static ClassPtr closure_data_class ()
 
static ClassPtr ffi_trampoline_data_class ()
 
static ClassPtr field_class ()
 
static ClassPtr script_class ()
 
static ClassPtr library_class ()
 
static ClassPtr namespace_class ()
 
static ClassPtr kernel_program_info_class ()
 
static ClassPtr code_class ()
 
static ClassPtr instructions_class ()
 
static ClassPtr instructions_section_class ()
 
static ClassPtr instructions_table_class ()
 
static ClassPtr object_pool_class ()
 
static ClassPtr pc_descriptors_class ()
 
static ClassPtr code_source_map_class ()
 
static ClassPtr compressed_stackmaps_class ()
 
static ClassPtr var_descriptors_class ()
 
static ClassPtr exception_handlers_class ()
 
static ClassPtr context_class ()
 
static ClassPtr context_scope_class ()
 
static ClassPtr sentinel_class ()
 
static ClassPtr api_error_class ()
 
static ClassPtr language_error_class ()
 
static ClassPtr unhandled_exception_class ()
 
static ClassPtr unwind_error_class ()
 
static ClassPtr singletargetcache_class ()
 
static ClassPtr unlinkedcall_class ()
 
static ClassPtr monomorphicsmiablecall_class ()
 
static ClassPtr icdata_class ()
 
static ClassPtr megamorphic_cache_class ()
 
static ClassPtr subtypetestcache_class ()
 
static ClassPtr loadingunit_class ()
 
static ClassPtr weak_serialization_reference_class ()
 
static ClassPtr weak_array_class ()
 
static void InitNullAndBool (IsolateGroup *isolate_group)
 
static void Init (IsolateGroup *isolate_group)
 
static void InitVtables ()
 
static void FinishInit (IsolateGroup *isolate_group)
 
static void FinalizeVMIsolate (IsolateGroup *isolate_group)
 
static void FinalizeReadOnlyObject (ObjectPtr object)
 
static void Cleanup ()
 
static ErrorPtr Init (IsolateGroup *isolate_group, const uint8_t *kernel_buffer, intptr_t kernel_buffer_size)
 
static void MakeUnusedSpaceTraversable (const Object &obj, intptr_t original_size, intptr_t used_size)
 
static intptr_t InstanceSize ()
 
template<class FakeObject >
static void VerifyBuiltinVtable (intptr_t cid)
 
static void VerifyBuiltinVtables ()
 
static bool ShouldHaveImmutabilityBitSet (classid_t class_id)
 

Static Public Attributes

static constexpr intptr_t kInvalidPcOffset = 0
 
- Static Public Attributes inherited from dart::Object
static constexpr intptr_t kHashBits = 30
 
static const ClassId kClassId = kObjectCid
 

Friends

class Class
 
class Object
 

Additional Inherited Members

- Public Types inherited from dart::Object
enum  NameVisibility { kInternalName = 0 , kScrubbedName , kUserVisibleName }
 
enum class  NameDisambiguation { kYes , kNo }
 
using UntaggedObjectType = UntaggedObject
 
using ObjectPtrType = ObjectPtr
 
- Protected Member Functions inherited from dart::Object
 Object ()
 
uword raw_value () const
 
void setPtr (ObjectPtr value, intptr_t default_cid)
 
void CheckHandle () const
 
cpp_vtable vtable () const
 
void set_vtable (cpp_vtable value)
 
bool Contains (uword addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
type LoadPointer (type const *addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
void StorePointer (type const *addr, type value) const
 
template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
void StoreCompressedPointer (compressed_type const *addr, type value) const
 
template<typename type >
void StorePointerUnaligned (type const *addr, type value, Thread *thread) const
 
void StoreSmi (SmiPtr const *addr, SmiPtr value) const
 
template<typename FieldType >
void StoreSimd128 (const FieldType *addr, simd128_value_t value) const
 
template<typename FieldType >
FieldType LoadNonPointer (const FieldType *addr) const
 
template<typename FieldType , std::memory_order order>
FieldType LoadNonPointer (const FieldType *addr) const
 
template<typename FieldType , typename ValueType >
void StoreNonPointer (const FieldType *addr, ValueType value) const
 
template<typename FieldType , typename ValueType , std::memory_order order>
void StoreNonPointer (const FieldType *addr, ValueType value) const
 
template<typename FieldType >
FieldType * UnsafeMutableNonPointer (const FieldType *addr) const
 
 CLASS_LIST (STORE_NON_POINTER_ILLEGAL_TYPE)
 
void UnimplementedMethod () const
 
void AddCommonObjectProperties (JSONObject *jsobj, const char *protocol_type, bool ref) const
 
- Static Protected Member Functions inherited from dart::Object
static DART_NOINLINE ObjectHandleImpl (Zone *zone, ObjectPtr ptr, intptr_t default_cid)
 
static DART_NOINLINE ObjectZoneHandleImpl (Zone *zone, ObjectPtr ptr, intptr_t default_cid)
 
static DART_NOINLINE ObjectReadOnlyHandleImpl (intptr_t cid)
 
static ObjectPtr Allocate (intptr_t cls_id, intptr_t size, Heap::Space space, bool compressed, uword ptr_field_start_offset, uword ptr_field_end_offset)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType Allocate (Heap::Space space)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType Allocate (Heap::Space space, intptr_t elements)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType AllocateVariant (intptr_t class_id, Heap::Space space)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType AllocateVariant (intptr_t class_id, Heap::Space space, intptr_t elements)
 
static constexpr intptr_t RoundedAllocationSize (intptr_t size)
 
static ObjectPtr Clone (const Object &orig, Heap::Space space, bool load_with_relaxed_atomics=false)
 
template<typename T >
static DART_FORCE_INLINE uword from_offset ()
 
template<typename T >
static DART_FORCE_INLINE uword to_offset (intptr_t length=0)
 
- Protected Attributes inherited from dart::Object
ObjectPtr ptr_
 

Detailed Description

Definition at line 6572 of file object.h.

Member Function Documentation

◆ GetHandledTypes()

ArrayPtr dart::ExceptionHandlers::GetHandledTypes ( intptr_t  try_index) const

Definition at line 16230 of file object.cc.

16230 {
16231 ASSERT((try_index >= 0) && (try_index < num_entries()));
16232 Array& array = Array::Handle(untag()->handled_types_data());
16233 array ^= array.At(try_index);
16234 return array.ptr();
16235}
intptr_t num_entries() const
Definition: object.cc:16153
static Object & Handle()
Definition: object.h:407
#define ASSERT(E)
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)
Definition: raw_object.cc:558

◆ GetHandlerInfo()

void dart::ExceptionHandlers::GetHandlerInfo ( intptr_t  try_index,
ExceptionHandlerInfo info 
) const

Definition at line 16189 of file object.cc.

16190 {
16191 ASSERT((try_index >= 0) && (try_index < num_entries()));
16192 ASSERT(info != nullptr);
16193 *info = untag()->data()[try_index];
16194}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition: DM.cpp:213

◆ HandlerPCOffset()

uword dart::ExceptionHandlers::HandlerPCOffset ( intptr_t  try_index) const

Definition at line 16196 of file object.cc.

16196 {
16197 ASSERT((try_index >= 0) && (try_index < num_entries()));
16198 return untag()->data()[try_index].handler_pc_offset;
16199}

◆ has_async_handler()

bool dart::ExceptionHandlers::has_async_handler ( ) const

Definition at line 16157 of file object.cc.

16157 {
16159 untag()->packed_fields_);
16160}
static constexpr T decode(S value)
Definition: bitfield.h:171

◆ HasCatchAll()

bool dart::ExceptionHandlers::HasCatchAll ( intptr_t  try_index) const

Definition at line 16216 of file object.cc.

16216 {
16217 ASSERT((try_index >= 0) && (try_index < num_entries()));
16218 return untag()->data()[try_index].has_catch_all != 0;
16219}

◆ InstanceSize() [1/2]

static intptr_t dart::ExceptionHandlers::InstanceSize ( )
inlinestatic

Definition at line 6606 of file object.h.

6606 {
6607 ASSERT(sizeof(UntaggedExceptionHandlers) ==
6608 OFFSET_OF_RETURNED_VALUE(UntaggedExceptionHandlers, data));
6609 return 0;
6610 }
static int8_t data[kExtLength]
#define OFFSET_OF_RETURNED_VALUE(type, accessor)
Definition: globals.h:143

◆ InstanceSize() [2/2]

static intptr_t dart::ExceptionHandlers::InstanceSize ( intptr_t  len)
inlinestatic

Definition at line 6611 of file object.h.

6611 {
6612 return RoundedAllocationSize(sizeof(UntaggedExceptionHandlers) +
6613 (len * sizeof(ExceptionHandlerInfo)));
6614 }
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition: object.h:758

◆ IsGenerated()

bool dart::ExceptionHandlers::IsGenerated ( intptr_t  try_index) const

Definition at line 16211 of file object.cc.

16211 {
16212 ASSERT((try_index >= 0) && (try_index < num_entries()));
16213 return untag()->data()[try_index].is_generated != 0;
16214}

◆ NeedsStackTrace()

bool dart::ExceptionHandlers::NeedsStackTrace ( intptr_t  try_index) const

Definition at line 16206 of file object.cc.

16206 {
16207 ASSERT((try_index >= 0) && (try_index < num_entries()));
16208 return untag()->data()[try_index].needs_stacktrace != 0;
16209}

◆ New() [1/2]

ExceptionHandlersPtr dart::ExceptionHandlers::New ( const Array handled_types_data)
static

Definition at line 16255 of file object.cc.

16255 {
16257 const intptr_t num_handlers = handled_types_data.Length();
16258 if ((num_handlers < 0) || (num_handlers >= kMaxHandlers)) {
16259 FATAL(
16260 "Fatal error in ExceptionHandlers::New(): "
16261 "invalid num_handlers %" Pd "\n",
16262 num_handlers);
16263 }
16264 ExceptionHandlers& result = ExceptionHandlers::Handle();
16265 {
16266 auto raw = Object::Allocate<ExceptionHandlers>(Heap::kOld, num_handlers);
16267 NoSafepointScope no_safepoint;
16268 result = raw;
16269 result.untag()->packed_fields_ =
16271 }
16272 result.set_handled_types_data(handled_types_data);
16273 return result.ptr();
16274}
static constexpr S encode(T value)
Definition: bitfield.h:165
@ kOld
Definition: heap.h:39
static ClassPtr exception_handlers_class()
Definition: object.h:546
static ObjectPtr null()
Definition: object.h:433
#define FATAL(error)
GAsyncResult * result
#define Pd
Definition: globals.h:408

◆ New() [2/2]

ExceptionHandlersPtr dart::ExceptionHandlers::New ( intptr_t  num_handlers)
static

Definition at line 16241 of file object.cc.

16241 {
16243 if ((num_handlers < 0) || (num_handlers >= kMaxHandlers)) {
16244 FATAL(
16245 "Fatal error in ExceptionHandlers::New(): "
16246 "invalid num_handlers %" Pd "\n",
16247 num_handlers);
16248 }
16249 const Array& handled_types_data =
16250 (num_handlers == 0) ? Object::empty_array()
16251 : Array::Handle(Array::New(num_handlers, Heap::kOld));
16252 return ExceptionHandlers::New(handled_types_data);
16253}
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition: object.h:10959
static ExceptionHandlersPtr New(intptr_t num_handlers)
Definition: object.cc:16241

◆ num_entries()

intptr_t dart::ExceptionHandlers::num_entries ( ) const

Definition at line 16153 of file object.cc.

16153 {
16154 return untag()->num_entries();
16155}

◆ OuterTryIndex()

intptr_t dart::ExceptionHandlers::OuterTryIndex ( intptr_t  try_index) const

Definition at line 16201 of file object.cc.

16201 {
16202 ASSERT((try_index >= 0) && (try_index < num_entries()));
16203 return untag()->data()[try_index].outer_try_index;
16204}

◆ set_has_async_handler()

void dart::ExceptionHandlers::set_has_async_handler ( bool  value) const

Definition at line 16162 of file object.cc.

16162 {
16163 StoreNonPointer(&untag()->packed_fields_,
16165 value, untag()->packed_fields_));
16166}
static constexpr S update(T value, S original)
Definition: bitfield.h:188
void StoreNonPointer(const FieldType *addr, ValueType value) const
Definition: object.h:819
uint8_t value

◆ SetHandledTypes()

void dart::ExceptionHandlers::SetHandledTypes ( intptr_t  try_index,
const Array handled_types 
) const

Definition at line 16221 of file object.cc.

16222 {
16223 ASSERT((try_index >= 0) && (try_index < num_entries()));
16224 ASSERT(!handled_types.IsNull());
16225 const Array& handled_types_data =
16226 Array::Handle(untag()->handled_types_data());
16227 handled_types_data.SetAt(try_index, handled_types);
16228}

◆ SetHandlerInfo()

void dart::ExceptionHandlers::SetHandlerInfo ( intptr_t  try_index,
intptr_t  outer_try_index,
uword  handler_pc_offset,
bool  needs_stacktrace,
bool  has_catch_all,
bool  is_generated 
) const

Definition at line 16168 of file object.cc.

16173 {
16174 ASSERT((try_index >= 0) && (try_index < num_entries()));
16175 NoSafepointScope no_safepoint;
16176 ExceptionHandlerInfo* info =
16177 UnsafeMutableNonPointer(&untag()->data()[try_index]);
16178 info->outer_try_index = outer_try_index;
16179 // Some C compilers warn about the comparison always being true when using <=
16180 // due to limited range of data type.
16181 ASSERT((handler_pc_offset == static_cast<uword>(kMaxUint32)) ||
16182 (handler_pc_offset < static_cast<uword>(kMaxUint32)));
16183 info->handler_pc_offset = handler_pc_offset;
16184 info->needs_stacktrace = static_cast<int8_t>(needs_stacktrace);
16185 info->has_catch_all = static_cast<int8_t>(has_catch_all);
16186 info->is_generated = static_cast<int8_t>(is_generated);
16187}
FieldType * UnsafeMutableNonPointer(const FieldType *addr) const
Definition: object.h:837
constexpr uint32_t kMaxUint32
Definition: globals.h:484
uintptr_t uword
Definition: globals.h:501

◆ WriteToBuffer()

void dart::ExceptionHandlers::WriteToBuffer ( BaseTextBuffer buffer,
uword  base 
) const

Definition at line 16276 of file object.cc.

16277 {
16278 auto& handled_types = Array::Handle();
16279 auto& type = AbstractType::Handle();
16280 ExceptionHandlerInfo info;
16281 for (intptr_t i = 0; i < num_entries(); i++) {
16283 handled_types = GetHandledTypes(i);
16284 const intptr_t num_types =
16285 handled_types.IsNull() ? 0 : handled_types.Length();
16286 buffer->Printf("%" Pd " => %#" Px " (%" Pd " types) (outer %d)%s%s\n", i,
16287 base + info.handler_pc_offset, num_types,
16288 info.outer_try_index,
16289 ((info.needs_stacktrace != 0) ? " (needs stack trace)" : ""),
16290 ((info.is_generated != 0) ? " (generated)" : ""));
16291 for (int k = 0; k < num_types; k++) {
16292 type ^= handled_types.At(k);
16293 ASSERT(!type.IsNull());
16294 buffer->Printf(" %d. %s\n", k, type.ToCString());
16295 }
16296 }
16297 if (has_async_handler()) {
16298 buffer->AddString("<async handler>\n");
16299 }
16300}
GLenum type
void GetHandlerInfo(intptr_t try_index, ExceptionHandlerInfo *info) const
Definition: object.cc:16189
bool has_async_handler() const
Definition: object.cc:16157
ArrayPtr GetHandledTypes(intptr_t try_index) const
Definition: object.cc:16230
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir Path to the cache directory This is different from the persistent_cache_path in embedder which is used for Skia shader cache icu native lib Path to the library file that exports the ICU data vm service The hostname IP address on which the Dart VM Service should be served If not defaults to or::depending on whether ipv6 is specified vm service A custom Dart VM Service port The default is to pick a randomly available open port disable vm Disable the Dart VM Service The Dart VM Service is never available in release mode disable vm service Disable mDNS Dart VM Service publication Bind to the IPv6 localhost address for the Dart VM Service Ignored if vm service host is set endless trace buffer
Definition: switches.h:126
#define Px
Definition: globals.h:410

Friends And Related Function Documentation

◆ Class

friend class Class
friend

Definition at line 6635 of file object.h.

◆ Object

friend class Object
friend

Definition at line 6636 of file object.h.

Member Data Documentation

◆ kInvalidPcOffset

constexpr intptr_t dart::ExceptionHandlers::kInvalidPcOffset = 0
staticconstexpr

Definition at line 6574 of file object.h.


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