40 void MaybeObject::Verify() {
42 if (ToObject(&this_as_object)) {
43 if (this_as_object->IsSmi()) {
54 void Object::VerifyPointer(
Object* p) {
55 if (p->IsHeapObject()) {
56 HeapObject::VerifyHeapPointer(p);
63 void Smi::SmiVerify() {
68 void Failure::FailureVerify() {
73 void HeapObject::HeapObjectVerify() {
81 switch (instance_type) {
114 ExternalUnsignedShortArrayVerify();
195 #define MAKE_STRUCT_CASE(NAME, Name, name) \
197 Name::cast(this)->Name##Verify(); \
200 #undef MAKE_STRUCT_CASE
209 void HeapObject::VerifyHeapPointer(
Object* p) {
210 CHECK(p->IsHeapObject());
215 void HeapNumber::HeapNumberVerify() {
216 CHECK(IsHeapNumber());
220 void ByteArray::ByteArrayVerify() {
221 CHECK(IsByteArray());
225 void FreeSpace::FreeSpaceVerify() {
226 CHECK(IsFreeSpace());
230 void ExternalPixelArray::ExternalPixelArrayVerify() {
231 CHECK(IsExternalPixelArray());
235 void ExternalByteArray::ExternalByteArrayVerify() {
236 CHECK(IsExternalByteArray());
240 void ExternalUnsignedByteArray::ExternalUnsignedByteArrayVerify() {
241 CHECK(IsExternalUnsignedByteArray());
245 void ExternalShortArray::ExternalShortArrayVerify() {
246 CHECK(IsExternalShortArray());
250 void ExternalUnsignedShortArray::ExternalUnsignedShortArrayVerify() {
251 CHECK(IsExternalUnsignedShortArray());
255 void ExternalIntArray::ExternalIntArrayVerify() {
256 CHECK(IsExternalIntArray());
260 void ExternalUnsignedIntArray::ExternalUnsignedIntArrayVerify() {
261 CHECK(IsExternalUnsignedIntArray());
265 void ExternalFloatArray::ExternalFloatArrayVerify() {
266 CHECK(IsExternalFloatArray());
270 void ExternalDoubleArray::ExternalDoubleArrayVerify() {
271 CHECK(IsExternalDoubleArray());
275 void JSObject::JSObjectVerify() {
276 VerifyHeapPointer(properties());
277 VerifyHeapPointer(elements());
280 CHECK(this->elements()->IsFixedArray());
281 CHECK_GE(this->elements()->length(), 2);
286 (
map()->inobject_properties() + properties()->length() -
287 map()->NextFreePropertyIndex()));
289 CHECK_EQ((
map()->has_fast_smi_or_object_elements() ||
290 (elements() ==
GetHeap()->empty_fixed_array())),
291 (elements()->
map() ==
GetHeap()->fixed_array_map() ||
292 elements()->
map() ==
GetHeap()->fixed_cow_array_map()));
297 void Map::MapVerify() {
303 VerifyHeapPointer(prototype());
304 VerifyHeapPointer(instance_descriptors());
305 DescriptorArray* descriptors = instance_descriptors();
307 CHECK_EQ(i, descriptors->GetDetails(i).descriptor_index() - 1);
309 SLOW_ASSERT(instance_descriptors()->IsSortedNoDuplicates());
311 SLOW_ASSERT(transitions()->IsSortedNoDuplicates());
312 SLOW_ASSERT(transitions()->IsConsistentWithBackPointers(
this));
317 void Map::SharedMapVerify() {
320 CHECK(instance_descriptors()->IsEmpty());
328 void CodeCache::CodeCacheVerify() {
329 VerifyHeapPointer(default_cache());
330 VerifyHeapPointer(normal_type_cache());
331 CHECK(default_cache()->IsFixedArray());
332 CHECK(normal_type_cache()->IsUndefined()
333 || normal_type_cache()->IsCodeCacheHashTable());
337 void PolymorphicCodeCache::PolymorphicCodeCacheVerify() {
338 VerifyHeapPointer(cache());
339 CHECK(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable());
343 void TypeFeedbackInfo::TypeFeedbackInfoVerify() {
346 VerifyHeapPointer(type_feedback_cells());
350 void AliasedArgumentsEntry::AliasedArgumentsEntryVerify() {
355 void FixedArray::FixedArrayVerify() {
356 for (
int i = 0; i <
length(); i++) {
358 if (e->IsHeapObject()) {
359 VerifyHeapPointer(e);
367 void FixedDoubleArray::FixedDoubleArrayVerify() {
368 for (
int i = 0; i <
length(); i++) {
372 (BitCast<uint64_t>(value) ==
380 void JSModule::JSModuleVerify() {
383 CHECK(context()->IsUndefined() ||
388 void JSValue::JSValueVerify() {
390 if (v->IsHeapObject()) {
391 VerifyHeapPointer(v);
396 void JSDate::JSDateVerify() {
397 if (value()->IsHeapObject()) {
398 VerifyHeapPointer(value());
400 CHECK(value()->IsUndefined() || value()->IsSmi() || value()->IsHeapNumber());
401 CHECK(year()->IsUndefined() || year()->IsSmi() || year()->
IsNaN());
402 CHECK(month()->IsUndefined() || month()->IsSmi() || month()->
IsNaN());
403 CHECK(day()->IsUndefined() || day()->IsSmi() || day()->
IsNaN());
404 CHECK(weekday()->IsUndefined() || weekday()->IsSmi() || weekday()->
IsNaN());
405 CHECK(hour()->IsUndefined() || hour()->IsSmi() || hour()->
IsNaN());
406 CHECK(min()->IsUndefined() || min()->IsSmi() || min()->
IsNaN());
407 CHECK(sec()->IsUndefined() || sec()->IsSmi() || sec()->
IsNaN());
408 CHECK(cache_stamp()->IsUndefined() ||
409 cache_stamp()->IsSmi() ||
410 cache_stamp()->
IsNaN());
412 if (month()->IsSmi()) {
414 CHECK(0 <= month && month <= 11);
416 if (day()->IsSmi()) {
418 CHECK(1 <= day && day <= 31);
420 if (hour()->IsSmi()) {
422 CHECK(0 <= hour && hour <= 23);
424 if (min()->IsSmi()) {
426 CHECK(0 <= min && min <= 59);
428 if (sec()->IsSmi()) {
430 CHECK(0 <= sec && sec <= 59);
432 if (weekday()->IsSmi()) {
434 CHECK(0 <= weekday && weekday <= 6);
436 if (cache_stamp()->IsSmi()) {
438 Smi::cast(Isolate::Current()->date_cache()->stamp())->value());
443 void JSMessageObject::JSMessageObjectVerify() {
444 CHECK(IsJSMessageObject());
445 CHECK(type()->IsString());
446 CHECK(arguments()->IsJSArray());
456 void String::StringVerify() {
462 if (IsConsString()) {
464 }
else if (IsSlicedString()) {
466 }
else if (IsSeqAsciiString()) {
472 void SeqAsciiString::SeqAsciiStringVerify() {
477 void ConsString::ConsStringVerify() {
480 this->
second()->IsString());
485 CHECK(this->
first()->IsSeqString() || this->
first()->IsExternalString());
490 void SlicedString::SlicedStringVerify() {
497 void JSFunction::JSFunctionVerify() {
498 CHECK(IsJSFunction());
502 CHECK(next_function_link()->IsUndefined() ||
503 next_function_link()->IsJSFunction());
507 void SharedFunctionInfo::SharedFunctionInfoVerify() {
508 CHECK(IsSharedFunctionInfo());
520 void JSGlobalProxy::JSGlobalProxyVerify() {
521 CHECK(IsJSGlobalProxy());
525 CHECK_EQ(0, properties()->length());
531 void JSGlobalObject::JSGlobalObjectVerify() {
532 CHECK(IsJSGlobalObject());
537 VerifyObjectField(i);
542 void JSBuiltinsObject::JSBuiltinsObjectVerify() {
543 CHECK(IsJSBuiltinsObject());
548 VerifyObjectField(i);
553 void Oddball::OddballVerify() {
555 VerifyHeapPointer(to_string());
556 Object* number = to_number();
557 if (number->IsHeapObject()) {
560 CHECK(number->IsSmi());
563 const int kLeastHiddenOddballNumber = -4;
565 CHECK(value >= kLeastHiddenOddballNumber);
570 void JSGlobalPropertyCell::JSGlobalPropertyCellVerify() {
571 CHECK(IsJSGlobalPropertyCell());
576 void Code::CodeVerify() {
579 relocation_info()->Verify();
581 for (RelocIterator it(
this); !it.done(); it.next()) {
582 it.rinfo()->Verify();
584 if (RelocInfo::IsGCRelocMode(it.rinfo()->rmode())) {
585 CHECK(it.rinfo()->pc() != last_gc_pc);
586 last_gc_pc = it.rinfo()->pc();
592 void JSArray::JSArrayVerify() {
594 CHECK(length()->IsNumber() || length()->IsUndefined());
595 CHECK(elements()->IsUndefined() ||
596 elements()->IsFixedArray() ||
597 elements()->IsFixedDoubleArray());
601 void JSSet::JSSetVerify() {
604 VerifyHeapPointer(table());
605 CHECK(table()->IsHashTable() || table()->IsUndefined());
609 void JSMap::JSMapVerify() {
612 VerifyHeapPointer(table());
613 CHECK(table()->IsHashTable() || table()->IsUndefined());
617 void JSWeakMap::JSWeakMapVerify() {
618 CHECK(IsJSWeakMap());
620 VerifyHeapPointer(table());
621 CHECK(table()->IsHashTable() || table()->IsUndefined());
625 void JSRegExp::JSRegExpVerify() {
627 CHECK(data()->IsUndefined() || data()->IsFixedArray());
642 CHECK(ascii_data->IsSmi() ||
643 (is_native ? ascii_data->IsCode() : ascii_data->IsByteArray()));
645 CHECK(uc16_data->IsSmi() ||
646 (is_native ? uc16_data->IsCode() : uc16_data->IsByteArray()));
649 CHECK(ascii_saved->IsSmi() || ascii_saved->IsString() ||
650 ascii_saved->IsCode());
652 CHECK(uc16_saved->IsSmi() || uc16_saved->IsString() ||
653 uc16_saved->IsCode());
661 CHECK(data()->IsUndefined());
667 void JSProxy::JSProxyVerify() {
669 VerifyPointer(handler());
670 CHECK(hash()->IsSmi() || hash()->IsUndefined());
674 void JSFunctionProxy::JSFunctionProxyVerify() {
675 CHECK(IsJSFunctionProxy());
677 VerifyPointer(call_trap());
678 VerifyPointer(construct_trap());
682 void Foreign::ForeignVerify() {
687 void AccessorInfo::AccessorInfoVerify() {
688 CHECK(IsAccessorInfo());
689 VerifyPointer(getter());
690 VerifyPointer(setter());
691 VerifyPointer(name());
692 VerifyPointer(data());
693 VerifyPointer(
flag());
694 VerifyPointer(expected_receiver_type());
698 void AccessorPair::AccessorPairVerify() {
699 CHECK(IsAccessorPair());
700 VerifyPointer(getter());
701 VerifyPointer(setter());
705 void AccessCheckInfo::AccessCheckInfoVerify() {
706 CHECK(IsAccessCheckInfo());
707 VerifyPointer(named_callback());
708 VerifyPointer(indexed_callback());
709 VerifyPointer(data());
713 void InterceptorInfo::InterceptorInfoVerify() {
714 CHECK(IsInterceptorInfo());
715 VerifyPointer(getter());
716 VerifyPointer(setter());
717 VerifyPointer(query());
718 VerifyPointer(deleter());
719 VerifyPointer(enumerator());
720 VerifyPointer(data());
724 void CallHandlerInfo::CallHandlerInfoVerify() {
725 CHECK(IsCallHandlerInfo());
726 VerifyPointer(callback());
727 VerifyPointer(data());
731 void TemplateInfo::TemplateInfoVerify() {
732 VerifyPointer(tag());
733 VerifyPointer(property_list());
736 void FunctionTemplateInfo::FunctionTemplateInfoVerify() {
737 CHECK(IsFunctionTemplateInfo());
738 TemplateInfoVerify();
739 VerifyPointer(serial_number());
740 VerifyPointer(call_code());
742 VerifyPointer(prototype_template());
743 VerifyPointer(parent_template());
745 VerifyPointer(indexed_property_handler());
747 VerifyPointer(signature());
752 void ObjectTemplateInfo::ObjectTemplateInfoVerify() {
753 CHECK(IsObjectTemplateInfo());
754 TemplateInfoVerify();
755 VerifyPointer(constructor());
756 VerifyPointer(internal_field_count());
760 void SignatureInfo::SignatureInfoVerify() {
761 CHECK(IsSignatureInfo());
762 VerifyPointer(receiver());
763 VerifyPointer(args());
767 void TypeSwitchInfo::TypeSwitchInfoVerify() {
768 CHECK(IsTypeSwitchInfo());
769 VerifyPointer(types());
773 void Script::ScriptVerify() {
775 VerifyPointer(source());
776 VerifyPointer(name());
777 line_offset()->SmiVerify();
778 column_offset()->SmiVerify();
779 VerifyPointer(data());
780 VerifyPointer(wrapper());
782 VerifyPointer(line_ends());
787 void JSFunctionResultCache::JSFunctionResultCacheVerify() {
802 CHECK(!
get(i)->IsTheHole());
805 for (
int i = size; i <
length(); i++) {
806 CHECK(
get(i)->IsTheHole());
813 void NormalizedMapCache::NormalizedMapCacheVerify() {
816 for (
int i = 0; i <
length(); i++) {
821 CHECK(e->IsUndefined());
828 #ifdef ENABLE_DEBUGGER_SUPPORT
829 void DebugInfo::DebugInfoVerify() {
830 CHECK(IsDebugInfo());
831 VerifyPointer(shared());
832 VerifyPointer(original_code());
833 VerifyPointer(
code());
834 VerifyPointer(break_points());
838 void BreakPointInfo::BreakPointInfoVerify() {
839 CHECK(IsBreakPointInfo());
840 code_position()->SmiVerify();
841 source_position()->SmiVerify();
842 statement_position()->SmiVerify();
843 VerifyPointer(break_point_objects());
845 #endif // ENABLE_DEBUGGER_SUPPORT
846 #endif // VERIFY_HEAP
850 void JSObject::IncrementSpillStatistics(SpillInformation* info) {
851 info->number_of_objects_++;
854 info->number_of_objects_with_fast_properties_++;
859 info->number_of_slow_used_properties_ += dict->NumberOfElements();
860 info->number_of_slow_unused_properties_ +=
861 dict->Capacity() - dict->NumberOfElements();
871 info->number_of_objects_with_fast_elements_++;
874 int len = e->length();
876 for (
int i = 0; i < len; i++) {
877 if (e->get(i) == heap->the_hole_value()) holes++;
879 info->number_of_fast_used_elements_ += len - holes;
880 info->number_of_fast_unused_elements_ += holes;
892 info->number_of_objects_with_fast_elements_++;
894 info->number_of_fast_used_elements_ += e->length();
899 info->number_of_slow_used_elements_ += dict->NumberOfElements();
900 info->number_of_slow_unused_elements_ +=
901 dict->Capacity() - dict->NumberOfElements();
910 void JSObject::SpillInformation::Clear() {
911 number_of_objects_ = 0;
912 number_of_objects_with_fast_properties_ = 0;
913 number_of_objects_with_fast_elements_ = 0;
914 number_of_fast_used_fields_ = 0;
915 number_of_fast_unused_fields_ = 0;
916 number_of_slow_used_properties_ = 0;
917 number_of_slow_unused_properties_ = 0;
918 number_of_fast_used_elements_ = 0;
919 number_of_fast_unused_elements_ = 0;
920 number_of_slow_used_elements_ = 0;
921 number_of_slow_unused_elements_ = 0;
925 PrintF(
"\n JSObject Spill Statistics (#%d):\n", number_of_objects_);
927 PrintF(
" - fast properties (#%d): %d (used) %d (unused)\n",
928 number_of_objects_with_fast_properties_,
929 number_of_fast_used_fields_, number_of_fast_unused_fields_);
931 PrintF(
" - slow properties (#%d): %d (used) %d (unused)\n",
932 number_of_objects_ - number_of_objects_with_fast_properties_,
933 number_of_slow_used_properties_, number_of_slow_unused_properties_);
935 PrintF(
" - fast elements (#%d): %d (used) %d (unused)\n",
936 number_of_objects_with_fast_elements_,
937 number_of_fast_used_elements_, number_of_fast_unused_elements_);
939 PrintF(
" - slow elements (#%d): %d (used) %d (unused)\n",
940 number_of_objects_ - number_of_objects_with_fast_elements_,
941 number_of_slow_used_elements_, number_of_slow_unused_elements_);
947 bool DescriptorArray::IsSortedNoDuplicates(
int valid_entries) {
949 String* current_key =
NULL;
950 uint32_t current = 0;
953 if (key == current_key) {
959 if (hash < current) {
969 bool TransitionArray::IsSortedNoDuplicates(
int valid_entries) {
970 ASSERT(valid_entries == -1);
971 String* current_key =
NULL;
972 uint32_t current = 0;
975 if (key == current_key) {
981 if (hash < current) {
991 static bool CheckOneBackPointer(Map* current_map,
Object* target) {
996 bool TransitionArray::IsConsistentWithBackPointers(Map* current_map) {
1002 if (!CheckOneBackPointer(current_map,
GetTarget(i)))
return false;
static const int kStartPositionOffset
bool FLAG_enable_slow_asserts
static const int kArgumentsOffset
static const int kScopeInfoOffset
Map * elements_transition()
#define SLOW_ASSERT(condition)
static const int kCodeOffset
#define CHECK_EQ(expected, value)
static const int kIrregexpMaxRegisterCountIndex
static const int kPrototypeOrInitialMapOffset
static const int kCacheSizeIndex
static const int kBuiltinsOffset
void PrintF(const char *format,...)
static String * cast(Object *obj)
int unused_property_fields()
static const int kStorage2Offset
int NumberOfOwnDescriptors()
static const int kOptimizedCodeMapOffset
static HeapObject * cast(Object *obj)
static JSBuiltinsObject * cast(Object *obj)
const int kVariableSizeSentinel
static JSSet * cast(Object *obj)
SeededNumberDictionary * element_dictionary()
static Map * cast(Object *obj)
static ByteArray * cast(Object *obj)
static FreeSpace * cast(Object *obj)
static Foreign * cast(Object *obj)
static const int kContextOffset
static const int kIrregexpASCIICodeIndex
#define ASSERT(condition)
static const int kIrregexpUC16CodeIndex
v8::Handle< v8::Value > Print(const v8::Arguments &args)
static const int kIrregexpASCIICodeSavedIndex
static ExternalUnsignedShortArray * cast(Object *obj)
static const int kDebugInfoOffset
static JSRegExp * cast(Object *obj)
static const int kNativeContextOffset
static Context * cast(Object *context)
const intptr_t kCodeAlignment
kPropertyAccessorsOffset kNamedPropertyHandlerOffset instance_template
static SharedFunctionInfo * cast(Object *obj)
static const int kInstanceClassNameOffset
static Code * cast(Object *obj)
static Smi * cast(Object *object)
static bool IsAscii(const char *chars, int length)
static ExternalShortArray * cast(Object *obj)
static const int kMinLength
static JSFunctionProxy * cast(Object *obj)
static const int kIrregexpUC16CodeSavedIndex
static JSGlobalProxy * cast(Object *obj)
static const int kFactoryIndex
static const uint64_t kSignMask
static const int kAliasedContextSlot
static const int kStackFramesOffset
static SlicedString * cast(Object *obj)
static ExternalIntArray * cast(Object *obj)
int pre_allocated_property_fields()
static const int kScopeInfoOffset
static Failure * cast(MaybeObject *object)
ElementsKind GetElementsKind()
byte * instruction_start()
static Oddball * cast(Object *obj)
bool IsAligned(T value, U alignment)
static SeqAsciiString * cast(Object *obj)
static ExternalUnsignedByteArray * cast(Object *obj)
static const int kNameOffset
kPropertyAccessorsOffset named_property_handler
static const int kStorage1Offset
static FixedDoubleArray * cast(Object *obj)
static ExternalPixelArray * cast(Object *obj)
int number_of_transitions()
static const int kMinLength
static const int kNextFunctionLinkOffset
static const int kIrregexpCaptureCountIndex
static JSMap * cast(Object *obj)
double get_scalar(int index)
static JSMessageObject * cast(Object *obj)
static const int kEndPositionOffset
static JSArray * cast(Object *obj)
static JSDate * cast(Object *obj)
bool HasTransitionArray()
static ExternalDoubleArray * cast(Object *obj)
static ExternalFloatArray * cast(Object *obj)
static const int kFunctionDataOffset
static HeapNumber * cast(Object *obj)
bool HasElementsTransition()
bool is_the_hole(int index)
static const int kAtomPatternIndex
Map * GetTarget(int transition_number)
static bool UsesNativeRegExp()
static JSGlobalPropertyCell * cast(Object *obj)
Object * GetBackPointer()
static const int kEntriesIndex
static JSValue * cast(Object *obj)
int number_of_descriptors()
static JSWeakMap * cast(Object *obj)
static const int kStackTraceOffset
bool HasFastObjectElements()
InstanceType instance_type()
static JSProxy * cast(Object *obj)
static double canonical_not_the_hole_nan_as_double()
static FixedArray * cast(Object *obj)
static const int kScriptOffset
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of MIPS FPU instructions if NULL
static VisitorId GetVisitorId(int instance_type, int instance_size)
static const int kFingerIndex
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
String * GetSortedKey(int transition_number)
static const int kEntrySize
static ExternalByteArray * cast(Object *obj)
static const int kScriptOffset
String * GetSortedKey(int descriptor_number)
static ConsString * cast(Object *obj)
static JSModule * cast(Object *obj)
static const int kMaxValue
int NextFreePropertyIndex()
static ExternalUnsignedIntArray * cast(Object *obj)
StringDictionary * property_dictionary()
static const int kValueOffset
static JSObject * cast(Object *obj)
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset access_check_info
#define MAKE_STRUCT_CASE(NAME, Name, name)
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset kAccessCheckInfoOffset kEvalFrominstructionsOffsetOffset kInstanceClassNameOffset flag
static JSGlobalObject * cast(Object *obj)
static JSFunction * cast(Object *obj)