Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
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 6545 of file object.h.

Member Function Documentation

◆ GetHandledTypes()

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

Definition at line 16277 of file object.cc.

16277 {
16278 ASSERT((try_index >= 0) && (try_index < num_entries()));
16279 Array& array = Array::Handle(untag()->handled_types_data());
16280 array ^= array.At(try_index);
16281 return array.ptr();
16282}
intptr_t num_entries() const
Definition object.cc:16200
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)

◆ GetHandlerInfo()

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

Definition at line 16236 of file object.cc.

16237 {
16238 ASSERT((try_index >= 0) && (try_index < num_entries()));
16239 ASSERT(info != nullptr);
16240 *info = untag()->data()[try_index];
16241}
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 16243 of file object.cc.

16243 {
16244 ASSERT((try_index >= 0) && (try_index < num_entries()));
16245 return untag()->data()[try_index].handler_pc_offset;
16246}

◆ has_async_handler()

bool dart::ExceptionHandlers::has_async_handler ( ) const

Definition at line 16204 of file object.cc.

16204 {
16206 untag()->packed_fields_);
16207}
static constexpr T decode(S value)
Definition bitfield.h:173

◆ HasCatchAll()

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

Definition at line 16263 of file object.cc.

16263 {
16264 ASSERT((try_index >= 0) && (try_index < num_entries()));
16265 return untag()->data()[try_index].has_catch_all != 0;
16266}

◆ InstanceSize() [1/2]

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

Definition at line 6579 of file object.h.

6579 {
6580 ASSERT(sizeof(UntaggedExceptionHandlers) ==
6581 OFFSET_OF_RETURNED_VALUE(UntaggedExceptionHandlers, data));
6582 return 0;
6583 }
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 6584 of file object.h.

6584 {
6585 return RoundedAllocationSize(sizeof(UntaggedExceptionHandlers) +
6586 (len * sizeof(ExceptionHandlerInfo)));
6587 }
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 16258 of file object.cc.

16258 {
16259 ASSERT((try_index >= 0) && (try_index < num_entries()));
16260 return untag()->data()[try_index].is_generated != 0;
16261}

◆ NeedsStackTrace()

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

Definition at line 16253 of file object.cc.

16253 {
16254 ASSERT((try_index >= 0) && (try_index < num_entries()));
16255 return untag()->data()[try_index].needs_stacktrace != 0;
16256}

◆ New() [1/2]

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

Definition at line 16302 of file object.cc.

16302 {
16304 const intptr_t num_handlers = handled_types_data.Length();
16305 if ((num_handlers < 0) || (num_handlers >= kMaxHandlers)) {
16306 FATAL(
16307 "Fatal error in ExceptionHandlers::New(): "
16308 "invalid num_handlers %" Pd "\n",
16309 num_handlers);
16310 }
16311 ExceptionHandlers& result = ExceptionHandlers::Handle();
16312 {
16313 auto raw = Object::Allocate<ExceptionHandlers>(Heap::kOld, num_handlers);
16314 NoSafepointScope no_safepoint;
16315 result = raw;
16316 result.untag()->packed_fields_ =
16318 }
16319 result.set_handled_types_data(handled_types_data);
16320 return result.ptr();
16321}
static constexpr S encode(T value)
Definition bitfield.h:167
@ 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 16288 of file object.cc.

16288 {
16290 if ((num_handlers < 0) || (num_handlers >= kMaxHandlers)) {
16291 FATAL(
16292 "Fatal error in ExceptionHandlers::New(): "
16293 "invalid num_handlers %" Pd "\n",
16294 num_handlers);
16295 }
16296 const Array& handled_types_data =
16297 (num_handlers == 0) ? Object::empty_array()
16298 : Array::Handle(Array::New(num_handlers, Heap::kOld));
16299 return ExceptionHandlers::New(handled_types_data);
16300}
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition object.h:10933
static ExceptionHandlersPtr New(intptr_t num_handlers)
Definition object.cc:16288

