V8 Project
v8::internal::NamedLoadHandlerCompiler Class Reference

#include <handler-compiler.h>

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

Public Member Functions

 NamedLoadHandlerCompiler (Isolate *isolate, Handle< HeapType > type, Handle< JSObject > holder, CacheHolderFlag cache_holder)
 
virtual ~NamedLoadHandlerCompiler ()
 
Handle< CodeCompileLoadField (Handle< Name > name, FieldIndex index)
 
Handle< CodeCompileLoadCallback (Handle< Name > name, Handle< ExecutableAccessorInfo > callback)
 
Handle< CodeCompileLoadCallback (Handle< Name > name, const CallOptimization &call_optimization)
 
Handle< CodeCompileLoadConstant (Handle< Name > name, int constant_index)
 
Handle< CodeCompileLoadInterceptor (LookupIterator *it)
 
Handle< CodeCompileLoadViaGetter (Handle< Name > name, Handle< JSFunction > getter)
 
Handle< CodeCompileLoadGlobal (Handle< PropertyCell > cell, Handle< Name > name, bool is_configurable)
 

Static Public Member Functions

static Handle< CodeComputeLoadNonexistent (Handle< Name > name, Handle< HeapType > type)
 
static void GenerateLoadViaGetter (MacroAssembler *masm, Handle< HeapType > type, Register receiver, Handle< JSFunction > getter)
 
static void GenerateLoadViaGetterForDeopt (MacroAssembler *masm)
 
static void GenerateLoadFunctionPrototype (MacroAssembler *masm, Register receiver, Register scratch1, Register scratch2, Label *miss_label)
 
- 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)
 

Static Public Attributes

static const int kInterceptorArgsNameIndex = 0
 
static const int kInterceptorArgsInfoIndex = 1
 
static const int kInterceptorArgsThisIndex = 2
 
static const int kInterceptorArgsHolderIndex = 3
 
static const int kInterceptorArgsLength = 4
 

Protected Member Functions

virtual Register FrontendHeader (Register object_reg, Handle< Name > name, Label *miss)
 
virtual void FrontendFooter (Handle< Name > name, Label *miss)
 
- 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 ()
 
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
 

Private Member Functions

Handle< CodeCompileLoadNonexistent (Handle< Name > name)
 
void GenerateLoadConstant (Handle< Object > value)
 
void GenerateLoadCallback (Register reg, Handle< ExecutableAccessorInfo > callback)
 
void GenerateLoadCallback (const CallOptimization &call_optimization, Handle< Map > receiver_map)
 
void GenerateLoadInterceptor (Register holder_reg)
 
void GenerateLoadInterceptorWithFollowup (LookupIterator *it, Register holder_reg)
 
void GenerateLoadPostInterceptor (LookupIterator *it, Register reg)
 
Register scratch4 ()
 

Static Private Member Functions

static void GenerateDirectLoadGlobalFunctionPrototype (MacroAssembler *masm, int index, Register prototype, Label *miss)
 

Additional Inherited Members

- 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 100 of file handler-compiler.h.

Constructor & Destructor Documentation

◆ NamedLoadHandlerCompiler()

v8::internal::NamedLoadHandlerCompiler::NamedLoadHandlerCompiler ( Isolate isolate,
Handle< HeapType type,
Handle< JSObject holder,
CacheHolderFlag  cache_holder 
)
inline

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

105  : PropertyHandlerCompiler(isolate, Code::LOAD_IC, type, holder,
106  cache_holder) {}
Handle< JSObject > holder() const
PropertyHandlerCompiler(Isolate *isolate, Code::Kind kind, Handle< HeapType > type, Handle< JSObject > holder, CacheHolderFlag cache_holder)
Handle< HeapType > type() const

◆ ~NamedLoadHandlerCompiler()

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

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

108 {}

Member Function Documentation

◆ CompileLoadCallback() [1/2]

Handle< Code > v8::internal::NamedLoadHandlerCompiler::CompileLoadCallback ( Handle< Name name,
const CallOptimization &  call_optimization 
)

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

