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

#include <object.h>

Inheritance diagram for dart::Closure:
dart::Instance dart::Object

Public Member Functions

TypeArgumentsPtr instantiator_type_arguments () const
 
void set_instantiator_type_arguments (const TypeArguments &args) const
 
TypeArgumentsPtr function_type_arguments () const
 
void set_function_type_arguments (const TypeArguments &args) const
 
TypeArgumentsPtr delayed_type_arguments () const
 
void set_delayed_type_arguments (const TypeArguments &args) const
 
FunctionPtr function () const
 
ObjectPtr RawContext () const
 
ContextPtr GetContext () const
 
InstancePtr GetImplicitClosureReceiver () const
 
bool IsGeneric () const
 
SmiPtr hash () const
 
virtual void CanonicalizeFieldsLocked (Thread *thread) const
 
virtual bool CanonicalizeEquals (const Instance &other) const
 
virtual uint32_t CanonicalizeHash () const
 
uword ComputeHash () const
 
FunctionTypePtr GetInstantiatedSignature (Zone *zone) const
 
- Public Member Functions inherited from dart::Instance
virtual bool OperatorEquals (const Instance &other) const
 
bool IsIdenticalTo (const Instance &other) const
 
virtual bool CanonicalizeEquals (const Instance &other) const
 
virtual uint32_t CanonicalizeHash () const
 
intptr_t SizeFromClass () const
 
InstancePtr Canonicalize (Thread *thread) const
 
virtual InstancePtr CanonicalizeLocked (Thread *thread) const
 
virtual void CanonicalizeFieldsLocked (Thread *thread) const
 
InstancePtr CopyShallowToOldSpace (Thread *thread) const
 
ObjectPtr GetField (const Field &field) const
 
void SetField (const Field &field, const Object &value) const
 
AbstractTypePtr GetType (Heap::Space space) const
 
virtual TypeArgumentsPtr GetTypeArguments () const
 
virtual void SetTypeArguments (const TypeArguments &value) const
 
bool IsInstanceOf (const AbstractType &other, const TypeArguments &other_instantiator_type_arguments, const TypeArguments &other_function_type_arguments) const
 
bool IsAssignableTo (const AbstractType &other, const TypeArguments &other_instantiator_type_arguments, const TypeArguments &other_function_type_arguments) const
 
bool IsValidNativeIndex (int index) const
 
intptr_t * NativeFieldsDataAddr () const
 
intptr_t GetNativeField (int index) const
 
void GetNativeFields (uint16_t num_fields, intptr_t *field_values) const
 
void SetNativeFields (uint16_t num_fields, const intptr_t *field_values) const
 
uint16_t NumNativeFields () const
 
void SetNativeField (int index, intptr_t value) const
 
bool IsCallable (Function *function) const
 
ObjectPtr Invoke (const String &selector, const Array &arguments, const Array &argument_names, bool respect_reflectable=true, bool check_is_entrypoint=false) const
 
ObjectPtr InvokeGetter (const String &selector, bool respect_reflectable=true, bool check_is_entrypoint=false) const
 
ObjectPtr InvokeSetter (const String &selector, const Instance &argument, bool respect_reflectable=true, bool check_is_entrypoint=false) const
 
ObjectPtr EvaluateCompiledExpression (const Class &klass, const ExternalTypedData &kernel_buffer, const Array &type_definitions, const Array &arguments, const TypeArguments &type_arguments) const
 
virtual ObjectPtr HashCode () const
 
IntegerPtr IdentityHashCode (Thread *thread) const
 
virtual bool IsPointer () 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 instantiator_type_arguments_offset ()
 
static intptr_t function_type_arguments_offset ()
 
static intptr_t delayed_type_arguments_offset ()
 
static intptr_t function_offset ()
 
static FunctionPtr FunctionOf (ClosurePtr closure)
 
static intptr_t context_offset ()
 
static intptr_t hash_offset ()
 
static intptr_t InstanceSize ()
 
