X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=gen.icl;h=819da198aa1e3a7c7708dc178870eb88178399ce;hb=71530c0c988ba735360e6dffd8a1b3028880adef;hp=0fc8bc04d522ea29e1d4e9ba349beaef295ca2bd;hpb=552f09db0d73eca583d297abd7114462fd87646d;p=cc1516.git diff --git a/gen.icl b/gen.icl index 0fc8bc0..819da19 100644 --- a/gen.icl +++ b/gen.icl @@ -1,6 +1,5 @@ implementation module gen - import StdMisc import StdList import StdOverloaded @@ -44,12 +43,12 @@ FALSE :== 0 :: Gen a :== RWST Label SSMProgram (GenMap, [Label]) (Either GenError) a labelStream :: [Label] -labelStream = map (\i-> concat ["lbl_", toString i]) [1..] +labelStream = ["lbl_" +++ toString i\\i<-[1..]] -gen :: AST -> String +gen :: AST -> Either String String gen (AST fds) = case evalRWST prog "" ('Map'.newMap, labelStream) of - Left (Error e) = e - Right (_, p) = toString p + Left (Error e) = Left e + Right (_, p) = Right $ toString p where prog = tell [Instr "bra" [L "main"] ""] >>| mapM_ g fds //gen _ = prog @@ -76,6 +75,7 @@ gen (AST fds) = case evalRWST prog "" ('Map'.newMap, labelStream) of //helper functions for the gen monad genMap :: Gen GenMap genMap = gets fst + changeGenMap :: (GenMap -> GenMap) -> Gen GenMap changeGenMap f = modify (appFst f) >>| genMap @@ -218,4 +218,4 @@ instance toString Arg where toString (Raw s) = s instance toString SSMProgram where - toString p = concat $ intersperse " " $ map (\i-> concat $ intersperse " " $ print i) p \ No newline at end of file + toString p = concat $ intersperse " " $ map (\i-> concat $ intersperse " " $ print i) p