219  {
220  DCHECK(call_optimization.is_simple_api_call());
221  Frontend(receiver(), name);
222  Handle<Map> receiver_map = IC::TypeToMap(*type(), isolate());
223  GenerateFastApiCall(masm(), call_optimization, receiver_map, receiver(),
224  scratch1(), false, 0, NULL);
225  return GetCode(kind(), Code::FAST, name);
226 }
static Handle< Map > TypeToMap(HeapType *type, Isolate *isolate)
Definition: ic.cc:719
Handle< Code > GetCode(Code::Kind kind, Code::StubType type, Handle< Name > name)
static void GenerateFastApiCall(MacroAssembler *masm, const CallOptimization &optimization, Handle< Map > receiver_map, Register receiver, Register scratch, bool is_store, int argc, Register *values)
Register Frontend(Register object_reg, Handle< Name > name)
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be expose gc extension under the specified name show built in functions in stack traces use random jit cookie to mask large constants minimum length for automatic enable preparsing CPU profiler sampling interval in microseconds trace out of bounds accesses to external arrays default size of stack region v8 is allowed to maximum length of function source code printed in a stack trace min size of a semi the new space consists of two semi spaces print one trace line following each garbage collection do not print trace line after scavenger collection print cumulative GC statistics in name
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be NULL
#define DCHECK(condition)
Definition: logging.h:205

References DCHECK, v8::internal::Code::FAST, v8::internal::PropertyHandlerCompiler::Frontend(), v8::internal::PropertyHandlerCompiler::GenerateFastApiCall(), v8::internal::PropertyHandlerCompiler::GetCode(), name, NULL, v8::internal::PropertyHandlerCompiler::type(), and v8::internal::IC::TypeToMap().

+ Here is the call graph for this function:

◆ CompileLoadCallback() [2/2]

Handle< Code > v8::internal::NamedLoadHandlerCompiler::CompileLoadCallback ( Handle< Name name,
Handle< ExecutableAccessorInfo callback 
)

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

211  {
212  Register reg = Frontend(receiver(), name);
213  GenerateLoadCallback(reg, callback);
214  return GetCode(kind(), Code::FAST, name);
215 }
void GenerateLoadCallback(Register reg, Handle< ExecutableAccessorInfo > callback)

References v8::internal::Code::FAST, v8::internal::PropertyHandlerCompiler::Frontend(), GenerateLoadCallback(), v8::internal::PropertyHandlerCompiler::GetCode(), and name.

Referenced by v8::internal::LoadIC::CompileHandler().

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

◆ CompileLoadConstant()

Handle< Code > v8::internal::NamedLoadHandlerCompiler::CompileLoadConstant ( Handle< Name name,
int  constant_index 
)

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

191  {
192  Register reg = Frontend(receiver(), name);
193  __ Move(receiver(), reg);
194  LoadConstantStub stub(isolate(), constant_index);
195  GenerateTailCall(masm(), stub.GetCode());
196  return GetCode(kind(), Code::FAST, name);
197 }
#define __

References __, v8::internal::Code::FAST, v8::internal::PropertyHandlerCompiler::Frontend(), v8::internal::PropertyHandlerCompiler::GetCode(), and name.

Referenced by v8::internal::LoadIC::CompileHandler().

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

◆ CompileLoadField()

Handle< Code > v8::internal::NamedLoadHandlerCompiler::CompileLoadField ( Handle< Name name,
FieldIndex  index 
)

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

181  {
182  Register reg = Frontend(receiver(), name);
183  __ Move(receiver(), reg);
184  LoadFieldStub stub(isolate(), field);
185  GenerateTailCall(masm(), stub.GetCode());
186  return GetCode(kind(), Code::FAST, name);
187 }

References __, v8::internal::Code::FAST, v8::internal::PropertyHandlerCompiler::Frontend(), v8::internal::PropertyHandlerCompiler::GetCode(), and name.

Referenced by v8::internal::LoadIC::CompileHandler().

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

◆ CompileLoadGlobal()

Handle<Code> v8::internal::NamedLoadHandlerCompiler::CompileLoadGlobal ( Handle< PropertyCell cell,
Handle< Name name,
bool  is_configurable 
)

Referenced by v8::internal::LoadIC::CompileHandler().

+ Here is the caller graph for this function:

◆ CompileLoadInterceptor()

