
Hello, I've been trying to fix some bugs in c2hs, which all seem related to the definition of CDeclr. I'm not quite sure what the actual problem is, so maybe someone can help me out here. I'm referring to the lasted revision from darcs (0.15.2): The problem is that the Parser assumes that the leftmost indirection is represented outermost in the chain of CDeclrs. To illustrate, consider
char * x[];
"x is an array of pointers to char". The parser returns (simplified):
CPtrDeclr (CArrDeclr (CVarDeclr "x"))
I'm not sure if this is an accidental mistake, but in the analysis code, it is assumed that the above declarator is represented as
CArrDeclr (CPtrDeclr (CVarDeclr "x"))
which seems more plausible in my opinion. Should this be fixed in the parser ? Another confusing part: In src/C2HS/C/AST.hs, we find 424: -- * The qualifiers list in a `CPtrDeclr' may not be empty 437: CPtrDeclr [CTypeQual] -- indirections This sounds as if the type qualifiers (const,restrict,volatile) model indirections of pointers, which isn't true of course. This assumption apparently is used in src/C2HS/Gen/Bind.hs: 1066ff:
case declr of (Just (CPtrDeclr [_] declr at), oinit, oexpr) -> return $ CDecl specs [(Just declr, oinit, oexpr)] at (Just (CPtrDeclr (_:quals) declr at), oinit, oexpr) -> return $ CDecl specs [(Just (CPtrDeclr quals declr at), oinit,
oexpr)] at This is just an accidental mistake, I suppose ? best regards, benedikt
participants (1)
-
Benedikt Huber