language-c-0.4.5: Analysis and generation of C code

Safe HaskellNone




This module performs the analysis of declarations and the translation of type specifications in the AST.


Translating types

analyseTypeDecl :: MonadTrav m => CDecl -> m TypeSource

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] -> TypeSpecAnalysis -> [CDerivedDeclr] -> [CDecl] -> m TypeSource

translate a type

tDirectType :: MonadTrav m => Bool -> NodeInfo -> [CTypeQual] -> TypeSpecAnalysis -> m TypeSource

translate a type without (syntactic) indirections Due to the GNU typeof extension and typeDefs, this can be an arbitrary type

tNumType :: MonadCError m => NumTypeSpec -> m (Either (FloatType, Bool) IntType)Source

Mapping from num type specs to C types (C99 6.7.2-2), ignoring the complex qualifier.

mergeOldStyle :: MonadCError m => NodeInfo -> [CDecl] -> [CDerivedDeclr] -> m [CDerivedDeclr]Source

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


tAttr :: (MonadCError m, MonadSymtab m) => CAttr -> m AttrSource

translate __attribute__ annotations TODO: This is a unwrap and wrap stub

mkVarName :: (MonadCError m, MonadSymtab m) => NodeInfo -> Maybe Ident -> Maybe AsmName -> m VarNameSource

construct a name for a variable TODO: more or less bogus

analyseVarDecl :: MonadTrav m => Bool -> [CStorageSpec] -> [CAttr] -> [CTypeQual] -> TypeSpecAnalysis -> Bool -> CDeclr -> [CDecl] -> Maybe CInit -> m VarDeclInfoSource

analyse declarators