packages feed

llvm-ffi-tools-0.0.1: src/IntrinsicMangler.hs

module Main (main) where

import qualified Data.ByteString.Char8 as C
import Text.Regex.Posix ((=~~))
import Control.Monad (forM_)
import Data.Maybe (catMaybes)


maybeName :: C.ByteString -> Maybe C.ByteString
maybeName line = do
  ((_:name:_):_) <- line =~~ "^[ \t]*([a-z0-9_]+),[ \t]*//[ \t]*llvm\\."
  return name

main :: IO ()
main = do
  input <- (catMaybes . map maybeName . C.lines) `fmap` C.getContents

  putStrLn "-- automatically generated file - do not edit!"
  putStrLn "module LLVM.Core.Intrinsics (Intrinsic(..)) where"
  putStrLn "data Intrinsic ="
  putStrLn "      NotIntrinsic"
  forM_ input $ C.putStrLn . (C.append (C.pack "    | I_"))
  putStrLn "    deriving (Eq, Ord, Enum, Show)"