%if false  
  Copyright (c) 2009, ETH Zurich.
  All rights reserved.
  
  This file is distributed under the terms in the attached LICENSE file.
  If you do not find this file, copies can be found by writing to:
  ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
%endif

%include polycode.fmt


> module Expressions where

> import Semantics
> import Constructs
> import PureExpressions

> import IL.FoF.FoF



> data Heap = Hp { freshLoc :: Int ,
>                  refMap :: [(VarName, Data)],
>                  freshSLoc :: Int,
>                  strMap :: [(VarName, [(String, Data)])],
>                  freshALoc :: Int,
>                  arrayMap :: [(VarName, [Data])]}

> runAlgebra :: FoFConst (Heap -> (PureExpr, Heap)) -> 
>               (Heap -> (PureExpr, Heap))



> data Binding = Binding { freshVar :: Int ,
>                          defStructs :: [(String,TypeExpr)],
>                          defUnions :: [(String,TypeExpr)],
>                          defEnums :: [(String, [(String, Int)])] }

> compileAlgebra :: FoFConst (Binding -> (ILFoF, Binding)) ->
>                   (Binding -> (ILFoF, Binding))