static ClosurePtr New (const TypeArguments &instantiator_type_arguments, const TypeArguments &function_type_arguments, const Function &function, const Object &context, Heap::Space space=Heap::kNew)
 
static ClosurePtr New (const TypeArguments &instantiator_type_arguments, const TypeArguments &function_type_arguments, const TypeArguments &delayed_type_arguments, const Function &function, const Object &context, Heap::Space space=Heap::kNew)
 
- Static Public Member Functions inherited from dart::Instance
static bool NullIsAssignableTo (const AbstractType &other)
 
static bool NullIsAssignableTo (const AbstractType &other, const TypeArguments &other_instantiator_type_arguments, const TypeArguments &other_function_type_arguments)
 
static ObjectPtr EvaluateCompiledExpression (Thread *thread, const Object &receiver, const Library &library, const Class &klass, const ExternalTypedData &kernel_buffer, const Array &type_definitions, const Array &param_values, const TypeArguments &type_param_values)
 
static intptr_t UnroundedSize ()
 
static intptr_t InstanceSize ()
 
static InstancePtr New (const Class &cls, Heap::Space space=Heap::kNew)
 
static InstancePtr NewAlreadyFinalized (const Class &cls, Heap::Space space=Heap::kNew)
 
static intptr_t DataOffsetFor (intptr_t cid)
 
static intptr_t ElementSizeFor (intptr_t cid)
 
static intptr_t NextFieldOffset ()
 
static intptr_t NativeFieldsOffset ()
 
- 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)
 

Friends

class Class
 

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
 
- Static Public Attributes inherited from dart::Object
static constexpr intptr_t kHashBits = 30
 
static const ClassId kClassId = kObjectCid
 
- Protected Member Functions inherited from dart::Instance
virtual void PrintSharedInstanceJSON (JSONObject *jsobj, bool ref, bool include_id=true) const
 
- 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 12308 of file object.h.

Member Function Documentation

◆ CanonicalizeEquals()

bool dart::Closure::CanonicalizeEquals ( const Instance other) const
virtual

Reimplemented from dart::Instance.

Definition at line 25861 of file object.cc.

25861 {
25862 if (!other.IsClosure()) return false;
25863
25864 const Closure& other_closure = Closure::Cast(other);
25865 return (instantiator_type_arguments() ==
25866 other_closure.instantiator_type_arguments()) &&
25868 other_closure.function_type_arguments()) &&
25869 (delayed_type_arguments() == other_closure.delayed_type_arguments()) &&
25870 (function() == other_closure.function()) &&
25871 (RawContext() == other_closure.RawContext());
25872}
ObjectPtr RawContext() const
Definition: object.h:12358
TypeArgumentsPtr instantiator_type_arguments() const
Definition: object.h:12320
TypeArgumentsPtr delayed_type_arguments() const
Definition: object.h:12340
TypeArgumentsPtr function_type_arguments() const
Definition: object.h:12330
FunctionPtr function() const
Definition: object.h:12350
friend class Closure
Definition: object.h:8434

◆ CanonicalizeFieldsLocked()

void dart::Closure::CanonicalizeFieldsLocked ( Thread thread) const
virtual

Reimplemented from dart::Instance.

Definition at line 25874 of file object.cc.

25874 {
25875 TypeArguments& type_args = TypeArguments::Handle();
25876 type_args = instantiator_type_arguments();
25877 if (!type_args.IsNull()) {
25878 type_args = type_args.Canonicalize(thread);
25880 }
25881 type_args = function_type_arguments();
25882 if (!type_args.IsNull()) {
25883 type_args = type_args.Canonicalize(thread);
25884 set_function_type_arguments(type_args);
25885 }
25886 type_args = delayed_type_arguments();
25887 if (!type_args.IsNull()) {
25888 type_args = type_args.Canonicalize(thread);
25889 set_delayed_type_arguments(type_args);
25890 }
25891 // Ignore function, context, hash.
25892}
void set_delayed_type_arguments(const TypeArguments &args) const
Definition: object.h:12343
void set_function_type_arguments(const TypeArguments &args) const
Definition: object.h:12333
void set_instantiator_type_arguments(const TypeArguments &args) const
Definition: object.h:12323
static Object & Handle()
Definition: object.h:407

