From 3cc35a9414a8ba102a63af64bc5647ea75bc10b2 Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Tue, 3 Jan 2023 23:33:54 +0100 Subject: numbers --- app/IR.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'app/IR.hs') diff --git a/app/IR.hs b/app/IR.hs index cfb0b9a..fef193b 100644 --- a/app/IR.hs +++ b/app/IR.hs @@ -1,5 +1,6 @@ module IR where +import Data.Char (isNumber) import Data.List (mapAccumL) import qualified Data.Map as M @@ -18,7 +19,8 @@ data Id = data PrlgInt = CallI Int [PrlgInt] - | LiteralI Int + | AtomI Int + | NumI Int | ListI [PrlgInt] (Maybe PrlgInt) -- only exists before desugaring | VarI Int Int -- VarI localIndex strTableString | VoidI @@ -38,7 +40,9 @@ strtablize t@(StrTable nxt fwd rev) str = internPrlg :: StrTable -> PrlgStr -> (StrTable, PrlgInt) internPrlg = go where - go t (LiteralS str) = LiteralI <$> strtablize t str + go t (LiteralS str) + | all isNumber str = (t, NumI $ read str) + | otherwise = AtomI <$> strtablize t str go t (CallS str ps) = let (t', i) = strtablize t str in CallI i <$> mapAccumL go t' ps -- cgit v1.2.3