• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 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 #include "src/compiler/frame-states.h"
6 
7 #include "src/base/functional.h"
8 #include "src/handles-inl.h"
9 
10 namespace v8 {
11 namespace internal {
12 namespace compiler {
13 
hash_value(OutputFrameStateCombine const & sc)14 size_t hash_value(OutputFrameStateCombine const& sc) {
15   return base::hash_combine(sc.kind_, sc.parameter_);
16 }
17 
18 
operator <<(std::ostream & os,OutputFrameStateCombine const & sc)19 std::ostream& operator<<(std::ostream& os, OutputFrameStateCombine const& sc) {
20   switch (sc.kind_) {
21     case OutputFrameStateCombine::kPushOutput:
22       if (sc.parameter_ == 0) return os << "Ignore";
23       return os << "Push(" << sc.parameter_ << ")";
24     case OutputFrameStateCombine::kPokeAt:
25       return os << "PokeAt(" << sc.parameter_ << ")";
26   }
27   UNREACHABLE();
28   return os;
29 }
30 
31 
operator ==(FrameStateInfo const & lhs,FrameStateInfo const & rhs)32 bool operator==(FrameStateInfo const& lhs, FrameStateInfo const& rhs) {
33   return lhs.type() == rhs.type() && lhs.bailout_id() == rhs.bailout_id() &&
34          lhs.state_combine() == rhs.state_combine() &&
35          lhs.function_info() == rhs.function_info();
36 }
37 
38 
operator !=(FrameStateInfo const & lhs,FrameStateInfo const & rhs)39 bool operator!=(FrameStateInfo const& lhs, FrameStateInfo const& rhs) {
40   return !(lhs == rhs);
41 }
42 
43 
hash_value(FrameStateInfo const & info)44 size_t hash_value(FrameStateInfo const& info) {
45   return base::hash_combine(static_cast<int>(info.type()), info.bailout_id(),
46                             info.state_combine());
47 }
48 
49 
operator <<(std::ostream & os,FrameStateType type)50 std::ostream& operator<<(std::ostream& os, FrameStateType type) {
51   switch (type) {
52     case FrameStateType::kJavaScriptFunction:
53       os << "JS_FRAME";
54       break;
55     case FrameStateType::kInterpretedFunction:
56       os << "INTERPRETED_FRAME";
57       break;
58     case FrameStateType::kArgumentsAdaptor:
59       os << "ARGUMENTS_ADAPTOR";
60       break;
61     case FrameStateType::kTailCallerFunction:
62       os << "TAIL_CALLER_FRAME";
63       break;
64     case FrameStateType::kConstructStub:
65       os << "CONSTRUCT_STUB";
66       break;
67   }
68   return os;
69 }
70 
71 
operator <<(std::ostream & os,FrameStateInfo const & info)72 std::ostream& operator<<(std::ostream& os, FrameStateInfo const& info) {
73   os << info.type() << ", " << info.bailout_id() << ", "
74      << info.state_combine();
75   Handle<SharedFunctionInfo> shared_info;
76   if (info.shared_info().ToHandle(&shared_info)) {
77     os << ", " << Brief(*shared_info);
78   }
79   return os;
80 }
81 
82 }  // namespace compiler
83 }  // namespace internal
84 }  // namespace v8
85