|  | // Copyright (c) 2016, 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/token_position.h" | 
|  |  | 
|  | #include "vm/object.h" | 
|  | #include "vm/zone_text_buffer.h" | 
|  |  | 
|  | namespace dart { | 
|  |  | 
|  | uword TokenPosition::Hash() const { | 
|  | return Utils::WordHash(value_); | 
|  | } | 
|  |  | 
|  | TokenPosition TokenPosition::Deserialize(int32_t value) { | 
|  | return TokenPosition(value); | 
|  | } | 
|  |  | 
|  | int32_t TokenPosition::Serialize() const { | 
|  | return static_cast<int32_t>(value_); | 
|  | } | 
|  |  | 
|  | #define DEFINE_VALUES(name, value)                                             \ | 
|  | const TokenPosition TokenPosition::k##name(value); | 
|  | SENTINEL_TOKEN_DESCRIPTORS(DEFINE_VALUES); | 
|  | #undef DEFINE_VALUES | 
|  | const TokenPosition TokenPosition::kMinSource(kMinSourcePos); | 
|  | const TokenPosition TokenPosition::kMaxSource(kMaxSourcePos); | 
|  |  | 
|  | const char* TokenPosition::ToCString() const { | 
|  | switch (value_) { | 
|  | #define DEFINE_CASE(name, value)                                               \ | 
|  | case value:                                                                  \ | 
|  | return #name; | 
|  | SENTINEL_TOKEN_DESCRIPTORS(DEFINE_CASE); | 
|  | #undef DEFINE_CASE | 
|  | default: | 
|  | break; | 
|  | } | 
|  | ASSERT(IsReal() || IsSynthetic()); | 
|  | ZoneTextBuffer buffer(Thread::Current()->zone()); | 
|  | if (IsSynthetic()) { | 
|  | buffer.AddString("syn:"); | 
|  | } | 
|  | buffer.Printf("%" Pd32 "", value_); | 
|  | return buffer.buffer(); | 
|  | } | 
|  |  | 
|  | }  // namespace dart |