Map local variables in IR to their original names

This commit is contained in:
2024-11-10 21:57:30 +01:00
parent 060496fc6e
commit e9a22addcc
5 changed files with 233 additions and 287 deletions

View File

@ -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

View File

@ -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