This machine mirrors various open-source projects.
20 Gbit/s uplink.
If there are any issues or you want another project mirrored, please contact
mirror-service -=AT=- netcologne DOT de !
00001 //===-- ast/KeywordSelector.h --------------------------------- -*- C++ -*-===// 00002 // 00003 // This file is distributed under the MIT license. See LICENSE.txt for details. 00004 // 00005 // Copyright (C) 2009, Stephen Wilson 00006 // 00007 //===----------------------------------------------------------------------===// 00008 00009 00010 //===----------------------------------------------------------------------===// 00014 //===----------------------------------------------------------------------===// 00015 00016 #ifndef COMMA_AST_KEYWORDSELECTOR_HDR_GUARD 00017 #define COMMA_AST_KEYWORDSELECTOR_HDR_GUARD 00018 00019 #include "comma/ast/Expr.h" 00020 #include "comma/ast/TypeRef.h" 00021 00022 namespace comma { 00023 00038 class KeywordSelector : public Ast { 00039 00040 public: 00048 KeywordSelector(IdentifierInfo *key, Location loc, Expr *expr) 00049 : Ast(AST_KeywordSelector), 00050 keyword(key), loc(loc), rhs(expr) { } 00051 00059 KeywordSelector(IdentifierInfo *key, Location loc, TypeRef *tyRef) 00060 : Ast(AST_KeywordSelector), 00061 keyword(key), loc(loc), rhs(tyRef) { } 00062 00064 IdentifierInfo *getKeyword() const { return keyword; } 00065 00067 Location getLocation() const { return loc; } 00068 00070 bool isTypeSelector() const { return llvm::isa<TypeRef>(rhs); } 00071 00073 bool isExprSelector() const { return llvm::isa<Expr>(rhs); } 00074 00076 00077 00078 void setRHS(Expr *expr) { rhs = expr; } 00079 void setRHS(TypeRef *ref) { rhs = ref; } 00081 00083 00084 00085 Expr *getExpression() { return llvm::dyn_cast<Expr>(rhs); } 00086 const Expr *getExpression() const { return llvm::dyn_cast<Expr>(rhs); } 00088 00092 Type *getType() const { 00093 if (const Expr *expr = getExpression()) { 00094 if (expr->hasType()) 00095 return expr->getType(); 00096 } 00097 return 0; 00098 } 00099 00101 00102 00103 TypeRef *getTypeRef() { return llvm::dyn_cast<TypeRef>(rhs); } 00104 const TypeRef *getTypeRef() const { return llvm::dyn_cast<TypeRef>(rhs); } 00106 00107 // Support isa and dyn_cast. 00108 static bool classof(const KeywordSelector *node) { return true; } 00109 static bool classof(const Ast *node) { 00110 return node->getKind() == AST_KeywordSelector; 00111 } 00112 00113 private: 00114 IdentifierInfo *keyword; 00115 Location loc; 00116 Ast *rhs; 00117 }; 00118 00119 } // end comma namespace. 00120 00121 #endif