◆ CanonicalizeHash()

virtual uint32_t dart::Closure::CanonicalizeHash ( ) const
inlinevirtual

Reimplemented from dart::Instance.

Definition at line 12389 of file object.h.

12389 {
12390 return Function::Handle(function()).Hash();
12391 }

◆ ComputeHash()

uword dart::Closure::ComputeHash ( ) const

Definition at line 25909 of file object.cc.

25909 {
25910 Thread* thread = Thread::Current();
25911 DEBUG_ASSERT(thread->TopErrorHandlerIsExitFrame());
25912 Zone* zone = thread->zone();
25913 const Function& func = Function::Handle(zone, function());
25914 uint32_t result = 0;
25915 if (func.IsImplicitClosureFunction() || func.IsGeneric()) {
25916 // Combine function's hash code, delayed type arguments hash code
25917 // (if generic), and identityHashCode of cached receiver (if implicit
25918 // instance closure).
25919 result = static_cast<uint32_t>(func.Hash());
25920 if (func.IsGeneric()) {
25921 const TypeArguments& delayed_type_args =
25923 result = CombineHashes(result, delayed_type_args.Hash());
25924 }
25925 if (func.IsImplicitInstanceClosureFunction()) {
25926 const Instance& receiver =
25928 const Integer& receiverHash =
25929 Integer::Handle(zone, receiver.IdentityHashCode(thread));
25930 result = CombineHashes(result, receiverHash.AsTruncatedUint32Value());
25931 }
25932 } else {
25933 // Non-implicit closures of non-generic functions are unique,
25934 // so identityHashCode of closure object is good enough.
25935 const Integer& identityHash =
25936 Integer::Handle(zone, this->IdentityHashCode(thread));
25937 result = identityHash.AsTruncatedUint32Value();
25938 }
25940}
#define DEBUG_ASSERT(cond)
Definition: assert.h:321
InstancePtr GetImplicitClosureReceiver() const
Definition: object.h:12365
IntegerPtr IdentityHashCode(Thread *thread) const
Definition: object.cc:20219
friend class Thread
Definition: object.h:1025
static constexpr intptr_t kHashBits
Definition: object.h:323
static Thread * Current()
Definition: thread.h:362
GAsyncResult * result
uint32_t CombineHashes(uint32_t hash, uint32_t other_hash)
Definition: hash.h:12
uint32_t FinalizeHash(uint32_t hash, intptr_t hashbits=kBitsPerInt32)
Definition: hash.h:20

◆ context_offset()

static intptr_t dart::Closure::context_offset ( )
inlinestatic

Definition at line 12370 of file object.h.

12370 {
12371 return OFFSET_OF(UntaggedClosure, context_);
12372 }
#define OFFSET_OF(type, field)
Definition: globals.h:138

◆ delayed_type_arguments()

TypeArgumentsPtr dart::Closure::delayed_type_arguments ( ) const
inline

Definition at line 12340 of file object.h.

12340 {
12341 return untag()->delayed_type_arguments();
12342 }
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

◆ delayed_type_arguments_offset()

static intptr_t dart::Closure::delayed_type_arguments_offset ( )
inlinestatic

Definition at line 12346 of file object.h.

12346 {
12347 return OFFSET_OF(UntaggedClosure, delayed_type_arguments_);
12348 }

◆ function()

FunctionPtr dart::Closure::function ( ) const
inline

Definition at line 12350 of file object.h.

12350{ return untag()->function(); }

◆ function_offset()

static intptr_t dart::Closure::function_offset ( )
inlinestatic

Definition at line 12351 of file object.h.

