|  | // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | #include "vm/snapshot.h" | 
|  |  | 
|  | #include "platform/assert.h" | 
|  | #include "vm/dart.h" | 
|  |  | 
|  | namespace dart { | 
|  |  | 
|  | const char* Snapshot::KindToCString(Kind kind) { | 
|  | switch (kind) { | 
|  | case kFull: | 
|  | return "full"; | 
|  | case kFullCore: | 
|  | return "full-core"; | 
|  | case kFullJIT: | 
|  | return "full-jit"; | 
|  | case kFullAOT: | 
|  | return "full-aot"; | 
|  | case kNone: | 
|  | return "none"; | 
|  | case kInvalid: | 
|  | default: | 
|  | return "invalid"; | 
|  | } | 
|  | } | 
|  |  | 
|  | const Snapshot* Snapshot::SetupFromBuffer(const void* raw_memory) { | 
|  | ASSERT(raw_memory != nullptr); | 
|  | const Snapshot* snapshot = reinterpret_cast<const Snapshot*>(raw_memory); | 
|  | if (!snapshot->check_magic()) { | 
|  | return nullptr; | 
|  | } | 
|  | // If the raw length is negative or greater than what the local machine can | 
|  | // handle, then signal an error. | 
|  | int64_t length = snapshot->large_length(); | 
|  | if ((length < 0) || (length > kIntptrMax)) { | 
|  | return nullptr; | 
|  | } | 
|  | return snapshot; | 
|  | } | 
|  |  | 
|  | }  // namespace dart |