%PDF- %PDF-
| Direktori : /home2/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/ |
| Current File : //home2/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/allocation-result.h |
// Copyright 2022 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_HEAP_ALLOCATION_RESULT_H_
#define V8_HEAP_ALLOCATION_RESULT_H_
#include "src/common/globals.h"
#include "src/objects/heap-object.h"
#include "src/objects/objects.h"
#include "src/objects/smi.h"
namespace v8 {
namespace internal {
enum class AllocationOrigin {
kGeneratedCode = 0,
kRuntime = 1,
kGC = 2,
kFirstAllocationOrigin = kGeneratedCode,
kLastAllocationOrigin = kGC,
kNumberOfAllocationOrigins = kLastAllocationOrigin + 1
};
// The result of an allocation attempt. Either represents a successful
// allocation that can be turned into an object or a failed attempt.
class AllocationResult final {
public:
static AllocationResult Failure() { return AllocationResult(); }
static AllocationResult FromObject(Tagged<HeapObject> heap_object) {
return AllocationResult(heap_object);
}
// Empty constructor creates a failed result. The callsite determines which
// GC to invoke based on the requested allocation.
AllocationResult() = default;
bool IsFailure() const { return object_.is_null(); }
template <typename T>
bool To(Tagged<T>* obj) const {
if (IsFailure()) return false;
*obj = T::cast(object_);
return true;
}
Tagged<HeapObject> ToObjectChecked() const {
CHECK(!IsFailure());
return HeapObject::cast(object_);
}
Tagged<HeapObject> ToObject() const {
DCHECK(!IsFailure());
return HeapObject::cast(object_);
}
Address ToAddress() const {
DCHECK(!IsFailure());
return HeapObject::cast(object_).address();
}
private:
explicit AllocationResult(Tagged<HeapObject> heap_object)
: object_(heap_object) {}
Tagged<HeapObject> object_;
};
static_assert(sizeof(AllocationResult) == kSystemPointerSize);
} // namespace internal
} // namespace v8
#endif // V8_HEAP_ALLOCATION_RESULT_H_