module GcodeSpec(gcodeZCon,fixProfstatic,compilerProfstatic) where import IntState import Gcode import GcodeLow(con0,profstatic,profconstructor,profproducer,profmodule) import Maybe gcodeZCon prof state [] = [] gcodeZCon prof state (d:ccs) = let dataInfo = (fromJust . lookupIS state) d cons = map (\(c,n)-> (0==arityIS state c, fromEnum c, n)) (zip (constrsI dataInfo) [0::Int ..]) label = let ie = expI dataInfo in if ie `elem` [IEall,IEsome] then GLOBAL else LOCAL cnos = map (\(z,c,n)-> if z then label con0 c : DATA_CON 0 n : compilerProfstatic prof state c else []) cons in cnos ++ (if prof then map (createProfs state) cons else []) ++ gcodeZCon prof state ccs compilerProfstatic True state i = [ DATA_GLB profstatic i , DATA_CREATE , DATA_W 0 , DATA_W 0] compilerProfstatic False state i = [] createProfs state (z,c,n) = -- !!! Need int for module/type [ GLOBAL profproducer c , GLOBAL profconstructor c , DATA_S (strIS state (toEnum c)) , ALIGN , LOCAL profstatic c , DATA_GLB profproducer c , DATA_GLB profproducer c , DATA_GLB profconstructor c ] fixProfstatic state ((p,c),i) = -- !!! Need int for module/type [ LOCAL profstatic i , DATA_GLB profmodule (fromEnum (miIS state)) , DATA_GLB profproducer p , DATA_GLB profconstructor c ]