From 703bfe1afe5a3b2bcc26906413fa62686e6b1a42 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 19 May 2009 12:58:22 +0000 Subject: [PATCH] Added better error messages for problems with C types in the backend --- backends/GenerateC.hs | 9 ++++++--- backends/GenerateCBased.hs | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/backends/GenerateC.hs b/backends/GenerateC.hs index 491ea73..239d3cc 100644 --- a/backends/GenerateC.hs +++ b/backends/GenerateC.hs @@ -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 diff --git a/backends/GenerateCBased.hs b/backends/GenerateCBased.hs index 3000b4f..2935fa8 100644 --- a/backends/GenerateCBased.hs +++ b/backends/GenerateCBased.hs @@ -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