00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef COMMA_TYPECHECK_DECLPRODUCER_HDR_GUARD
00026 #define COMMA_TYPECHECK_DECLPRODUCER_HDR_GUARD
00027
00028 #include "comma/ast/AstBase.h"
00029 #include "comma/basic/PrimitiveOps.h"
00030
00031 namespace comma {
00032
00033 class AstResource;
00034
00035 class DeclProducer {
00036
00037 public:
00038 DeclProducer(AstResource *resource);
00039
00041 EnumerationDecl *getBoolDecl() const;
00042
00044 EnumerationType *getBoolType() const;
00045
00047 IntegerDecl *getIntegerDecl() const;
00048
00050 TypedefType *getIntegerType() const;
00051
00054 void createImplicitDecls(EnumerationDecl *enumDecl);
00055
00058 void createImplicitDecls(IntegerDecl *intDecl);
00059
00060 private:
00062 AstResource *resource;
00063
00065 EnumerationDecl *theBoolDecl;
00066
00068 IntegerDecl *theIntegerDecl;
00069
00073 void createTheBoolDecl();
00074
00077 void createTheIntegerDecl();
00078
00081 enum PredicateKind {
00082 EQ_pred,
00083 LT_pred,
00084 GT_pred,
00085 LTEQ_pred,
00086 GTEQ_pred,
00087 };
00088
00090 IdentifierInfo *getPredicateName(PredicateKind kind);
00091
00093 PO::PrimitiveID getPredicatePrimitive(PredicateKind kind);
00094
00103 FunctionDecl *createPredicate(PredicateKind kind, Type *paramType,
00104 DeclRegion *parent);
00105
00108 enum ArithKind {
00109 PLUS_arith,
00110 MINUS_arith
00111 };
00112
00114 IdentifierInfo *getArithName(ArithKind kind);
00115
00117 PO::PrimitiveID getArithPrimitive(ArithKind kind);
00118
00126 FunctionDecl *createBinaryArithOp(ArithKind kind, Type *Ty,
00127 DeclRegion *parent);
00128
00129 };
00130
00131 }
00132
00133 #endif