12351 {
12352 return OFFSET_OF(UntaggedClosure, function_);
12353 }

◆ function_type_arguments()

TypeArgumentsPtr dart::Closure::function_type_arguments ( ) const
inline

Definition at line 12330 of file object.h.

12330 {
12331 return untag()->function_type_arguments();
12332 }

◆ function_type_arguments_offset()

static intptr_t dart::Closure::function_type_arguments_offset ( )
inlinestatic

Definition at line 12336 of file object.h.

12336 {
12337 return OFFSET_OF(UntaggedClosure, function_type_arguments_);
12338 }

◆ FunctionOf()

static FunctionPtr dart::Closure::FunctionOf ( ClosurePtr  closure)
inlinestatic

Definition at line 12354 of file object.h.

12354 {
12355 return closure.untag()->function();
12356 }
std::function< void()> closure
Definition: closure.h:14

◆ GetContext()

ContextPtr dart::Closure::GetContext ( ) const
inline

Definition at line 12360 of file object.h.

12360 {
12362 return Context::RawCast(RawContext());
12363 }
bool IsImplicitClosureFunction() const
Definition: object.h:3903
static ObjectPtr RawCast(ObjectPtr obj)
Definition: object.h:325
#define ASSERT(E)

◆ GetImplicitClosureReceiver()

InstancePtr dart::Closure::GetImplicitClosureReceiver ( ) const
inline

Definition at line 12365 of file object.h.

12365 {
12367 return Instance::RawCast(RawContext());
12368 }
bool IsImplicitInstanceClosureFunction() const
Definition: object.h:3924

◆ GetInstantiatedSignature()

FunctionTypePtr dart::Closure::GetInstantiatedSignature ( Zone zone) const

Definition at line 25984 of file object.cc.

25984 {
25985 const Function& fun = Function::Handle(zone, function());
25986 FunctionType& sig = FunctionType::Handle(zone, fun.signature());
25987 TypeArguments& fn_type_args =
25989 const TypeArguments& delayed_type_args =
25991 const TypeArguments& inst_type_args =
25993
25994 // We detect the case of a partial tearoff type application and substitute the
25995 // type arguments for the type parameters of the function.
25996 intptr_t num_free_params;
25997 if (!IsGeneric() && fun.IsGeneric()) {
25998 num_free_params = kCurrentAndEnclosingFree;
25999 fn_type_args = delayed_type_args.Prepend(
26000 zone, fn_type_args, sig.NumParentTypeArguments(),
26001 sig.NumTypeParameters() + sig.NumParentTypeArguments());
26002 } else {
26003 num_free_params = kAllFree;
26004 }
26005 if (num_free_params == kCurrentAndEnclosingFree || !sig.IsInstantiated()) {
26006 sig ^= sig.InstantiateFrom(inst_type_args, fn_type_args, num_free_params,
26007 Heap::kOld);
26008 }
26009 return sig.ptr();
26010}
bool IsGeneric() const
Definition: object.h:12376
@ kOld
Definition: heap.h:39
@ kCurrentAndEnclosingFree
Definition: object.h:2937
@ kAllFree
Definition: object.h:2940

◆ hash()

SmiPtr dart::Closure::hash ( ) const
inline

Definition at line 12380 of file object.h.

12380{ return untag()->hash(); }

◆ hash_offset()

static intptr_t dart::Closure::hash_offset ( )
inlinestatic

Definition at line 12381 of file object.h.

12381{ return OFFSET_OF(UntaggedClosure, hash_); }

◆ InstanceSize()

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

Definition at line 12383 of file object.h.

12383 {
12384 return RoundedAllocationSize(sizeof(UntaggedClosure));
12385 }
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition: object.h:758

◆ instantiator_type_arguments()

TypeArgumentsPtr dart::Closure::instantiator_type_arguments ( ) const
inline

Definition at line 12320 of file object.h.

12320 {
12321 return untag()->instantiator_type_arguments();
12322 }

