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_SERIALIZE_H_ | 5 #ifndef V8_SERIALIZE_H_ |
6 #define V8_SERIALIZE_H_ | 6 #define V8_SERIALIZE_H_ |
7 | 7 |
8 #include "src/compiler.h" | 8 #include "src/compiler.h" |
9 #include "src/hashmap.h" | 9 #include "src/hashmap.h" |
10 #include "src/heap-profiler.h" | 10 #include "src/heap-profiler.h" |
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 | 583 |
584 virtual void SerializeObject(Object* o, HowToCode how_to_code, | 584 virtual void SerializeObject(Object* o, HowToCode how_to_code, |
585 WhereToPoint where_to_point, int skip); | 585 WhereToPoint where_to_point, int skip); |
586 | 586 |
587 static Handle<SharedFunctionInfo> Deserialize(Isolate* isolate, | 587 static Handle<SharedFunctionInfo> Deserialize(Isolate* isolate, |
588 ScriptData* data, | 588 ScriptData* data, |
589 Handle<String> source); | 589 Handle<String> source); |
590 | 590 |
591 static const int kSourceObjectIndex = 0; | 591 static const int kSourceObjectIndex = 0; |
592 | 592 |
| 593 String* source() { |
| 594 ASSERT(!AllowHeapAllocation::IsAllowed()); |
| 595 return source_; |
| 596 } |
| 597 |
593 private: | 598 private: |
594 void SerializeBuiltin(Code* builtin, HowToCode how_to_code, | 599 void SerializeBuiltin(Code* builtin, HowToCode how_to_code, |
595 WhereToPoint where_to_point, int skip); | 600 WhereToPoint where_to_point, int skip); |
596 void SerializeSourceObject(HowToCode how_to_code, WhereToPoint where_to_point, | 601 void SerializeSourceObject(HowToCode how_to_code, WhereToPoint where_to_point, |
597 int skip); | 602 int skip); |
598 | 603 |
599 DisallowHeapAllocation no_gc_; | 604 DisallowHeapAllocation no_gc_; |
600 String* source_; | 605 String* source_; |
601 DISALLOW_COPY_AND_ASSIGN(CodeSerializer); | 606 DISALLOW_COPY_AND_ASSIGN(CodeSerializer); |
602 }; | 607 }; |
603 | 608 |
604 | 609 |
605 // Wrapper around ScriptData to provide code-serializer-specific functionality. | 610 // Wrapper around ScriptData to provide code-serializer-specific functionality. |
606 class SerializedCodeData { | 611 class SerializedCodeData { |
607 public: | 612 public: |
608 // Used by when consuming. | 613 // Used by when consuming. |
609 explicit SerializedCodeData(ScriptData* data) | 614 explicit SerializedCodeData(ScriptData* data, String* source) |
610 : script_data_(data), owns_script_data_(false) { | 615 : script_data_(data), owns_script_data_(false) { |
611 CHECK(IsSane()); | 616 DisallowHeapAllocation no_gc; |
| 617 CHECK(IsSane(source)); |
612 } | 618 } |
613 | 619 |
614 // Used when producing. | 620 // Used when producing. |
615 SerializedCodeData(List<byte>* payload, CodeSerializer* cs); | 621 SerializedCodeData(List<byte>* payload, CodeSerializer* cs); |
616 | 622 |
617 ~SerializedCodeData() { | 623 ~SerializedCodeData() { |
618 if (owns_script_data_) delete script_data_; | 624 if (owns_script_data_) delete script_data_; |
619 } | 625 } |
620 | 626 |
621 // Return ScriptData object and relinquish ownership over it to the caller. | 627 // Return ScriptData object and relinquish ownership over it to the caller. |
(...skipping 20 matching lines...) Expand all Loading... |
642 private: | 648 private: |
643 void SetHeaderValue(int offset, int value) { | 649 void SetHeaderValue(int offset, int value) { |
644 reinterpret_cast<int*>(const_cast<byte*>(script_data_->data()))[offset] = | 650 reinterpret_cast<int*>(const_cast<byte*>(script_data_->data()))[offset] = |
645 value; | 651 value; |
646 } | 652 } |
647 | 653 |
648 int GetHeaderValue(int offset) const { | 654 int GetHeaderValue(int offset) const { |
649 return reinterpret_cast<const int*>(script_data_->data())[offset]; | 655 return reinterpret_cast<const int*>(script_data_->data())[offset]; |
650 } | 656 } |
651 | 657 |
652 bool IsSane(); | 658 bool IsSane(String* source); |
| 659 |
| 660 int CheckSum(String* source); |
653 | 661 |
654 // The data header consists of int-sized entries: | 662 // The data header consists of int-sized entries: |
655 // [0] version hash | 663 // [0] version hash |
656 // [1..7] reservation sizes for spaces from NEW_SPACE to PROPERTY_CELL_SPACE. | 664 // [1..7] reservation sizes for spaces from NEW_SPACE to PROPERTY_CELL_SPACE. |
657 static const int kVersionHashOffset = 0; | 665 static const int kCheckSumOffset = 0; |
658 static const int kReservationsOffset = 1; | 666 static const int kReservationsOffset = 1; |
659 static const int kHeaderEntries = 8; | 667 static const int kHeaderEntries = 8; |
660 | 668 |
661 ScriptData* script_data_; | 669 ScriptData* script_data_; |
662 bool owns_script_data_; | 670 bool owns_script_data_; |
663 }; | 671 }; |
664 } } // namespace v8::internal | 672 } } // namespace v8::internal |
665 | 673 |
666 #endif // V8_SERIALIZE_H_ | 674 #endif // V8_SERIALIZE_H_ |
OLD | NEW |