Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(307)

Side by Side Diff: src/objects.h

Issue 15094018: Create AllocationSite objects, pointed to by AllocationSiteInfo. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Some cleanup Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 V(EXECUTABLE_ACCESSOR_INFO_TYPE) \ 374 V(EXECUTABLE_ACCESSOR_INFO_TYPE) \
375 V(ACCESSOR_PAIR_TYPE) \ 375 V(ACCESSOR_PAIR_TYPE) \
376 V(ACCESS_CHECK_INFO_TYPE) \ 376 V(ACCESS_CHECK_INFO_TYPE) \
377 V(INTERCEPTOR_INFO_TYPE) \ 377 V(INTERCEPTOR_INFO_TYPE) \
378 V(CALL_HANDLER_INFO_TYPE) \ 378 V(CALL_HANDLER_INFO_TYPE) \
379 V(FUNCTION_TEMPLATE_INFO_TYPE) \ 379 V(FUNCTION_TEMPLATE_INFO_TYPE) \
380 V(OBJECT_TEMPLATE_INFO_TYPE) \ 380 V(OBJECT_TEMPLATE_INFO_TYPE) \
381 V(SIGNATURE_INFO_TYPE) \ 381 V(SIGNATURE_INFO_TYPE) \
382 V(TYPE_SWITCH_INFO_TYPE) \ 382 V(TYPE_SWITCH_INFO_TYPE) \
383 V(ALLOCATION_SITE_INFO_TYPE) \ 383 V(ALLOCATION_SITE_INFO_TYPE) \
384 V(ALLOCATION_SITE_TYPE) \
384 V(SCRIPT_TYPE) \ 385 V(SCRIPT_TYPE) \
385 V(CODE_CACHE_TYPE) \ 386 V(CODE_CACHE_TYPE) \
386 V(POLYMORPHIC_CODE_CACHE_TYPE) \ 387 V(POLYMORPHIC_CODE_CACHE_TYPE) \
387 V(TYPE_FEEDBACK_INFO_TYPE) \ 388 V(TYPE_FEEDBACK_INFO_TYPE) \
388 V(ALIASED_ARGUMENTS_ENTRY_TYPE) \ 389 V(ALIASED_ARGUMENTS_ENTRY_TYPE) \
389 \ 390 \
390 V(FIXED_ARRAY_TYPE) \ 391 V(FIXED_ARRAY_TYPE) \
391 V(FIXED_DOUBLE_ARRAY_TYPE) \ 392 V(FIXED_DOUBLE_ARRAY_TYPE) \
392 V(SHARED_FUNCTION_INFO_TYPE) \ 393 V(SHARED_FUNCTION_INFO_TYPE) \
393 \ 394 \
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 V(EXECUTABLE_ACCESSOR_INFO, ExecutableAccessorInfo, executable_accessor_info)\ 537 V(EXECUTABLE_ACCESSOR_INFO, ExecutableAccessorInfo, executable_accessor_info)\
537 V(ACCESSOR_PAIR, AccessorPair, accessor_pair) \ 538 V(ACCESSOR_PAIR, AccessorPair, accessor_pair) \
538 V(ACCESS_CHECK_INFO, AccessCheckInfo, access_check_info) \ 539 V(ACCESS_CHECK_INFO, AccessCheckInfo, access_check_info) \
539 V(INTERCEPTOR_INFO, InterceptorInfo, interceptor_info) \ 540 V(INTERCEPTOR_INFO, InterceptorInfo, interceptor_info) \
540 V(CALL_HANDLER_INFO, CallHandlerInfo, call_handler_info) \ 541 V(CALL_HANDLER_INFO, CallHandlerInfo, call_handler_info) \
541 V(FUNCTION_TEMPLATE_INFO, FunctionTemplateInfo, function_template_info) \ 542 V(FUNCTION_TEMPLATE_INFO, FunctionTemplateInfo, function_template_info) \
542 V(OBJECT_TEMPLATE_INFO, ObjectTemplateInfo, object_template_info) \ 543 V(OBJECT_TEMPLATE_INFO, ObjectTemplateInfo, object_template_info) \
543 V(SIGNATURE_INFO, SignatureInfo, signature_info) \ 544 V(SIGNATURE_INFO, SignatureInfo, signature_info) \
544 V(TYPE_SWITCH_INFO, TypeSwitchInfo, type_switch_info) \ 545 V(TYPE_SWITCH_INFO, TypeSwitchInfo, type_switch_info) \
545 V(SCRIPT, Script, script) \ 546 V(SCRIPT, Script, script) \
547 V(ALLOCATION_SITE, AllocationSite, allocation_site) \
546 V(ALLOCATION_SITE_INFO, AllocationSiteInfo, allocation_site_info) \ 548 V(ALLOCATION_SITE_INFO, AllocationSiteInfo, allocation_site_info) \
547 V(CODE_CACHE, CodeCache, code_cache) \ 549 V(CODE_CACHE, CodeCache, code_cache) \
548 V(POLYMORPHIC_CODE_CACHE, PolymorphicCodeCache, polymorphic_code_cache) \ 550 V(POLYMORPHIC_CODE_CACHE, PolymorphicCodeCache, polymorphic_code_cache) \
549 V(TYPE_FEEDBACK_INFO, TypeFeedbackInfo, type_feedback_info) \ 551 V(TYPE_FEEDBACK_INFO, TypeFeedbackInfo, type_feedback_info) \
550 V(ALIASED_ARGUMENTS_ENTRY, AliasedArgumentsEntry, aliased_arguments_entry) 552 V(ALIASED_ARGUMENTS_ENTRY, AliasedArgumentsEntry, aliased_arguments_entry)
551 553
552 #ifdef ENABLE_DEBUGGER_SUPPORT 554 #ifdef ENABLE_DEBUGGER_SUPPORT
553 #define STRUCT_LIST_DEBUGGER(V) \ 555 #define STRUCT_LIST_DEBUGGER(V) \
554 V(DEBUG_INFO, DebugInfo, debug_info) \ 556 V(DEBUG_INFO, DebugInfo, debug_info) \
555 V(BREAK_POINT_INFO, BreakPointInfo, break_point_info) 557 V(BREAK_POINT_INFO, BreakPointInfo, break_point_info)
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 DECLARED_ACCESSOR_INFO_TYPE, 697 DECLARED_ACCESSOR_INFO_TYPE,
696 EXECUTABLE_ACCESSOR_INFO_TYPE, 698 EXECUTABLE_ACCESSOR_INFO_TYPE,
697 ACCESSOR_PAIR_TYPE, 699 ACCESSOR_PAIR_TYPE,
698 ACCESS_CHECK_INFO_TYPE, 700 ACCESS_CHECK_INFO_TYPE,
699 INTERCEPTOR_INFO_TYPE, 701 INTERCEPTOR_INFO_TYPE,
700 CALL_HANDLER_INFO_TYPE, 702 CALL_HANDLER_INFO_TYPE,
701 FUNCTION_TEMPLATE_INFO_TYPE, 703 FUNCTION_TEMPLATE_INFO_TYPE,
702 OBJECT_TEMPLATE_INFO_TYPE, 704 OBJECT_TEMPLATE_INFO_TYPE,
703 SIGNATURE_INFO_TYPE, 705 SIGNATURE_INFO_TYPE,
704 TYPE_SWITCH_INFO_TYPE, 706 TYPE_SWITCH_INFO_TYPE,
707 ALLOCATION_SITE_TYPE,
705 ALLOCATION_SITE_INFO_TYPE, 708 ALLOCATION_SITE_INFO_TYPE,
706 SCRIPT_TYPE, 709 SCRIPT_TYPE,
707 CODE_CACHE_TYPE, 710 CODE_CACHE_TYPE,
708 POLYMORPHIC_CODE_CACHE_TYPE, 711 POLYMORPHIC_CODE_CACHE_TYPE,
709 TYPE_FEEDBACK_INFO_TYPE, 712 TYPE_FEEDBACK_INFO_TYPE,
710 ALIASED_ARGUMENTS_ENTRY_TYPE, 713 ALIASED_ARGUMENTS_ENTRY_TYPE,
711 // The following two instance types are only used when ENABLE_DEBUGGER_SUPPORT 714 // The following two instance types are only used when ENABLE_DEBUGGER_SUPPORT
712 // is defined. However as include/v8.h contain some of the instance type 715 // is defined. However as include/v8.h contain some of the instance type
713 // constants always having them avoids them getting different numbers 716 // constants always having them avoids them getting different numbers
714 // depending on whether ENABLE_DEBUGGER_SUPPORT is defined or not. 717 // depending on whether ENABLE_DEBUGGER_SUPPORT is defined or not.
(...skipping 1484 matching lines...) Expand 10 before | Expand all | Expand 10 after
2199 inline MUST_USE_RESULT MaybeObject* GetElementsTransitionMap( 2202 inline MUST_USE_RESULT MaybeObject* GetElementsTransitionMap(
2200 Isolate* isolate, 2203 Isolate* isolate,
2201 ElementsKind elements_kind); 2204 ElementsKind elements_kind);
2202 MUST_USE_RESULT MaybeObject* GetElementsTransitionMapSlow( 2205 MUST_USE_RESULT MaybeObject* GetElementsTransitionMapSlow(
2203 ElementsKind elements_kind); 2206 ElementsKind elements_kind);
2204 2207
2205 static Handle<Object> TransitionElementsKind(Handle<JSObject> object, 2208 static Handle<Object> TransitionElementsKind(Handle<JSObject> object,
2206 ElementsKind to_kind); 2209 ElementsKind to_kind);
2207 2210
2208 MUST_USE_RESULT MaybeObject* TransitionElementsKind(ElementsKind to_kind); 2211 MUST_USE_RESULT MaybeObject* TransitionElementsKind(ElementsKind to_kind);
2209 MUST_USE_RESULT MaybeObject* UpdateAllocationSiteInfo( 2212 MUST_USE_RESULT MaybeObject* UpdateAllocationSite(ElementsKind to_kind);
2210 ElementsKind to_kind);
2211 2213
2212 // Replaces an existing transition with a transition to a map with a FIELD. 2214 // Replaces an existing transition with a transition to a map with a FIELD.
2213 MUST_USE_RESULT MaybeObject* ConvertTransitionToMapTransition( 2215 MUST_USE_RESULT MaybeObject* ConvertTransitionToMapTransition(
2214 int transition_index, 2216 int transition_index,
2215 Name* name, 2217 Name* name,
2216 Object* new_value, 2218 Object* new_value,
2217 PropertyAttributes attributes); 2219 PropertyAttributes attributes);
2218 2220
2219 // Converts a descriptor of any other type to a real field, backed by the 2221 // Converts a descriptor of any other type to a real field, backed by the
2220 // properties array. 2222 // properties array.
(...skipping 5227 matching lines...) Expand 10 before | Expand all | Expand 10 after
7448 }; 7450 };
7449 7451
7450 7452
7451 enum AllocationSiteMode { 7453 enum AllocationSiteMode {
7452 DONT_TRACK_ALLOCATION_SITE, 7454 DONT_TRACK_ALLOCATION_SITE,
7453 TRACK_ALLOCATION_SITE, 7455 TRACK_ALLOCATION_SITE,
7454 LAST_ALLOCATION_SITE_MODE = TRACK_ALLOCATION_SITE 7456 LAST_ALLOCATION_SITE_MODE = TRACK_ALLOCATION_SITE
7455 }; 7457 };
7456 7458
7457 7459
7460 class AllocationSite: public Struct {
7461 public:
7462 DECL_ACCESSORS(payload, Object)
Hannes Payer (out of office) 2013/06/25 16:35:07 Can we rename payload to something more meaningful
mvstanton 2013/07/02 13:55:11 For this one I added a TODO because I'd have to to
7463
7464 static inline AllocationSite* cast(Object* obj);
7465
7466 void Initialize() {
7467 set_payload(Smi::FromInt(GetInitialFastElementsKind()));
Hannes Payer (out of office) 2013/06/25 16:35:07 You can call SetElementsKindPayload there.
mvstanton 2013/07/02 13:55:11 Done.
7468 }
Hannes Payer (out of office) 2013/06/25 16:35:07 declaration order: Typedefs and Enums, Constants (
mvstanton 2013/07/02 13:55:11 I think I've arranged it better now, have a look.
7469
7470 DECLARE_PRINTER(AllocationSite)
7471 DECLARE_VERIFIER(AllocationSite)
7472
7473 static inline AllocationSiteMode GetMode(
7474 ElementsKind boilerplate_elements_kind);
7475 static inline AllocationSiteMode GetMode(ElementsKind from, ElementsKind to);
7476
7477 static const int kPayloadOffset = HeapObject::kHeaderSize;
7478 static const int kSize = kPayloadOffset + kPointerSize;
7479 static const uint32_t kMaximumArrayBytesToPretransition = 8 * 1024;
7480
7481 ElementsKind GetElementsKindPayload() {
7482 ASSERT(!IsLiteralSite());
7483 return static_cast<ElementsKind>(Smi::cast(payload())->value());
7484 }
7485
7486 void SetElementsKindPayload(ElementsKind kind) {
7487 set_payload(Smi::FromInt(static_cast<int>(kind)));
7488 }
7489
7490 bool IsLiteralSite() {
7491 return !payload()->IsSmi(); // payload is a boilerplate
Hannes Payer (out of office) 2013/06/25 16:35:07 remove comment or make it clear.
mvstanton 2013/07/02 13:55:11 Clarified, and made the test stronger: return payl
7492 }
7493
7494 private:
7495 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSite);
7496 };
7497
7498
7458 class AllocationSiteInfo: public Struct { 7499 class AllocationSiteInfo: public Struct {
Hannes Payer (out of office) 2013/06/25 16:35:07 declaration order... I just saw that it is not con
mvstanton 2013/07/02 13:55:11 Done.
7459 public: 7500 public:
7460 DECL_ACCESSORS(payload, Object) 7501 DECL_ACCESSORS(payload, Object)
7461 7502
7462 static inline AllocationSiteInfo* cast(Object* obj); 7503 static inline AllocationSiteInfo* cast(Object* obj);
7463 7504
7464 DECLARE_PRINTER(AllocationSiteInfo) 7505 DECLARE_PRINTER(AllocationSiteInfo)
7465 DECLARE_VERIFIER(AllocationSiteInfo) 7506 DECLARE_VERIFIER(AllocationSiteInfo)
7466 7507
7467 // Returns NULL if no AllocationSiteInfo is available for object. 7508 // Returns NULL if no AllocationSiteInfo is available for object.
7468 static AllocationSiteInfo* FindForJSObject(JSObject* object); 7509 static AllocationSiteInfo* FindForJSObject(JSObject* object);
7469 static inline AllocationSiteMode GetMode(
7470 ElementsKind boilerplate_elements_kind);
7471 static inline AllocationSiteMode GetMode(ElementsKind from, ElementsKind to);
7472 7510
7473 static const int kPayloadOffset = HeapObject::kHeaderSize; 7511 static const int kPayloadOffset = HeapObject::kHeaderSize;
Hannes Payer (out of office) 2013/06/25 16:35:07 Do you think it makes sense to rename kPayloadOffs
mvstanton 2013/07/02 13:55:11 Done.
7474 static const int kSize = kPayloadOffset + kPointerSize; 7512 static const int kSize = kPayloadOffset + kPointerSize;
7475 static const uint32_t kMaximumArrayBytesToPretransition = 8 * 1024;
7476 7513
7477 bool GetElementsKindPayload(ElementsKind* kind);
7478 private: 7514 private:
7479 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSiteInfo); 7515 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSiteInfo);
7480 }; 7516 };
7481 7517
7482 7518
7483 // Representation of a slow alias as part of a non-strict arguments objects. 7519 // Representation of a slow alias as part of a non-strict arguments objects.
7484 // For fast aliases (if HasNonStrictArgumentsElements()): 7520 // For fast aliases (if HasNonStrictArgumentsElements()):
7485 // - the parameter map contains an index into the context 7521 // - the parameter map contains an index into the context
7486 // - all attributes of the element have default values 7522 // - all attributes of the element have default values
7487 // For slow aliases (if HasDictionaryArgumentsElements()): 7523 // For slow aliases (if HasDictionaryArgumentsElements()):
(...skipping 2169 matching lines...) Expand 10 before | Expand all | Expand 10 after
9657 } else { 9693 } else {
9658 value &= ~(1 << bit_position); 9694 value &= ~(1 << bit_position);
9659 } 9695 }
9660 return value; 9696 return value;
9661 } 9697 }
9662 }; 9698 };
9663 9699
9664 } } // namespace v8::internal 9700 } } // namespace v8::internal
9665 9701
9666 #endif // V8_OBJECTS_H_ 9702 #endif // V8_OBJECTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698