1249261Sdim//===--- OpenMPKinds.cpp - Token Kinds Support ----------------------------===//
2249261Sdim//
3249261Sdim//                     The LLVM Compiler Infrastructure
4249261Sdim//
5249261Sdim// This file is distributed under the University of Illinois Open Source
6249261Sdim// License. See LICENSE.TXT for details.
7249261Sdim//
8249261Sdim//===----------------------------------------------------------------------===//
9249261Sdim/// \file
10249261Sdim/// \brief This file implements the OpenMP enum and support functions.
11249261Sdim///
12249261Sdim//===----------------------------------------------------------------------===//
13249261Sdim
14249261Sdim#include "clang/Basic/OpenMPKinds.h"
15249261Sdim#include "clang/Basic/IdentifierTable.h"
16249261Sdim#include "llvm/ADT/StringRef.h"
17249261Sdim#include "llvm/ADT/StringSwitch.h"
18249261Sdim#include "llvm/Support/ErrorHandling.h"
19249261Sdim#include <cassert>
20249261Sdim
21249261Sdimusing namespace clang;
22249261Sdim
23249261SdimOpenMPDirectiveKind clang::getOpenMPDirectiveKind(StringRef Str) {
24249261Sdim  return llvm::StringSwitch<OpenMPDirectiveKind>(Str)
25249261Sdim#define OPENMP_DIRECTIVE(Name) \
26249261Sdim           .Case(#Name, OMPD_##Name)
27249261Sdim#include "clang/Basic/OpenMPKinds.def"
28249261Sdim           .Default(OMPD_unknown);
29249261Sdim}
30249261Sdim
31249261Sdimconst char *clang::getOpenMPDirectiveName(OpenMPDirectiveKind Kind) {
32249261Sdim  assert(Kind < NUM_OPENMP_DIRECTIVES);
33249261Sdim  switch (Kind) {
34249261Sdim  case OMPD_unknown:
35249261Sdim    return ("unknown");
36249261Sdim#define OPENMP_DIRECTIVE(Name) \
37249261Sdim  case OMPD_##Name : return #Name;
38249261Sdim#include "clang/Basic/OpenMPKinds.def"
39249261Sdim  default:
40249261Sdim    break;
41249261Sdim  }
42249261Sdim  llvm_unreachable("Invalid OpenMP directive kind");
43249261Sdim}
44