From 402d28014e1e95c1fa8706c3648519a89a9e0e0f Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Thu, 5 Sep 2024 21:56:07 +0200 Subject: A simple embedded frontend --- src/Language/Tag.hs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/Language/Tag.hs (limited to 'src/Language/Tag.hs') diff --git a/src/Language/Tag.hs b/src/Language/Tag.hs new file mode 100644 index 0000000..9356073 --- /dev/null +++ b/src/Language/Tag.hs @@ -0,0 +1,22 @@ +{-# LANGUAGE BangPatterns #-} +module Language.Tag ( + Tag(..), genTag, +) where + +import Data.IORef +import System.IO.Unsafe + +import AST + + +data Tag t = Tag (STy t) Int + deriving (Show) + +{-# NOINLINE tagCounter #-} +tagCounter :: IORef Int +tagCounter = unsafePerformIO $ newIORef 1 + +{-# NOINLINE genTag #-} +genTag :: handle -> STy t -> Tag t +genTag !_ ty = + unsafePerformIO $ Tag ty <$> atomicModifyIORef' tagCounter (\i -> (succ i, i)) -- cgit v1.2.3-70-g09d2