Handle< Code > v8::internal::NamedLoadHandlerCompiler::CompileLoadInterceptor ( LookupIterator *  it)

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

230  {
231  // So far the most popular follow ups for interceptor loads are FIELD and
232  // ExecutableAccessorInfo, so inline only them. Other cases may be added
233  // later.
234  bool inline_followup = false;
235  switch (it->state()) {
236  case LookupIterator::TRANSITION:
237  UNREACHABLE();
238  case LookupIterator::ACCESS_CHECK:
239  case LookupIterator::INTERCEPTOR:
240  case LookupIterator::JSPROXY:
241  case LookupIterator::NOT_FOUND:
242  break;
243  case LookupIterator::DATA:
244  inline_followup = it->property_details().type() == FIELD;
245  break;
247  Handle<Object> accessors = it->GetAccessors();
248  inline_followup = accessors->IsExecutableAccessorInfo();
249  if (!inline_followup) break;
250  Handle<ExecutableAccessorInfo> info =
252  inline_followup = info->getter() != NULL &&
254  isolate(), info, type());
255  }
256  }
257 
258  Register reg = Frontend(receiver(), it->name());
259  if (inline_followup) {
260  // TODO(368): Compile in the whole chain: all the interceptors in
261  // prototypes and ultimate answer.
263  } else {
265  }
266  return GetCode(kind(), Code::FAST, it->name());
267 }
static bool IsCompatibleReceiverType(Isolate *isolate, Handle< AccessorInfo > info, Handle< HeapType > type)
Definition: objects.cc:467
static Handle< T > cast(Handle< S > that)
Definition: handles.h:116
void GenerateLoadInterceptorWithFollowup(LookupIterator *it, Register holder_reg)
void GenerateLoadInterceptor(Register holder_reg)
#define UNREACHABLE()
Definition: logging.h:30

References v8::internal::ACCESSOR, v8::internal::Handle< T >::cast(), v8::internal::Code::FAST, v8::internal::FIELD, v8::internal::PropertyHandlerCompiler::Frontend(), GenerateLoadInterceptor(), GenerateLoadInterceptorWithFollowup(), v8::internal::PropertyHandlerCompiler::GetCode(), v8::internal::AccessorInfo::IsCompatibleReceiverType(), NULL, v8::internal::PropertyHandlerCompiler::type(), and UNREACHABLE.

Referenced by v8::internal::LoadIC::CompileHandler().

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

◆ CompileLoadNonexistent()

Handle< Code > v8::internal::NamedLoadHandlerCompiler::CompileLoadNonexistent ( Handle< Name name)
private

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

201  {
202  Label miss;
203  NonexistentFrontendHeader(name, &miss, scratch2(), scratch3());
204  GenerateLoadConstant(isolate()->factory()->undefined_value());
205  FrontendFooter(name, &miss);
206  return GetCode(kind(), Code::FAST, name);
207 }
virtual void FrontendFooter(Handle< Name > name, Label *miss)
void GenerateLoadConstant(Handle< Object > value)
void NonexistentFrontendHeader(Handle< Name > name, Label *miss, Register scratch1, Register scratch2)

References v8::internal::Code::FAST, FrontendFooter(), GenerateLoadConstant(), v8::internal::PropertyHandlerCompiler::GetCode(), name, and v8::internal::PropertyHandlerCompiler::NonexistentFrontendHeader().

Referenced by ComputeLoadNonexistent().

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

◆ CompileLoadViaGetter()

Handle< Code > v8::internal::NamedLoadHandlerCompiler::CompileLoadViaGetter ( Handle< Name name,
Handle< JSFunction getter 
)

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

302  {
303  Frontend(receiver(), name);
304  GenerateLoadViaGetter(masm(), type(), receiver(), getter);
305  return GetCode(kind(), Code::FAST, name);
306 }
static void GenerateLoadViaGetter(MacroAssembler *masm, Handle< HeapType > type, Register receiver, Handle< JSFunction > getter)

References v8::internal::Code::FAST, v8::internal::PropertyHandlerCompiler::Frontend(), GenerateLoadViaGetter(), v8::internal::PropertyHandlerCompiler::GetCode(), name, and v8::internal::PropertyHandlerCompiler::type().

