// 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" namespace dart { TokenPosition TokenPosition::SnapshotDecode(int32_t value) { return TokenPosition(static_cast(value)); } int32_t TokenPosition::SnapshotEncode() { return static_cast(value_); } bool TokenPosition::IsSynthetic() const { if (value_ >= kMinSourcePos) { return false; } if (value_ < kLast.value()) { return true; } return false; } #define DEFINE_VALUES(name, value) \ const TokenPosition TokenPosition::k##name = TokenPosition(value); SENTINEL_TOKEN_DESCRIPTORS(DEFINE_VALUES); #undef DEFINE_VALUES const TokenPosition TokenPosition::kMinSource = TokenPosition(kMinSourcePos); const TokenPosition TokenPosition::kMaxSource = TokenPosition(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: { Zone* zone = Thread::Current()->zone(); ASSERT(zone != NULL); if (IsSynthetic()) { // TODO(johnmccutchan): Print synthetic positions differently. return FromSynthetic().ToCString(); } else { return OS::SCreate(zone, "%d", value_); } } } } } // namespace dart