◆ num_entries()

intptr_t dart::ExceptionHandlers::num_entries ( ) const

Definition at line 16200 of file object.cc.

16200 {
16201 return untag()->num_entries();
16202}

◆ OuterTryIndex()

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

Definition at line 16248 of file object.cc.

16248 {
16249 ASSERT((try_index >= 0) && (try_index < num_entries()));
16250 return untag()->data()[try_index].outer_try_index;
16251}

◆ set_has_async_handler()

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

Definition at line 16209 of file object.cc.

16209 {
16210 StoreNonPointer(&untag()->packed_fields_,
16212 value, untag()->packed_fields_));
16213}
static constexpr S update(T value, S original)
Definition bitfield.h:190
void StoreNonPointer(const FieldType *addr, ValueType value) const
Definition object.h:819

◆ SetHandledTypes()

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

Definition at line 16268 of file object.cc.

16269 {
16270 ASSERT((try_index >= 0) && (try_index < num_entries()));
16271 ASSERT(!handled_types.IsNull());
16272 const Array& handled_types_data =
16273 Array::Handle(untag()->handled_types_data());
16274 handled_types_data.SetAt(try_index, handled_types);
16275}

◆ 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 16215 of file object.cc.

16220 {
16221 ASSERT((try_index >= 0) && (try_index < num_entries()));
16222 NoSafepointScope no_safepoint;
16223 ExceptionHandlerInfo* info =
16224 UnsafeMutableNonPointer(&untag()->data()[try_index]);
16225 info->outer_try_index = outer_try_index;
16226 // Some C compilers warn about the comparison always being true when using <=
16227 // due to limited range of data type.
16228 ASSERT((handler_pc_offset == static_cast<uword>(kMaxUint32)) ||
16229 (handler_pc_offset < static_cast<uword>(kMaxUint32)));
16230 info->handler_pc_offset = handler_pc_offset;
16231 info->needs_stacktrace = static_cast<int8_t>(needs_stacktrace);
16232 info->has_catch_all = static_cast<int8_t>(has_catch_all);
16233 info->is_generated = static_cast<int8_t>(is_generated);
16234}
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 16323 of file object.cc.

16324 {
16325 auto& handled_types = Array::Handle();
16326 auto& type = AbstractType::Handle();
16327 ExceptionHandlerInfo info;
16328 for (intptr_t i = 0; i < num_entries(); i++) {
16329 GetHandlerInfo(i, &info);
16330 handled_types = GetHandledTypes(i);
16331 const intptr_t num_types =
16332 handled_types.IsNull() ? 0 : handled_types.Length();
16333 buffer->Printf("%" Pd " => %#" Px " (%" Pd " types) (outer %d)%s%s\n", i,
16334 base + info.handler_pc_offset, num_types,
16335 info.outer_try_index,
16336 ((info.needs_stacktrace != 0) ? " (needs stack trace)" : ""),
16337 ((info.is_generated != 0) ? " (generated)" : ""));
16338 for (int k = 0; k < num_types; k++) {
16339 type ^= handled_types.At(k);
16340 ASSERT(!type.IsNull());
16341 buffer->Printf(" %d. %s\n", k, type.ToCString());
16342 }
16343 }
16344 if (has_async_handler()) {
16345 buffer->AddString("<async handler>\n");
16346 }
16347}
void GetHandlerInfo(intptr_t try_index, ExceptionHandlerInfo *info) const
Definition object.cc:16236
bool has_async_handler() const
Definition object.cc:16204
ArrayPtr GetHandledTypes(intptr_t try_index) const
Definition object.cc:16277
static const uint8_t buffer[]
#define Px
Definition globals.h:410

Friends And Related Symbol Documentation

◆ Class

friend class Class
friend

Definition at line 6608 of file object.h.

◆ Object

friend class Object
friend

Definition at line 6609 of file object.h.

Member Data Documentation

◆ kInvalidPcOffset

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

Definition at line 6547 of file object.h.


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