Referenced by v8::internal::LoadIC::CompileHandler().

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

◆ ComputeLoadNonexistent()

Handle< Code > v8::internal::NamedLoadHandlerCompiler::ComputeLoadNonexistent ( Handle< Name name,
Handle< HeapType type 
)
static

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

29  {
30  Isolate* isolate = name->GetIsolate();
31  Handle<Map> receiver_map = IC::TypeToMap(*type, isolate);
32  if (receiver_map->prototype()->IsNull()) {
33  // TODO(jkummerow/verwaest): If there is no prototype and the property
34  // is nonexistent, introduce a builtin to handle this (fast properties
35  // -> return undefined, dictionary properties -> do negative lookup).
36  return Handle<Code>();
37  }
39  Handle<Map> stub_holder_map =
40  IC::GetHandlerCacheHolder(*type, false, isolate, &flag);
41 
42  // If no dictionary mode objects are present in the prototype chain, the load
43  // nonexistent IC stub can be shared for all names for a given map and we use
44  // the empty string for the map cache in that case. If there are dictionary
45  // mode objects involved, we need to do negative lookups in the stub and
46  // therefore the stub will be specific to the name.
47  Handle<Name> cache_name =
48  receiver_map->is_dictionary_map()
49  ? name
50  : Handle<Name>::cast(isolate->factory()->nonexistent_symbol());
51  Handle<Map> current_map = stub_holder_map;
52  Handle<JSObject> last(JSObject::cast(receiver_map->prototype()));
53  while (true) {
54  if (current_map->is_dictionary_map()) cache_name = name;
55  if (current_map->prototype()->IsNull()) break;
56  last = handle(JSObject::cast(current_map->prototype()));
57  current_map = handle(last->map());
58  }
59  // Compile the stub that is either shared for all names or
60  // name specific if there are global objects involved.
61  Handle<Code> handler = PropertyHandlerCompiler::Find(
62  cache_name, stub_holder_map, Code::LOAD_IC, flag, Code::FAST);
63  if (!handler.is_null()) return handler;
64 
65  NamedLoadHandlerCompiler compiler(isolate, type, last, flag);
66  handler = compiler.CompileLoadNonexistent(cache_name);
67  Map::UpdateCodeCache(stub_holder_map, cache_name, handler);
68  return handler;
69 }
static Handle< Map > GetHandlerCacheHolder(HeapType *type, bool receiver_is_holder, Isolate *isolate, CacheHolderFlag *flag)
Definition: ic-inl.h:177
static void UpdateCodeCache(Handle< Map > map, Handle< Name > name, Handle< Code > code)
Definition: objects.cc:7030
NamedLoadHandlerCompiler(Isolate *isolate, Handle< HeapType > type, Handle< JSObject > holder, CacheHolderFlag cache_holder)
static Handle< Code > Find(Handle< Name > name, Handle< Map > map, Code::Kind kind, CacheHolderFlag cache_holder, Code::StubType type)
Handle< T > handle(T *t, Isolate *isolate)
Definition: handles.h:146
kFeedbackVectorOffset flag
Definition: objects-inl.h:5418

References v8::internal::Handle< T >::cast(), CompileLoadNonexistent(), v8::internal::Isolate::factory(), v8::internal::Code::FAST, v8::internal::PropertyHandlerCompiler::Find(), v8::internal::flag, v8::internal::IC::GetHandlerCacheHolder(), v8::internal::handle(), v8::internal::Handle< T >::is_null(), name, v8::internal::PropertyHandlerCompiler::type(), v8::internal::IC::TypeToMap(), and v8::internal::Map::UpdateCodeCache().

Referenced by v8::internal::LoadIC::UpdateCaches().

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

◆ FrontendFooter()

virtual void v8::internal::NamedLoadHandlerCompiler::FrontendFooter ( Handle< Name name,
Label *  miss 
)
protectedvirtual

Reimplemented from v8::internal::PropertyHandlerCompiler.

Referenced by CompileLoadNonexistent().

+ Here is the caller graph for this function:

◆ FrontendHeader()

Register v8::internal::NamedLoadHandlerCompiler::FrontendHeader ( Register  object_reg,
Handle< Name name,
Label *  miss 
)
protectedvirtual

