V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
allocation-site-scopes-inl.h
1 // Copyright 2018 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_ALLOCATION_SITE_SCOPES_INL_H_
6 #define V8_ALLOCATION_SITE_SCOPES_INL_H_
7 
8 #include "src/allocation-site-scopes.h"
9 
10 #include "src/objects/allocation-site-inl.h"
11 
12 namespace v8 {
13 namespace internal {
14 
15 void AllocationSiteContext::InitializeTraversal(Handle<AllocationSite> site) {
16  top_ = site;
17  // {current_} is updated in place to not create unnecessary Handles, hence
18  // we initially need a separate handle.
19  current_ = Handle<AllocationSite>::New(*top_, isolate());
20 }
21 
22 Handle<AllocationSite> AllocationSiteUsageContext::EnterNewScope() {
23  if (top().is_null()) {
24  InitializeTraversal(top_site_);
25  } else {
26  // Advance current site
27  Object* nested_site = current()->nested_site();
28  // Something is wrong if we advance to the end of the list here.
29  update_current_site(AllocationSite::cast(nested_site));
30  }
31  return Handle<AllocationSite>(*current(), isolate());
32 }
33 
34 void AllocationSiteUsageContext::ExitScope(Handle<AllocationSite> scope_site,
35  Handle<JSObject> object) {
36  // This assert ensures that we are pointing at the right sub-object in a
37  // recursive walk of a nested literal.
38  DCHECK(object.is_null() || *object == scope_site->boilerplate());
39 }
40 
41 bool AllocationSiteUsageContext::ShouldCreateMemento(Handle<JSObject> object) {
42  if (activated_ && AllocationSite::CanTrack(object->map()->instance_type())) {
43  if (FLAG_allocation_site_pretenuring ||
44  AllocationSite::ShouldTrack(object->GetElementsKind())) {
45  if (FLAG_trace_creation_allocation_sites) {
46  PrintF("*** Creating Memento for %s %p\n",
47  object->IsJSArray() ? "JSArray" : "JSObject",
48  static_cast<void*>(*object));
49  }
50  return true;
51  }
52  }
53  return false;
54 }
55 
56 } // namespace internal
57 } // namespace v8
58 
59 #endif // V8_ALLOCATION_SITE_SCOPES_INL_H_
Definition: libplatform.h:13