diff options
| author | Mirek Kratochvil <exa.exa@gmail.com> | 2023-01-03 23:33:54 +0100 |
|---|---|---|
| committer | Mirek Kratochvil <exa.exa@gmail.com> | 2023-01-03 23:33:54 +0100 |
| commit | 3cc35a9414a8ba102a63af64bc5647ea75bc10b2 (patch) | |
| tree | 42033391b50822737b8849994849563a4523d3ba /app/IR.hs | |
| parent | dc13c4d5dfd0da1f0bcf8b5a9ffa760220d628c9 (diff) | |
| download | prlg-3cc35a9414a8ba102a63af64bc5647ea75bc10b2.tar.gz prlg-3cc35a9414a8ba102a63af64bc5647ea75bc10b2.tar.bz2 | |
numbers
Diffstat (limited to 'app/IR.hs')
| -rw-r--r-- | app/IR.hs | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -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 |
