Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(400)

Side by Side Diff: runtime/vm/snapshot.cc

Issue 2720123004: VM: Make Dart::FeaturesString respect isolate flags controlling asserts and type checks. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/snapshot.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/snapshot.h" 5 #include "vm/snapshot.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/bootstrap.h" 8 #include "vm/bootstrap.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/dart.h" 10 #include "vm/dart.h"
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 573
574 private: 574 private:
575 PageSpace* page_space_; 575 PageSpace* page_space_;
576 }; 576 };
577 577
578 578
579 RawObject* SnapshotReader::ReadScriptSnapshot() { 579 RawObject* SnapshotReader::ReadScriptSnapshot() {
580 ASSERT(kind_ == Snapshot::kScript); 580 ASSERT(kind_ == Snapshot::kScript);
581 581
582 // First read the version string, and check that it matches. 582 // First read the version string, and check that it matches.
583 RawApiError* error = VerifyVersionAndFeatures(); 583 RawApiError* error = VerifyVersionAndFeatures(Isolate::Current());
584 if (error != ApiError::null()) { 584 if (error != ApiError::null()) {
585 return error; 585 return error;
586 } 586 }
587 587
588 // The version string matches. Read the rest of the snapshot. 588 // The version string matches. Read the rest of the snapshot.
589 obj_ = ReadObject(); 589 obj_ = ReadObject();
590 if (!obj_.IsLibrary()) { 590 if (!obj_.IsLibrary()) {
591 if (!obj_.IsError()) { 591 if (!obj_.IsError()) {
592 const intptr_t kMessageBufferSize = 128; 592 const intptr_t kMessageBufferSize = 128;
593 char message_buffer[kMessageBufferSize]; 593 char message_buffer[kMessageBufferSize];
594 OS::SNPrint(message_buffer, kMessageBufferSize, 594 OS::SNPrint(message_buffer, kMessageBufferSize,
595 "Invalid object %s found in script snapshot", 595 "Invalid object %s found in script snapshot",
596 obj_.ToCString()); 596 obj_.ToCString());
597 const String& msg = String::Handle(String::New(message_buffer)); 597 const String& msg = String::Handle(String::New(message_buffer));
598 obj_ = ApiError::New(msg); 598 obj_ = ApiError::New(msg);
599 } 599 }
600 } 600 }
601 return obj_.raw(); 601 return obj_.raw();
602 } 602 }
603 603
604 604
605 RawApiError* SnapshotReader::VerifyVersionAndFeatures() { 605 RawApiError* SnapshotReader::VerifyVersionAndFeatures(Isolate* isolate) {
606 // If the version string doesn't match, return an error. 606 // If the version string doesn't match, return an error.
607 // Note: New things are allocated only if we're going to return an error. 607 // Note: New things are allocated only if we're going to return an error.
608 608
609 const char* expected_version = Version::SnapshotString(); 609 const char* expected_version = Version::SnapshotString();
610 ASSERT(expected_version != NULL); 610 ASSERT(expected_version != NULL);
611 const intptr_t version_len = strlen(expected_version); 611 const intptr_t version_len = strlen(expected_version);
612 if (PendingBytes() < version_len) { 612 if (PendingBytes() < version_len) {
613 const intptr_t kMessageBufferSize = 128; 613 const intptr_t kMessageBufferSize = 128;
614 char message_buffer[kMessageBufferSize]; 614 char message_buffer[kMessageBufferSize];
615 OS::SNPrint(message_buffer, kMessageBufferSize, 615 OS::SNPrint(message_buffer, kMessageBufferSize,
(...skipping 16 matching lines...) Expand all
632 (Snapshot::IsFull(kind_)) ? "full" : "script", expected_version, 632 (Snapshot::IsFull(kind_)) ? "full" : "script", expected_version,
633 actual_version); 633 actual_version);
634 free(actual_version); 634 free(actual_version);
635 // This can also fail while bringing up the VM isolate, so make sure to 635 // This can also fail while bringing up the VM isolate, so make sure to
636 // allocate the error message in old space. 636 // allocate the error message in old space.
637 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld)); 637 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld));
638 return ApiError::New(msg, Heap::kOld); 638 return ApiError::New(msg, Heap::kOld);
639 } 639 }
640 Advance(version_len); 640 Advance(version_len);
641 641
642 const char* expected_features = Dart::FeaturesString(kind_); 642 const char* expected_features = Dart::FeaturesString(isolate, kind_);
643 ASSERT(expected_features != NULL); 643 ASSERT(expected_features != NULL);
644 const intptr_t expected_len = strlen(expected_features); 644 const intptr_t expected_len = strlen(expected_features);
645 645
646 const char* features = reinterpret_cast<const char*>(CurrentBufferAddress()); 646 const char* features = reinterpret_cast<const char*>(CurrentBufferAddress());
647 ASSERT(features != NULL); 647 ASSERT(features != NULL);
648 intptr_t buffer_len = OS::StrNLen(features, PendingBytes()); 648 intptr_t buffer_len = OS::StrNLen(features, PendingBytes());
649 if ((buffer_len != expected_len) || 649 if ((buffer_len != expected_len) ||
650 strncmp(features, expected_features, expected_len)) { 650 strncmp(features, expected_features, expected_len)) {
651 const intptr_t kMessageBufferSize = 256; 651 const intptr_t kMessageBufferSize = 256;
652 char message_buffer[kMessageBufferSize]; 652 char message_buffer[kMessageBufferSize];
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1835 UNREACHABLE(); 1835 UNREACHABLE();
1836 } 1836 }
1837 1837
1838 1838
1839 void SnapshotWriter::WriteVersionAndFeatures() { 1839 void SnapshotWriter::WriteVersionAndFeatures() {
1840 const char* expected_version = Version::SnapshotString(); 1840 const char* expected_version = Version::SnapshotString();
1841 ASSERT(expected_version != NULL); 1841 ASSERT(expected_version != NULL);
1842 const intptr_t version_len = strlen(expected_version); 1842 const intptr_t version_len = strlen(expected_version);
1843 WriteBytes(reinterpret_cast<const uint8_t*>(expected_version), version_len); 1843 WriteBytes(reinterpret_cast<const uint8_t*>(expected_version), version_len);
1844 1844
1845 const char* expected_features = Dart::FeaturesString(kind_); 1845 const char* expected_features =
1846 Dart::FeaturesString(Isolate::Current(), kind_);
1846 ASSERT(expected_features != NULL); 1847 ASSERT(expected_features != NULL);
1847 const intptr_t features_len = strlen(expected_features); 1848 const intptr_t features_len = strlen(expected_features);
1848 WriteBytes(reinterpret_cast<const uint8_t*>(expected_features), 1849 WriteBytes(reinterpret_cast<const uint8_t*>(expected_features),
1849 features_len + 1); 1850 features_len + 1);
1850 free(const_cast<char*>(expected_features)); 1851 free(const_cast<char*>(expected_features));
1851 } 1852 }
1852 1853
1853 1854
1854 ScriptSnapshotWriter::ScriptSnapshotWriter(uint8_t** buffer, ReAlloc alloc) 1855 ScriptSnapshotWriter::ScriptSnapshotWriter(uint8_t** buffer, ReAlloc alloc)
1855 : SnapshotWriter(Thread::Current(), 1856 : SnapshotWriter(Thread::Current(),
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1938 *buffer_len_ = BytesWritten(); 1939 *buffer_len_ = BytesWritten();
1939 } 1940 }
1940 } else { 1941 } else {
1941 FreeBuffer(); 1942 FreeBuffer();
1942 ThrowException(exception_type(), exception_msg()); 1943 ThrowException(exception_type(), exception_msg());
1943 } 1944 }
1944 } 1945 }
1945 1946
1946 1947
1947 } // namespace dart 1948 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/snapshot.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698