OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_DEOPTIMIZER_H_ | 5 #ifndef V8_DEOPTIMIZER_H_ |
6 #define V8_DEOPTIMIZER_H_ | 6 #define V8_DEOPTIMIZER_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/macro-assembler.h" | 9 #include "src/macro-assembler.h" |
10 | 10 |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 enum BailoutType { EAGER, LAZY, SOFT, kLastBailoutType = SOFT }; | 403 enum BailoutType { EAGER, LAZY, SOFT, kLastBailoutType = SOFT }; |
404 | 404 |
405 #define DEOPT_MESSAGES_CONSTANTS(C, T) C, | 405 #define DEOPT_MESSAGES_CONSTANTS(C, T) C, |
406 enum DeoptReason { | 406 enum DeoptReason { |
407 DEOPT_MESSAGES_LIST(DEOPT_MESSAGES_CONSTANTS) kLastDeoptReason | 407 DEOPT_MESSAGES_LIST(DEOPT_MESSAGES_CONSTANTS) kLastDeoptReason |
408 }; | 408 }; |
409 #undef DEOPT_MESSAGES_CONSTANTS | 409 #undef DEOPT_MESSAGES_CONSTANTS |
410 static const char* GetDeoptReason(DeoptReason deopt_reason); | 410 static const char* GetDeoptReason(DeoptReason deopt_reason); |
411 | 411 |
412 struct DeoptInfo { | 412 struct DeoptInfo { |
413 DeoptInfo(SourcePosition position, DeoptReason d, int inlining_id) | 413 DeoptInfo(SourcePosition position, DeoptReason deopt_reason, int deopt_id) |
414 : position(position), deopt_reason(d), inlining_id(inlining_id) {} | 414 : position(position), deopt_reason(deopt_reason), deopt_id(deopt_id) {} |
415 | 415 |
416 SourcePosition position; | 416 SourcePosition position; |
417 DeoptReason deopt_reason; | 417 DeoptReason deopt_reason; |
418 int inlining_id; | 418 int deopt_id; |
| 419 |
| 420 static const int kNoDeoptId = -1; |
419 }; | 421 }; |
420 | 422 |
421 static DeoptInfo GetDeoptInfo(Code* code, byte* from); | 423 static DeoptInfo GetDeoptInfo(Code* code, byte* from); |
422 | 424 |
| 425 static int ComputeSourcePosition(SharedFunctionInfo* shared, |
| 426 BailoutId node_id); |
| 427 |
423 struct JumpTableEntry : public ZoneObject { | 428 struct JumpTableEntry : public ZoneObject { |
424 inline JumpTableEntry(Address entry, const DeoptInfo& deopt_info, | 429 inline JumpTableEntry(Address entry, const DeoptInfo& deopt_info, |
425 Deoptimizer::BailoutType type, bool frame) | 430 Deoptimizer::BailoutType type, bool frame) |
426 : label(), | 431 : label(), |
427 address(entry), | 432 address(entry), |
428 deopt_info(deopt_info), | 433 deopt_info(deopt_info), |
429 bailout_type(type), | 434 bailout_type(type), |
430 needs_frame(frame) {} | 435 needs_frame(frame) {} |
431 | 436 |
432 bool IsEquivalentTo(const JumpTableEntry& other) const { | 437 bool IsEquivalentTo(const JumpTableEntry& other) const { |
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1113 std::vector<Handle<Object> > expression_stack_; | 1118 std::vector<Handle<Object> > expression_stack_; |
1114 int source_position_; | 1119 int source_position_; |
1115 | 1120 |
1116 friend class Deoptimizer; | 1121 friend class Deoptimizer; |
1117 }; | 1122 }; |
1118 | 1123 |
1119 } // namespace internal | 1124 } // namespace internal |
1120 } // namespace v8 | 1125 } // namespace v8 |
1121 | 1126 |
1122 #endif // V8_DEOPTIMIZER_H_ | 1127 #endif // V8_DEOPTIMIZER_H_ |
OLD | NEW |