Map local variables in IR to their original names
This commit is contained in:
@ -4,10 +4,13 @@ module Language.Elna.Backend.Allocator
|
||||
, allocate
|
||||
) where
|
||||
|
||||
import Data.HashMap.Strict (HashMap)
|
||||
import Data.Vector (Vector)
|
||||
import Language.Elna.Backend.Intermediate (Operand(..), Quadruple(..), Variable(..))
|
||||
import Language.Elna.Location (Identifier(..))
|
||||
import Language.Elna.Backend.Intermediate
|
||||
( ProcedureQuadruples(..)
|
||||
, Operand(..)
|
||||
, Quadruple(..)
|
||||
, Variable(..)
|
||||
)
|
||||
|
||||
newtype Store r = Store r
|
||||
|
||||
@ -18,9 +21,10 @@ newtype MachineConfiguration r = MachineConfiguration
|
||||
allocate
|
||||
:: forall r
|
||||
. MachineConfiguration r
|
||||
-> HashMap Identifier (Vector (Quadruple Variable))
|
||||
-> HashMap Identifier (Vector (Quadruple (Store r)))
|
||||
allocate MachineConfiguration{..} = fmap function
|
||||
-> ProcedureQuadruples Variable
|
||||
-> ProcedureQuadruples (Store r)
|
||||
allocate MachineConfiguration{..} (ProcedureQuadruples quadruples) =
|
||||
ProcedureQuadruples $ function <$> quadruples
|
||||
where
|
||||
function :: Vector (Quadruple Variable) -> Vector (Quadruple (Store r))
|
||||
function = fmap quadruple
|
||||
|
@ -1,14 +1,18 @@
|
||||
module Language.Elna.Backend.Intermediate
|
||||
( Operand(..)
|
||||
( ProcedureQuadruples(..)
|
||||
, Operand(..)
|
||||
, Quadruple(..)
|
||||
, Label(..)
|
||||
, Variable(..)
|
||||
) where
|
||||
|
||||
import Data.Int (Int32)
|
||||
import Data.HashMap.Strict (HashMap)
|
||||
import Data.Vector (Vector)
|
||||
import Data.Word (Word32)
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as Text
|
||||
import Language.Elna.Location (Identifier(..))
|
||||
|
||||
newtype Label = Label { unLabel :: Text }
|
||||
deriving Eq
|
||||
@ -30,6 +34,10 @@ data Operand v
|
||||
| VariableOperand v
|
||||
deriving (Eq, Show)
|
||||
|
||||
newtype ProcedureQuadruples v =
|
||||
ProcedureQuadruples (HashMap Identifier (Vector (Quadruple v)))
|
||||
deriving (Eq, Show)
|
||||
|
||||
data Quadruple v
|
||||
= StartQuadruple
|
||||
| StopQuadruple
|
||||
|
Reference in New Issue
Block a user