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/TypeRef.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 //===----------------------------------------------------------------------===// 00013 //===----------------------------------------------------------------------===// 00014 00015 #ifndef COMMA_AST_TYPEREF_HDR_GUARD 00016 #define COMMA_AST_TYPEREF_HDR_GUARD 00017 00018 namespace comma { 00019 00020 #include "comma/ast/Decl.h" 00021 00033 class TypeRef : public Ast { 00034 00035 public: 00037 TypeRef(Location loc, FunctorDecl *functor) 00038 : Ast(AST_TypeRef), loc(loc), target(functor) { } 00039 00041 TypeRef(Location loc, VarietyDecl *variety) 00042 : Ast(AST_TypeRef), loc(loc), target(variety) { } 00043 00045 TypeRef(Location loc, SigInstanceDecl *instance) 00046 : Ast(AST_TypeRef), loc(loc), target(instance) { } 00047 00049 TypeRef(Location loc, TypeDecl *tyDecl) 00050 : Ast(AST_TypeRef), loc(loc), target(tyDecl) { } 00051 00053 Location getLocation() const { return loc; } 00054 00056 IdentifierInfo *getIdInfo() const { return target->getIdInfo(); } 00057 00059 bool isIncomplete() const { 00060 return llvm::isa<FunctorDecl>(target) || llvm::isa<VarietyDecl>(target); 00061 } 00062 00064 bool isComplete() const { return !isIncomplete(); } 00065 00067 bool referencesVariety() const { 00068 return llvm::isa<VarietyDecl>(target); 00069 } 00070 00072 bool referencesFunctor() const { 00073 return llvm::isa<FunctorDecl>(target); 00074 } 00075 00077 bool referencesSigInstance() const { 00078 return llvm::isa<SigInstanceDecl>(target); 00079 } 00080 00082 bool referencesTypeDecl() const { 00083 return llvm::isa<TypeDecl>(target); 00084 } 00085 00087 Decl *getDecl() const { return target; } 00088 00091 ModelDecl *getModelDecl() const { 00092 return llvm::dyn_cast<ModelDecl>(target); 00093 } 00094 00096 VarietyDecl *getVarietyDecl() const { 00097 return llvm::dyn_cast<VarietyDecl>(target); 00098 } 00099 00101 FunctorDecl *getFunctorDecl() const { 00102 return llvm::dyn_cast<FunctorDecl>(target); 00103 } 00104 00106 SigInstanceDecl *getSigInstanceDecl() const { 00107 return llvm::dyn_cast<SigInstanceDecl>(target); 00108 } 00109 00111 TypeDecl *getTypeDecl() const { 00112 return llvm::dyn_cast<TypeDecl>(target); 00113 } 00114 00115 // Support isa and dyn_cast. 00116 static bool classof(const TypeRef *node) { return true; } 00117 static bool classof(const Ast *node) { 00118 return node->getKind() == AST_TypeRef; 00119 } 00120 00121 private: 00122 Location loc; 00123 Decl *target; 00124 }; 00125 00126 } // end comma namespace. 00127 00128 #endif