//===---- ParserPragmas.h - Language specific pragmas -----------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines #pragma handlers for language specific pragmas.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_PARSE_PARSEPRAGMA_H
#define LLVM_CLANG_PARSE_PARSEPRAGMA_H

#include "clang/Lex/Pragma.h"

namespace clang {
  class Action;
  class Parser;

class PragmaPackHandler : public PragmaHandler {
  Action &Actions;
public:
  PragmaPackHandler(const IdentifierInfo *N, Action &A) : PragmaHandler(N), 
                                                          Actions(A) {}
  
  virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);  
};
  
class PragmaUnusedHandler : public PragmaHandler {
  Action &Actions;
  Parser &parser;
public:
  PragmaUnusedHandler(const IdentifierInfo *N, Action &A, Parser& p)
    : PragmaHandler(N), Actions(A), parser(p) {}
  
  virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);  
};  

class PragmaWeakHandler : public PragmaHandler {
  Action &Actions;
public:
  PragmaWeakHandler(const IdentifierInfo *N, Action &A)
    : PragmaHandler(N), Actions(A) {}
  
  virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);  
};

}  // end namespace clang

#endif
