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 |