OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 Smi* GetState() const { return state_; } | 393 Smi* GetState() const { return state_; } |
394 void SetState(Smi* state) { state_ = state; } | 394 void SetState(Smi* state) { state_ = state; } |
395 | 395 |
396 void SetContinuation(intptr_t pc) { continuation_ = pc; } | 396 void SetContinuation(intptr_t pc) { continuation_ = pc; } |
397 | 397 |
398 #ifdef DEBUG | 398 #ifdef DEBUG |
399 Code::Kind GetKind() const { return kind_; } | 399 Code::Kind GetKind() const { return kind_; } |
400 void SetKind(Code::Kind kind) { kind_ = kind; } | 400 void SetKind(Code::Kind kind) { kind_ = kind; } |
401 #endif | 401 #endif |
402 | 402 |
| 403 // Get the incoming arguments count. |
| 404 int ComputeParametersCount(); |
| 405 |
| 406 // Get a parameter value for an unoptimized frame. |
| 407 Object* GetParameter(Deoptimizer* deoptimizer, int index); |
| 408 |
403 // Get the expression stack height for a unoptimized frame. | 409 // Get the expression stack height for a unoptimized frame. |
404 unsigned GetExpressionCount(Deoptimizer* deoptimizer); | 410 unsigned GetExpressionCount(Deoptimizer* deoptimizer); |
405 | 411 |
406 // Get the expression stack value for an unoptimized frame. | 412 // Get the expression stack value for an unoptimized frame. |
407 Object* GetExpression(Deoptimizer* deoptimizer, int index); | 413 Object* GetExpression(Deoptimizer* deoptimizer, int index); |
408 | 414 |
409 static int registers_offset() { | 415 static int registers_offset() { |
410 return OFFSET_OF(FrameDescription, registers_); | 416 return OFFSET_OF(FrameDescription, registers_); |
411 } | 417 } |
412 | 418 |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 // internally used FrameDescription objects are not GC safe so for use | 661 // internally used FrameDescription objects are not GC safe so for use |
656 // by the debugger frame information is copied to an object of this type. | 662 // by the debugger frame information is copied to an object of this type. |
657 class DeoptimizedFrameInfo : public Malloced { | 663 class DeoptimizedFrameInfo : public Malloced { |
658 public: | 664 public: |
659 DeoptimizedFrameInfo(Deoptimizer* deoptimizer, int frame_index); | 665 DeoptimizedFrameInfo(Deoptimizer* deoptimizer, int frame_index); |
660 virtual ~DeoptimizedFrameInfo(); | 666 virtual ~DeoptimizedFrameInfo(); |
661 | 667 |
662 // GC support. | 668 // GC support. |
663 void Iterate(ObjectVisitor* v); | 669 void Iterate(ObjectVisitor* v); |
664 | 670 |
| 671 // Return the number of incoming arguments. |
| 672 int parameters_count() { return parameters_count_; } |
| 673 |
665 // Return the height of the expression stack. | 674 // Return the height of the expression stack. |
666 int expression_count() { return expression_count_; } | 675 int expression_count() { return expression_count_; } |
667 | 676 |
668 // Get the frame function. | 677 // Get the frame function. |
669 JSFunction* GetFunction() { | 678 JSFunction* GetFunction() { |
670 return function_; | 679 return function_; |
671 } | 680 } |
672 | 681 |
| 682 // Get an incoming argument. |
| 683 Object* GetParameter(int index) { |
| 684 ASSERT(0 <= index && index < parameters_count()); |
| 685 return parameters_[index]; |
| 686 } |
| 687 |
673 // Get an expression from the expression stack. | 688 // Get an expression from the expression stack. |
674 Object* GetExpression(int index) { | 689 Object* GetExpression(int index) { |
675 ASSERT(0 <= index && index < expression_count()); | 690 ASSERT(0 <= index && index < expression_count()); |
676 return expression_stack_[index]; | 691 return expression_stack_[index]; |
677 } | 692 } |
678 | 693 |
679 private: | 694 private: |
680 // Set the frame function. | 695 // Set the frame function. |
681 void SetFunction(JSFunction* function) { | 696 void SetFunction(JSFunction* function) { |
682 function_ = function; | 697 function_ = function; |
683 } | 698 } |
684 | 699 |
| 700 // Set an incoming argument. |
| 701 void SetParameter(int index, Object* obj) { |
| 702 ASSERT(0 <= index && index < parameters_count()); |
| 703 parameters_[index] = obj; |
| 704 } |
| 705 |
685 // Set an expression on the expression stack. | 706 // Set an expression on the expression stack. |
686 void SetExpression(int index, Object* obj) { | 707 void SetExpression(int index, Object* obj) { |
687 ASSERT(0 <= index && index < expression_count()); | 708 ASSERT(0 <= index && index < expression_count()); |
688 expression_stack_[index] = obj; | 709 expression_stack_[index] = obj; |
689 } | 710 } |
690 | 711 |
691 JSFunction* function_; | 712 JSFunction* function_; |
| 713 int parameters_count_; |
692 int expression_count_; | 714 int expression_count_; |
| 715 Object** parameters_; |
693 Object** expression_stack_; | 716 Object** expression_stack_; |
694 | 717 |
695 friend class Deoptimizer; | 718 friend class Deoptimizer; |
696 }; | 719 }; |
697 #endif | 720 #endif |
698 | 721 |
699 } } // namespace v8::internal | 722 } } // namespace v8::internal |
700 | 723 |
701 #endif // V8_DEOPTIMIZER_H_ | 724 #endif // V8_DEOPTIMIZER_H_ |
OLD | NEW |