// Copyright 2014 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.

#include "src/compiler/osr.h"

#include "src/codegen/optimized-compilation-info.h"
#include "src/compiler/frame.h"
#include "src/objects/objects-inl.h"
#include "src/objects/objects.h"
#include "src/objects/shared-function-info.h"

namespace v8 {
namespace internal {
namespace compiler {

OsrHelper::OsrHelper(OptimizedCompilationInfo* info)
    : parameter_count_(info->bytecode_array()->parameter_count()),
      stack_slot_count_(InterpreterFrameConstants::RegisterStackSlotCount(
                            info->bytecode_array()->register_count()) +
                        InterpreterFrameConstants::kExtraSlotCount) {}

void OsrHelper::SetupFrame(Frame* frame) {
  // The optimized frame will subsume the unoptimized frame. Do so by reserving
  // the first spill slots.
  frame->ReserveSpillSlots(UnoptimizedFrameSlots());
}

}  // namespace compiler
}  // namespace internal
}  // namespace v8