Reimplemented from v8::internal::PropertyHandlerCompiler.

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

92  {
94  int function_index = -1;
95  if (type()->Is(HeapType::String())) {
96  function_index = Context::STRING_FUNCTION_INDEX;
97  } else if (type()->Is(HeapType::Symbol())) {
98  function_index = Context::SYMBOL_FUNCTION_INDEX;
99  } else if (type()->Is(HeapType::Number())) {
100  function_index = Context::NUMBER_FUNCTION_INDEX;
101  } else if (type()->Is(HeapType::Boolean())) {
102  function_index = Context::BOOLEAN_FUNCTION_INDEX;
103  } else {
104  check_type = SKIP_RECEIVER;
105  }
106 
107  if (check_type == CHECK_ALL_MAPS) {
108  GenerateDirectLoadGlobalFunctionPrototype(masm(), function_index,
109  scratch1(), miss);
110  Object* function = isolate()->native_context()->get(function_index);
111  Object* prototype = JSFunction::cast(function)->instance_prototype();
112  set_type_for_object(handle(prototype, isolate()));
113  object_reg = scratch1();
114  }
115 
116  // Check that the maps starting from the prototype haven't changed.
117  return CheckPrototypes(object_reg, scratch1(), scratch2(), scratch3(), name,
118  miss, check_type);
119 }
static void GenerateDirectLoadGlobalFunctionPrototype(MacroAssembler *masm, int index, Register prototype, Label *miss)
void set_type_for_object(Handle< Object > object)
Register CheckPrototypes(Register object_reg, Register holder_reg, Register scratch1, Register scratch2, Handle< Name > name, Label *miss, PrototypeCheckType check=CHECK_ALL_MAPS)
IN DWORD64 OUT PDWORD64 OUT PIMAGEHLP_SYMBOL64 Symbol
bool Is(Object *obj)
kSerializedDataOffset Object
Definition: objects-inl.h:5322

References v8::internal::Context::BOOLEAN_FUNCTION_INDEX, v8::internal::CHECK_ALL_MAPS, v8::internal::PropertyHandlerCompiler::CheckPrototypes(), GenerateDirectLoadGlobalFunctionPrototype(), v8::internal::handle(), v8::internal::Is(), name, v8::internal::Context::NUMBER_FUNCTION_INDEX, v8::internal::PropertyHandlerCompiler::set_type_for_object(), v8::internal::SKIP_RECEIVER, v8::internal::Context::STRING_FUNCTION_INDEX, v8::internal::Context::SYMBOL_FUNCTION_INDEX, and v8::internal::PropertyHandlerCompiler::type().

+ Here is the call graph for this function:

◆ GenerateDirectLoadGlobalFunctionPrototype()

static void v8::internal::NamedLoadHandlerCompiler::GenerateDirectLoadGlobalFunctionPrototype ( MacroAssembler masm,
int  index,
Register  prototype,
Label *  miss 
)
staticprivate

Referenced by FrontendHeader().

+ Here is the caller graph for this function:

◆ GenerateLoadCallback() [1/2]

void v8::internal::NamedLoadHandlerCompiler::GenerateLoadCallback ( const CallOptimization &  call_optimization,
Handle< Map receiver_map 
)
private

◆ GenerateLoadCallback() [2/2]

void v8::internal::NamedLoadHandlerCompiler::GenerateLoadCallback ( Register  reg,
Handle< ExecutableAccessorInfo callback 
)
private

Referenced by CompileLoadCallback(), and GenerateLoadPostInterceptor().

+ Here is the caller graph for this function:

◆ GenerateLoadConstant()

void v8::internal::NamedLoadHandlerCompiler::GenerateLoadConstant ( Handle< Object value)
private

Referenced by CompileLoadNonexistent().

+ Here is the caller graph for this function:

◆ GenerateLoadFunctionPrototype()

static void v8::internal::NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype ( MacroAssembler masm,
Register  receiver,
Register  scratch1,
Register  scratch2,
Label *  miss_label 
)
static

◆ GenerateLoadInterceptor()

void v8::internal::NamedLoadHandlerCompiler::GenerateLoadInterceptor ( Register  holder_reg)
private