◆ instantiator_type_arguments_offset()

static intptr_t dart::Closure::instantiator_type_arguments_offset ( )
inlinestatic

Definition at line 12326 of file object.h.

12326 {
12327 return OFFSET_OF(UntaggedClosure, instantiator_type_arguments_);
12328 }

◆ IsGeneric()

bool dart::Closure::IsGeneric ( ) const
inline

Definition at line 12376 of file object.h.

12376 {
12377 return delayed_type_arguments() == Object::empty_type_arguments().ptr();
12378 }

◆ New() [1/2]

ClosurePtr dart::Closure::New ( const TypeArguments instantiator_type_arguments,
const TypeArguments function_type_arguments,
const Function function,
const Object context,
Heap::Space  space = Heap::kNew 
)
static

Definition at line 25942 of file object.cc.

25946 {
25947 // We store null delayed type arguments, not empty ones, in closures with
25948 // non-generic functions a) to make method extraction slightly faster and
25949 // b) to make the Closure::IsGeneric check fast.
25950 // Keep in sync with StubCodeCompiler::GenerateAllocateClosureStub.
25952 function.IsGeneric() ? Object::empty_type_arguments()
25953 : Object::null_type_arguments(),
25954 function, context, space);
25955}
static ClosurePtr New(const TypeArguments &instantiator_type_arguments, const TypeArguments &function_type_arguments, const Function &function, const Object &context, Heap::Space space=Heap::kNew)
Definition: object.cc:25942

◆ New() [2/2]

ClosurePtr dart::Closure::New ( const TypeArguments instantiator_type_arguments,
const TypeArguments function_type_arguments,
const TypeArguments delayed_type_arguments,
const Function function,
const Object context,
Heap::Space  space = Heap::kNew 
)
static

Definition at line 25957 of file object.cc.

25962 {
25963 ASSERT(instantiator_type_arguments.IsCanonical());
25964 ASSERT(function_type_arguments.IsCanonical());
25965 ASSERT(delayed_type_arguments.IsCanonical());
25967 ASSERT(
25968 (function.IsImplicitInstanceClosureFunction() && context.IsInstance()) ||
25969 (function.IsNonImplicitClosureFunction() && context.IsContext()) ||
25970 context.IsNull());
25971 const auto& result = Closure::Handle(Object::Allocate<Closure>(space));
25972 result.untag()->set_instantiator_type_arguments(
25974 result.untag()->set_function_type_arguments(function_type_arguments.ptr());
25975 result.untag()->set_delayed_type_arguments(delayed_type_arguments.ptr());
25976 result.untag()->set_function(function.ptr());
25977 result.untag()->set_context(context.ptr());
25978#if defined(DART_PRECOMPILED_RUNTIME)
25979 result.set_entry_point(function.entry_point());
25980#endif
25981 return result.ptr();
25982}
bool IsCanonical() const
Definition: object.h:335

◆ RawContext()

ObjectPtr dart::Closure::RawContext ( ) const
inline

Definition at line 12358 of file object.h.

12358{ return untag()->context(); }

◆ set_delayed_type_arguments()

void dart::Closure::set_delayed_type_arguments ( const TypeArguments args) const
inline

Definition at line 12343 of file object.h.

12343 {
12344 untag()->set_delayed_type_arguments(args.ptr());
12345 }
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args

◆ set_function_type_arguments()

void dart::Closure::set_function_type_arguments ( const TypeArguments args) const
inline

Definition at line 12333 of file object.h.

12333 {
12334 untag()->set_function_type_arguments(args.ptr());
12335 }

◆ set_instantiator_type_arguments()

void dart::Closure::set_instantiator_type_arguments ( const TypeArguments args) const
inline

Definition at line 12323 of file object.h.

12323 {
12324 untag()->set_instantiator_type_arguments(args.ptr());
12325 }

Friends And Related Function Documentation

◆ Class

friend class Class
friend

Definition at line 12411 of file object.h.


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