HORIZON HASKELLDocslts/ghc-10.0.x8fef28d2026-11-02Search packagesCtrl K
Theme: |

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 8fef28d · 2026-11-02

Modulelanguage-c-0.10.2Haskell2010

Language.C.Analysis.SemRep

This module contains definitions for representing C translation units. In contrast to Language.C.Syntax.AST, the representation tries to express the semantics of of a translation unit.

Contents
  1. Sums of tags and identifiers
  2. Global definitions
  3. Events for visitors
  4. Declarations and definitions
  5. Declaration attributes
  6. Types
  7. Variable names
  8. Attributes (STUB, not yet analyzed)
  9. Statements and Expressions (STUB, aliases to Syntax)
Synopsis
  • Packagelanguage-c-0.10.2
  • Exports69
  • LanguageHaskell2010
  • LicenceBSD-3-Clause
  • SourceSemRep.hs

Sums of tags and identifiers

datadata TagDef

Composite type definitions (tags)

Instances6Data, Show, CNode, Pos, Pretty, HasSUERef
  • Data TagDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show TagDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode TagDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos TagDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty TagDefDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • HasSUERef TagDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
classclass Declaration n where

All datatypes aggregating a declaration are instances of Declaration

Methods

  • getVarDecl :: n -> VarDecl

    get the name, type and declaration attributes of a declaration or definition

Instances9Declaration, …
valuedeclIdent :: Declaration n => n -> Ident

get the variable identifier of a declaration (only safe if the the declaration is known to have a name)

datadata IdentDecl

identifiers, typedefs and enumeration constants (namespace sum)

Constructors

Instances6Data, Show, CNode, Pos, Pretty, Declaration
  • Data IdentDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show IdentDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode IdentDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos IdentDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty IdentDeclDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • Declaration IdentDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep

splitIdentDecls includeAllDecls splits a map of object, function and enumerator declarations and definitions into one map holding declarations, and three maps for object definitions, enumerator definitions and function definitions. If includeAllDecls is True all declarations are present in the first map, otherwise only those where no corresponding definition is available.

Global definitions

Events for visitors

datadata DeclEvent

Declaration events

Those events are reported to callbacks, which are executed during the traversal.

Constructors

Instances2CNode, Pos
  • CNode DeclEventDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos DeclEventDefined in language-c-0.10.2 · Language.C.Analysis.SemRep

Declarations and definitions

datadata Decl

Declarations, which aren't definitions

Constructors

Instances6Data, Show, CNode, Pos, Pretty, Declaration
  • Data DeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show DeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode DeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos DeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty DeclDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • Declaration DeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
datadata ObjDef

Object Definitions

An object definition is a declaration together with an initializer.

If the initializer is missing, it is a tentative definition, i.e. a definition which might be overriden later on.

Instances6Data, Show, CNode, Pos, Pretty, Declaration
  • Data ObjDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show ObjDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode ObjDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos ObjDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty ObjDefDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • Declaration ObjDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
datadata FunDef

Function definitions

A function definition is a declaration together with a statement (the function body).

Instances6Data, Show, CNode, Pos, Pretty, Declaration
  • Data FunDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show FunDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode FunDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos FunDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty FunDefDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • Declaration FunDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
datadata ParamDecl
Instances6Data, Show, CNode, Pos, Pretty, Declaration
  • Data ParamDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show ParamDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode ParamDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos ParamDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty ParamDeclDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • Declaration ParamDeclDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
datadata MemberDecl

Struct/Union member declaration

Constructors

Instances6Data, Show, CNode, Pos, Pretty, Declaration
datadata TypeDef

typedef definitions.

The identifier is a new name for the given type.

Instances5Data, Show, CNode, Pos, Pretty
  • Data TypeDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show TypeDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode TypeDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos TypeDefDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty TypeDefDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan

Declaration attributes

datadata DeclAttrs

Declaration attributes of the form DeclAttrs isInlineFunction storage linkage attrs

They specify the storage and linkage of a declared object.

Constructors

