Added better error messages for problems with C types in the backend
This commit is contained in:
parent
2c7fc86533
commit
703bfe1afe
|
@ -701,7 +701,8 @@ cgenVariableWithAM checkValid v am fct
|
|||
ct <- call getCType m t am >>* fct
|
||||
-- Temporary, for debugging:
|
||||
-- tell ["/* ", show (snd iv), " , trying to get: ", show ct, " */"]
|
||||
dressUp m iv ct
|
||||
vtext <- showCode v
|
||||
dressUp (m, "for variable: " ++ vtext) iv ct
|
||||
where
|
||||
m = findMeta v
|
||||
|
||||
|
@ -724,13 +725,15 @@ cgenVariableWithAM checkValid v am fct
|
|||
return (do tell ["("]
|
||||
cast
|
||||
tell ["(("]
|
||||
dressUp m (cg, ct) (Pointer $ Plain "mt_array_t")
|
||||
vtext <- showCode v
|
||||
dressUp (m, "for variable: " ++ vtext) (cg, ct) (Pointer $ Plain "mt_array_t")
|
||||
tell [")->data))"]
|
||||
, Pointer $ innerCT)
|
||||
_ -> inner v
|
||||
inner wholeV@(A.DirectedVariable m dir v)
|
||||
= do (cg, ctInner) <- inner v
|
||||
let cg' = dressUp m (cg, ctInner) (stripPointers ctInner)
|
||||
vtext <- showCode v
|
||||
let cg' = dressUp (m, "for variable: " ++ vtext) (cg, ctInner) (stripPointers ctInner)
|
||||
t <- astTypeOf v
|
||||
wholeT <- astTypeOf wholeV
|
||||
ct <- call getCType m wholeT A.Original
|
||||
|
|
|
@ -319,7 +319,7 @@ closeEnough _ _ = False
|
|||
|
||||
-- Given some code to generate, and its type, and the type that you actually want,
|
||||
-- adds the required decorators. Only pass it simplified types!
|
||||
dressUp :: Meta -> (CGen (), CType) -> CType -> CGen ()
|
||||
dressUp :: (Meta, String) -> (CGen (), CType) -> CType -> CGen ()
|
||||
dressUp _ (gen, t) t' | t `closeEnough` t' = gen
|
||||
--Every line after here is not close enough, so we know equality fails:
|
||||
dressUp m (gen, Pointer t) (Pointer t')
|
||||
|
@ -332,8 +332,8 @@ dressUp m (gen, t) (Pointer t')
|
|||
= dressUp m (tell ["&"] >> gen, t) t'
|
||||
dressUp m (gen, Pointer t) t'
|
||||
= dressUp m (tell ["*"] >> gen, t) t'
|
||||
dressUp m (gen, t) t'
|
||||
= dieP m $ "Types cannot be brought together: " ++ show t ++ " and " ++ show t'
|
||||
dressUp (m, s) (gen, t) t'
|
||||
= dieP m $ "Types cannot be brought together (" ++ s ++ "): " ++ show t ++ " and " ++ show t'
|
||||
|
||||
genType :: A.Type -> CGen ()
|
||||
genType t = do ct <- call getCType emptyMeta t A.Original
|
||||
|
|
Loading…
Reference in New Issue
Block a user