tools/pas2c.hs
changeset 6887 19d77932ea91
parent 6886 4463ee51c9ec
child 6891 ab9843957664
equal deleted inserted replaced
6886:4463ee51c9ec 6887:19d77932ea91
   373 initExpr2C (InitRange (Range i)) = id2C IOLookup i
   373 initExpr2C (InitRange (Range i)) = id2C IOLookup i
   374 initExpr2C (InitRange (RangeFromTo (InitNumber "0") (InitNumber a))) = return . text $ show (read a + 1)
   374 initExpr2C (InitRange (RangeFromTo (InitNumber "0") (InitNumber a))) = return . text $ show (read a + 1)
   375 initExpr2C (InitRange a) = return $ text "<<range>>"
   375 initExpr2C (InitRange a) = return $ text "<<range>>"
   376 initExpr2C (InitSet []) = return $ text "0"
   376 initExpr2C (InitSet []) = return $ text "0"
   377 initExpr2C (InitSet a) = return $ text "<<set>>"
   377 initExpr2C (InitSet a) = return $ text "<<set>>"
   378 initExpr2C (BuiltInFunction {}) = return $ text "<<built-in function>>"
   378 initExpr2C (BuiltInFunction "low" [InitReference e]) = return $ 
       
   379     case e of
       
   380          (Identifier "LongInt" _) -> int (-2^31)
       
   381          _ -> error $ show e
       
   382 initExpr2C (BuiltInFunction "succ" [InitReference e]) = liftM (<> text " + 1") $ id2C IOLookup e
       
   383 initExpr2C b@(BuiltInFunction _ _) = error $ show b    
   379 initExpr2C a = error $ "initExpr2C: don't know how to render " ++ show a
   384 initExpr2C a = error $ "initExpr2C: don't know how to render " ++ show a
       
   385 
   380 
   386 
   381 range2C :: InitExpression -> State RenderState [Doc]
   387 range2C :: InitExpression -> State RenderState [Doc]
   382 range2C (InitString [a]) = return [quotes $ text [a]]
   388 range2C (InitString [a]) = return [quotes $ text [a]]
   383 range2C (InitRange (Range i)) = liftM (flip (:) []) $ id2C IOLookup i
   389 range2C (InitRange (Range i)) = liftM (flip (:) []) $ id2C IOLookup i
   384 range2C (InitRange (RangeFromTo (InitString [a]) (InitString [b]))) = return $ map (\i -> quotes $ text [i]) [a..b]
   390 range2C (InitRange (RangeFromTo (InitString [a]) (InitString [b]))) = return $ map (\i -> quotes $ text [i]) [a..b]
   411                 t <- withState' id $ mapM (tvar2C False) tvs
   417                 t <- withState' id $ mapM (tvar2C False) tvs
   412                 return $ text "struct" $+$ braces (nest 4 (vcat . map (<> semi) . concat $ t)) <> semi
   418                 return $ text "struct" $+$ braces (nest 4 (vcat . map (<> semi) . concat $ t)) <> semi
   413     type2C' (RangeType r) = return (text "<<range type>>" <+>)
   419     type2C' (RangeType r) = return (text "<<range type>>" <+>)
   414     type2C' (Sequence ids) = do
   420     type2C' (Sequence ids) = do
   415         is <- mapM (id2C IOInsert . setBaseType bt) ids
   421         is <- mapM (id2C IOInsert . setBaseType bt) ids
   416         return (text "enum" <+> (braces . vcat . punctuate comma . map (\(a, b) -> a <+> equals <+> text "0x" <> text (showHex b "")) $ zip is (iterate (*2) 1)) <+>)
   422         return (text "enum" <+> (braces . vcat . punctuate comma . map (\(a, b) -> a <+> equals <+> text "0x" <> text (showHex b "")) $ zip is [1..]) <+>)
   417         where
   423         where
   418             bt = BTEnum $ map (\(Identifier i _) -> map toLower i) ids
   424             bt = BTEnum $ map (\(Identifier i _) -> map toLower i) ids
   419     type2C' (ArrayDecl Nothing t) = do
   425     type2C' (ArrayDecl Nothing t) = do
   420         t' <- type2C t
   426         t' <- type2C t
   421         return $ \i -> t' i <> brackets empty
   427         return $ \i -> t' i <> brackets empty