// 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.

#ifndef RUNTIME_VM_VERSION_H_
#define RUNTIME_VM_VERSION_H_

#include "vm/allocation.h"

namespace dart {

class Version : public AllStatic {
 public:
  static const char* String();
  static const char* SnapshotString();
  static const char* CommitString();
  static int CurrentAbiVersion();
  static int OldestSupportedAbiVersion();

 private:
  static const char* str_;
  static const char* snapshot_hash_;
  static const char* commit_;
};

}  // namespace dart

#endif  // RUNTIME_VM_VERSION_H_
