diff -r 583049a98113 -r e3639ce1d4f8 tools/pas2c.hs --- a/tools/pas2c.hs Tue May 08 00:17:02 2012 +0400 +++ b/tools/pas2c.hs Thu May 10 00:58:05 2012 +0400 @@ -270,9 +270,9 @@ let i' = map toLower i v <- gets $ Map.lookup i' . currentScope if (isNothing v) then - return $ text i + modify (\s -> s{lastType = BTUnknown, lastIdentifier = i}) >> return (text i) else - return . text . fst . head . fromJust $ v + let vv = head $ fromJust v in modify (\s -> s{lastType = snd vv, lastIdentifier = fst vv}) >> (return . text . fst $ vv) id2CTyped :: TypeDecl -> Identifier -> State RenderState Doc id2CTyped t (Identifier i _) = do @@ -517,7 +517,13 @@ where type2C' VoidType = return (text "void" <+>) type2C' (String l) = return (text "string255" <+>)--return (text ("string" ++ show l) <+>) - type2C' (PointerTo (SimpleType i)) = liftM (\i a -> text "struct __" <> i <+> text "*" <+> a) $ id2C IODeferred i + type2C' (PointerTo (SimpleType i)) = do + i' <- id2C IODeferred i + lt <- gets lastType + case lt of + BTRecord _ -> return $ \a -> text "struct __" <> i' <+> text "*" <+> a + BTUnknown -> return $ \a -> text "struct __" <> i' <+> text "*" <+> a + _ -> return $ \a -> i' <+> text "*" <+> a type2C' (PointerTo t) = liftM (\t a -> t (parens $ text "*" <> a)) $ type2C t type2C' (RecordType tvs union) = do t <- withState' id $ mapM (tvar2C False) tvs