Instances3Data, Show, Pretty
  • Data DeclAttrsDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show DeclAttrsDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty DeclAttrsDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
datadata FunctionAttrs
#
Instances5Eq, Data, Ord, Show, Pretty
datadata Storage

Storage duration and linkage of a variable

Constructors

Instances5Eq, Data, Ord, Show, Pretty
  • Eq StorageDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Data StorageDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Ord StorageDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show StorageDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty StorageDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
datadata Linkage

Linkage: Either no linkage, internal to the translation unit or external

Instances5Eq, Data, Ord, Show, Pretty
  • Eq LinkageDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Data LinkageDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Ord LinkageDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show LinkageDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty LinkageDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan

Types

datadata Type
Instances3Data, Show, Pretty
  • Data TypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show TypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty TypeDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
datadata FunType

Function types are of the form FunType return-type params isVariadic.

If the parameter types aren't yet known, the function has type FunTypeIncomplete type attrs.

Instances2Data, Show
  • Data FunTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show FunTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
datadata ArraySize

An array type may either have unknown size or a specified array size, the latter either variable or constant. Furthermore, when used as a function parameters, the size may be qualified as static. In a function prototype, the size may be `Unspecified variable size' ([*]).

Constructors

Instances2Data, Show
  • Data ArraySizeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show ArraySizeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
classclass HasSUERef a where

accessor class : struct/union/enum names

Methods

Instances6HasSUERef
datadata CompTypeRef

composite type declarations

Instances7Data, Show, CNode, Pos, Pretty, HasCompTyKind, …
datadata CompType

Composite type (struct or union).

Instances7Data, Show, CNode, Pos, Pretty, HasCompTyKind, …
  • Data CompTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show CompTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode CompTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos CompTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty CompTypeDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • HasCompTyKind CompTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • HasSUERef CompTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
datadata CompTyKind

a tag to determine wheter we refer to a struct or union, see CompType.

Instances5Eq, Data, Ord, Show, Pretty
  • Eq CompTyKindDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Data CompTyKindDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Ord CompTyKindDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show CompTyKindDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty CompTyKindDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
datadata EnumTypeRef
#
Instances6Data, Show, CNode, Pos, Pretty, HasSUERef
datadata EnumType

Representation of C enumeration types

Constructors

Instances6Data, Show, CNode, Pos, Pretty, HasSUERef
  • Data EnumTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show EnumTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode EnumTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos EnumTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty EnumTypeDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • HasSUERef EnumTypeDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
datadata Enumerator

An Enumerator consists of an identifier, a constant expressions and the link to its type

Instances6Data, Show, CNode, Pos, Pretty, Declaration
datadata TypeQuals

Type qualifiers: constant, volatile and restrict

Instances5Eq, Data, Ord, Show, Pretty
  • Eq TypeQualsDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Data TypeQualsDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Ord TypeQualsDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show TypeQualsDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty TypeQualsDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan

Variable names

Attributes (STUB, not yet analyzed)

datadata Attr

attribute annotations

Those are of the form Attr attribute-name attribute-parameters, and serve as generic properties of some syntax tree elements.

Some examples:

  • labels can be attributed with unused to indicate that their not used

  • struct definitions can be attributed with packed to tell the compiler to use the most compact representation

  • declarations can be attributed with deprecated

  • function declarations can be attributes with noreturn to tell the compiler that the function will never return,

  • or with const to indicate that it is a pure function

TODO: ultimatively, we want to parse attributes and represent them in a typed way

Constructors

Instances6Data, Show, CNode, Pos, Pretty
  • Data AttrDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Show AttrDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • CNode AttrDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pos AttrDefined in language-c-0.10.2 · Language.C.Analysis.SemRep
  • Pretty AttrDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan
  • Pretty AttributesDefined in language-c-0.10.2 · Language.C.Analysis.Debug · orphan

Statements and Expressions (STUB, aliases to Syntax)

typetype Initializer = CInit

Initializer is currently an alias for CInit.

We're planning a normalized representation, but this depends on the implementation of constant expression evaluation