 | language-c-0.3.1.1: Analysis and generation of C code | Contents | Index |
|
| Language.C.Analysis.DeclAnalysis | | Portability | ghc | | Stability | alpha | | Maintainer | benedikt.huber@gmail.com |
|
|
|
|
|
| Description |
| This module performs the analysis of declarations and the translation of
type specifications in the AST.
|
|
| Synopsis |
|
|
|
|
| Translating types
|
|
| analyseTypeDecl :: MonadTrav m => CDecl -> m Type |
get the type of a type declaration
A type declaration T may appear in thre forms:
typeof(T) - as abstract declarator in a function prototype, as in f(int)
- in a declaration without declarators, as in struct x { int a } ;
Currently, analyseTypeDecl is exlusively used for analysing types for GNU's typeof(T).
We move attributes to the type, as they have no meaning for the abstract declarator
|
|
| tType :: MonadTrav m => Bool -> NodeInfo -> [CTypeQual] -> [CTypeSpec] -> [CDerivedDeclr] -> [CDecl] -> m Type |
| translate a type
|
|
| tDirectType :: MonadTrav m => Bool -> NodeInfo -> [CTypeQual] -> [CTypeSpec] -> m Type |
| translate a type without (syntactic) indirections
Due to the GNU typeof extension and typeDefs, this can be an arbitrary type
|
|
| tNumType :: MonadTrav m => NumTypeSpec -> m (Either (FloatType, Bool) IntType) |
| Mapping from num type specs to C types (C99 6.7.2-2), ignoring the complex qualifier.
|
|
| tArraySize :: MonadTrav m => CArrSize -> m ArraySize |
|
| tTypeQuals :: MonadTrav m => [CTypeQual] -> m (TypeQuals, Attributes) |
|
| mergeOldStyle :: MonadTrav m => NodeInfo -> [CDecl] -> [CDerivedDeclr] -> m [CDerivedDeclr] |
convert old style parameters
This requires matching parameter names and declarations, as in the following example:
int f(d,c,a,b)
char a,*b;
int c;
{ }
is converted to
int f(int d, int c, char a, char* b)
TODO: This could be moved to syntax, as it operates on the AST only
|
|
| Dissecting type specs
|
|
| canonicalTypeSpec :: MonadTrav m => [CTypeSpec] -> m TypeSpecAnalysis |
|
| data NumBaseType |
| Constructors | | NoBaseType | | | BaseChar | | | BaseInt | | | BaseFloat | | | BaseDouble | |
| Instances | |
|
|
| data SignSpec |
| Constructors | | Instances | |
|
|
| data SizeMod |
| Constructors | | NoSizeMod | | | ShortMod | | | LongMod | | | LongLongMod | |
| Instances | |
|
|
| data NumTypeSpec |
|
|
| data TypeSpecAnalysis |
|
|
| canonicalStorageSpec :: MonadTrav m => [CStorageSpec] -> m StorageSpec |
|
| data StorageSpec |
| Constructors | | NoStorageSpec | | | AutoSpec | | | RegSpec | | | ThreadSpec | | | StaticSpec Bool | | | ExternSpec Bool | |
| Instances | |
|
|
| hasThreadLocalSpec :: StorageSpec -> Bool |
|
| Helpers
|
|
| data VarDeclInfo |
|
|
| tAttr :: MonadTrav m => CAttr -> m Attr |
| translate __attribute__ annotations
TODO: This is a unwrap and wrap stub
|
|
| mkVarName :: MonadTrav m => NodeInfo -> Maybe Ident -> Maybe AsmName -> m VarName |
| construct a name for a variable
TODO: more or less bogus
|
|
| getOnlyDeclr :: MonadTrav m => CDecl -> m CDeclr |
|
| nameOfDecl :: MonadTrav m => CDecl -> m Ident |
|
| Produced by Haddock version 2.7.2 |