 | 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.1.0 |