Referenced by CompileLoadInterceptor().

+ Here is the caller graph for this function:

◆ GenerateLoadInterceptorWithFollowup()

void v8::internal::NamedLoadHandlerCompiler::GenerateLoadInterceptorWithFollowup ( LookupIterator *  it,
Register  holder_reg 
)
private

Referenced by CompileLoadInterceptor().

+ Here is the caller graph for this function:

◆ GenerateLoadPostInterceptor()

void v8::internal::NamedLoadHandlerCompiler::GenerateLoadPostInterceptor ( LookupIterator *  it,
Register  reg 
)
private

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

271  {
272  Handle<JSObject> real_named_property_holder(it->GetHolder<JSObject>());
273 
275  set_holder(real_named_property_holder);
276  Register reg = Frontend(interceptor_reg, it->name());
277 
278  switch (it->state()) {
279  case LookupIterator::ACCESS_CHECK:
280  case LookupIterator::INTERCEPTOR:
281  case LookupIterator::JSPROXY:
282  case LookupIterator::NOT_FOUND:
283  case LookupIterator::TRANSITION:
284  UNREACHABLE();
285  case LookupIterator::DATA: {
286  DCHECK_EQ(FIELD, it->property_details().type());
287  __ Move(receiver(), reg);
288  LoadFieldStub stub(isolate(), it->GetFieldIndex());
289  GenerateTailCall(masm(), stub.GetCode());
290  break;
291  }
293  Handle<ExecutableAccessorInfo> info =
294  Handle<ExecutableAccessorInfo>::cast(it->GetAccessors());
295  DCHECK_NE(NULL, info->getter());
296  GenerateLoadCallback(reg, info);
297  }
298 }
void set_holder(Handle< JSObject > holder)
#define DCHECK_NE(v1, v2)
Definition: logging.h:207
#define DCHECK_EQ(v1, v2)
Definition: logging.h:206

References __, v8::internal::ACCESSOR, v8::internal::Handle< T >::cast(), DCHECK_EQ, DCHECK_NE, v8::internal::FIELD, v8::internal::PropertyHandlerCompiler::Frontend(), GenerateLoadCallback(), v8::internal::PropertyHandlerCompiler::holder(), NULL, v8::internal::PropertyHandlerCompiler::set_holder(), v8::internal::PropertyHandlerCompiler::set_type_for_object(), and UNREACHABLE.

+ Here is the call graph for this function:

◆ GenerateLoadViaGetter()

static void v8::internal::NamedLoadHandlerCompiler::GenerateLoadViaGetter ( MacroAssembler masm,
Handle< HeapType type,
Register  receiver,
Handle< JSFunction getter 
)
static

Referenced by CompileLoadViaGetter(), and GenerateLoadViaGetterForDeopt().

+ Here is the caller graph for this function:

◆ GenerateLoadViaGetterForDeopt()

static void v8::internal::NamedLoadHandlerCompiler::GenerateLoadViaGetterForDeopt ( MacroAssembler masm)
inlinestatic

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

139  {
141  Handle<JSFunction>());
142  }
static Handle< T > null()
Definition: handles.h:123
const Register no_reg

References GenerateLoadViaGetter(), and v8::internal::no_reg.

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

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

◆ scratch4()

Register v8::internal::NamedLoadHandlerCompiler::scratch4 ( )
inlineprivate

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

190 { return registers_[5]; }

Member Data Documentation

◆ kInterceptorArgsHolderIndex

const int v8::internal::NamedLoadHandlerCompiler::kInterceptorArgsHolderIndex = 3
static

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

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

◆ kInterceptorArgsInfoIndex

const int v8::internal::NamedLoadHandlerCompiler::kInterceptorArgsInfoIndex = 1
static

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

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

◆ kInterceptorArgsLength

const int v8::internal::NamedLoadHandlerCompiler::kInterceptorArgsLength = 4
static

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

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

◆ kInterceptorArgsNameIndex

const int v8::internal::NamedLoadHandlerCompiler::kInterceptorArgsNameIndex = 0
static

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

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

◆ kInterceptorArgsThisIndex

const int v8::internal::NamedLoadHandlerCompiler::kInterceptorArgsThisIndex = 2
static

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

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


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