diff --git a/src/ComputeAST.hs b/src/ComputeAST.hs index 020920a..361a188 100644 --- a/src/ComputeAST.hs +++ b/src/ComputeAST.hs @@ -7,6 +7,7 @@ module ComputeAST ( + computeAST, computeAllAST ) where @@ -92,12 +93,14 @@ computeTree env tree = computeTree env (resolveDeepestNode env tree) ------------ COMPUTE AST ------------ -- Call appropriate function depending on the node -computeAST :: Env -> [Atom] -> Tree -> (Env, [Atom]) -computeAST env atoms tree@(Node "define" _ _) = (registerDefine env tree, atoms) -computeAST env atoms tree = (env, atoms ++ [computeTree env tree]) +computeAST :: Env -> Tree -> (Env, Maybe Atom) +computeAST env tree@(Node "define" _ _) = (registerDefine env tree, Nothing) +computeAST env tree = (env, Just (computeTree env tree)) -- Call computeAST on every tree in the list computeAllAST :: Env -> [Tree] -> [Atom] computeAllAST _ [] = [] -computeAllAST env (tree:rest) = atoms ++ computeAllAST newEnv rest - where (newEnv, atoms) = computeAST env [] tree +computeAllAST env (tree:rest) = case atom of + Just atom -> atom : computeAllAST newEnv rest + Nothing -> computeAllAST newEnv rest + where (newEnv, atom) = computeAST env tree diff --git a/src/Defines.hs b/src/Defines.hs index 9cae72b..9a6bae2 100644 --- a/src/Defines.hs +++ b/src/Defines.hs @@ -25,6 +25,10 @@ data Env = Env { defines :: [Define] } deriving (Show) +instance Eq Env where + (Env []) == (Env []) = True + _ == _ = True + -- Register a define in the Defines list registerDefine :: Env -> Tree -> Env registerDefine env