V8 Project
v8::internal::ElementHandlerCompiler Class Reference

#include <handler-compiler.h>

+ Inheritance diagram for v8::internal::ElementHandlerCompiler:
+ Collaboration diagram for v8::internal::ElementHandlerCompiler:

Public Member Functions

 ElementHandlerCompiler (Isolate *isolate)
 
virtual ~ElementHandlerCompiler ()
 
void CompileElementHandlers (MapHandleList *receiver_maps, CodeHandleList *handlers)
 

Static Public Member Functions

static void GenerateStoreSlow (MacroAssembler *masm)
 
- Static Public Member Functions inherited from v8::internal::PropertyHandlerCompiler
static Handle< CodeFind (Handle< Name > name, Handle< Map > map, Code::Kind kind, CacheHolderFlag cache_holder, Code::StubType type)
 

Additional Inherited Members

- Protected Member Functions inherited from v8::internal::PropertyHandlerCompiler
 PropertyHandlerCompiler (Isolate *isolate, Code::Kind kind, Handle< HeapType > type, Handle< JSObject > holder, CacheHolderFlag cache_holder)
 
virtual ~PropertyHandlerCompiler ()
 
virtual Register FrontendHeader (Register object_reg, Handle< Name > name, Label *miss)
 
virtual void FrontendFooter (Handle< Name > name, Label *miss)
 
Register Frontend (Register object_reg, Handle< Name > name)
 
void NonexistentFrontendHeader (Handle< Name > name, Label *miss, Register scratch1, Register scratch2)
 
Register CheckPrototypes (Register object_reg, Register holder_reg, Register scratch1, Register scratch2, Handle< Name > name, Label *miss, PrototypeCheckType check=CHECK_ALL_MAPS)
 
Handle< CodeGetCode (Code::Kind kind, Code::StubType type, Handle< Name > name)
 
void set_type_for_object (Handle< Object > object)
 
void set_holder (Handle< JSObject > holder)
 
Handle< HeapTypetype () const
 
Handle< JSObjectholder () const
 
- Static Protected Member Functions inherited from v8::internal::PropertyHandlerCompiler
static void GenerateFastApiCall (MacroAssembler *masm, const CallOptimization &optimization, Handle< Map > receiver_map, Register receiver, Register scratch, bool is_store, int argc, Register *values)
 
static void GenerateDictionaryNegativeLookup (MacroAssembler *masm, Label *miss_label, Register receiver, Handle< Name > name, Register r0, Register r1)
 
static void GenerateCheckPropertyCell (MacroAssembler *masm, Handle< JSGlobalObject > global, Handle< Name > name, Register scratch, Label *miss)
 

Detailed Description

Definition at line 258 of file handler-compiler.h.

Constructor & Destructor Documentation

◆ ElementHandlerCompiler()

v8::internal::ElementHandlerCompiler::ElementHandlerCompiler ( Isolate isolate)
inlineexplicit

Definition at line 260 of file handler-compiler.h.

261  : PropertyHandlerCompiler(isolate, Code::KEYED_LOAD_IC,
static Handle< T > null()
Definition: handles.h:123
PropertyHandlerCompiler(Isolate *isolate, Code::Kind kind, Handle< HeapType > type, Handle< JSObject > holder, CacheHolderFlag cache_holder)
@ kCacheOnReceiver
Definition: globals.h:488

◆ ~ElementHandlerCompiler()

virtual v8::internal::ElementHandlerCompiler::~ElementHandlerCompiler ( )
inlinevirtual

Definition at line 265 of file handler-compiler.h.

265 {}

Member Function Documentation

◆ CompileElementHandlers()

void v8::internal::ElementHandlerCompiler::CompileElementHandlers ( MapHandleList receiver_maps,
CodeHandleList handlers 
)

Definition at line 378 of file handler-compiler.cc.

379  {
380  for (int i = 0; i < receiver_maps->length(); ++i) {
381  Handle<Map> receiver_map = receiver_maps->at(i);
382  Handle<Code> cached_stub;
383 
384  if ((receiver_map->instance_type() & kNotStringTag) == 0) {
385  cached_stub = isolate()->builtins()->KeyedLoadIC_String();
386  } else if (receiver_map->instance_type() < FIRST_JS_RECEIVER_TYPE) {
387  cached_stub = isolate()->builtins()->KeyedLoadIC_Slow();
388  } else {
389  bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
390  ElementsKind elements_kind = receiver_map->elements_kind();
391  if (receiver_map->has_indexed_interceptor()) {
392  cached_stub = LoadIndexedInterceptorStub(isolate()).GetCode();
393  } else if (IsSloppyArgumentsElements(elements_kind)) {
394  cached_stub = KeyedLoadSloppyArgumentsStub(isolate()).GetCode();
395  } else if (IsFastElementsKind(elements_kind) ||
396  IsExternalArrayElementsKind(elements_kind) ||
397  IsFixedTypedArrayElementsKind(elements_kind)) {
398  cached_stub = LoadFastElementStub(isolate(), is_js_array, elements_kind)
399  .GetCode();
400  } else {
401  DCHECK(elements_kind == DICTIONARY_ELEMENTS);
402  cached_stub = LoadDictionaryElementStub(isolate()).GetCode();
403  }
404  }
405 
406  handlers->Add(cached_stub);
407  }
408 }
#define DCHECK(condition)
Definition: logging.h:205
bool IsSloppyArgumentsElements(ElementsKind kind)
Definition: elements-kind.h:90
bool IsExternalArrayElementsKind(ElementsKind kind)
Definition: elements-kind.h:95
const uint32_t kNotStringTag
Definition: objects.h:545
@ JS_ARRAY_TYPE
Definition: objects.h:738
@ FIRST_JS_RECEIVER_TYPE
Definition: objects.h:772
bool IsFastElementsKind(ElementsKind kind)
bool IsFixedTypedArrayElementsKind(ElementsKind kind)

References v8::internal::List< T, AllocationPolicy >::Add(), v8::internal::List< T, AllocationPolicy >::at(), DCHECK, v8::internal::DICTIONARY_ELEMENTS, v8::internal::FIRST_JS_RECEIVER_TYPE, v8::internal::IsExternalArrayElementsKind(), v8::internal::IsFastElementsKind(), v8::internal::IsFixedTypedArrayElementsKind(), v8::internal::IsSloppyArgumentsElements(), v8::internal::JS_ARRAY_TYPE, and v8::internal::kNotStringTag.

Referenced by v8::internal::PropertyICCompiler::ComputeKeyedLoadPolymorphic().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GenerateStoreSlow()

static void v8::internal::ElementHandlerCompiler::GenerateStoreSlow ( MacroAssembler masm)
static

Referenced by v8::internal::Generate_KeyedStoreIC_Slow().

+ Here is the caller graph for this function:

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