1// Copyright 2021 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_SNAPSHOT_SERIALIZER_INL_H_
6#define V8_SNAPSHOT_SERIALIZER_INL_H_
7
8#include "src/roots/roots-inl.h"
9#include "src/snapshot/serializer.h"
10
11namespace v8 {
12namespace internal {
13
14bool Serializer::IsNotMappedSymbol(HeapObject obj) const {
15  Object not_mapped_symbol = ReadOnlyRoots(isolate()).not_mapped_symbol();
16  if (V8_EXTERNAL_CODE_SPACE_BOOL) {
17    // It's possible that a Code object might have the same compressed value
18    // as the not_mapped_symbol, so we must compare full pointers.
19    // TODO(v8:11880): Avoid the need for this special case by never putting
20    // Code references anywhere except the CodeDadaContainer objects.
21    // In particular, the Code objects should not appear in serializer's
22    // identity map. This should be possible once the IsolateData::builtins
23    // table is migrated to contain CodeT references.
24    return obj.ptr() == not_mapped_symbol.ptr();
25  }
26  return obj == not_mapped_symbol;
27}
28
29}  // namespace internal
30}  // namespace v8
31
32#endif  // V8_SNAPSHOT_SERIALIZER_INL_H_
33