module CsoundExpr.Translator.Instr 
    (toInstr, toOpcodeExpr)
where

import qualified Data.Map as Map

import CsoundExpr.Translator.ExprTree.TreeSeq

import qualified CsoundExpr.Translator.Cs.CsTree     as La
import qualified CsoundExpr.Translator.Cs.CsoundFile as Cs

import CsoundExpr.Translator.Types
import CsoundExpr.Translator.AssignmentElimination
import CsoundExpr.Translator.MultiOutsFolding

---------------------------------------------------------------
---------------------------------------------------------------
-- translate intruments


toInstr :: (Id, Instr) -> Cs.Instr
toInstr (id, x) = Cs.Instr id $ toOpcodeExpr x


---------------------------------------------------------------
---------------------------------------------------------------
-- translate opcodes 


toOpcodeExpr :: Instr -> [Cs.OpcodeExpr]
toOpcodeExpr = foldMultiOuts  . eliminateAssignment . 
               reduceAdjLists . adjLists 0