module Codegen.Utils where
import qualified Data.ByteString.Short as BS
import qualified LLVM.AST as AST
stringToByteString :: String -> BS.ShortByteString
stringToByteString :: String -> ShortByteString
stringToByteString = [Word8] -> ShortByteString
BS.pack ([Word8] -> ShortByteString)
-> (String -> [Word8]) -> String -> ShortByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Word8) -> String -> [Word8]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Word8) -> (Char -> Int) -> Char -> Word8
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Int
forall a. Enum a => a -> Int
fromEnum)
byteStringToString :: BS.ShortByteString -> String
byteStringToString :: ShortByteString -> String
byteStringToString = (Word8 -> Char) -> [Word8] -> String
forall a b. (a -> b) -> [a] -> [b]
map (Int -> Char
forall a. Enum a => Int -> a
toEnum (Int -> Char) -> (Word8 -> Int) -> Word8 -> Char
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) ([Word8] -> String)
-> (ShortByteString -> [Word8]) -> ShortByteString -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShortByteString -> [Word8]
BS.unpack
nameToString :: AST.Name -> String
nameToString :: Name -> String
nameToString (AST.Name ShortByteString
n) = ShortByteString -> String
byteStringToString ShortByteString
n
nameToString (AST.UnName Word
n) = Word -> String
forall a. Show a => a -> String
show Word
n