{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE PatternGuards #-}
module Language.Fortran.Transformation.Disambiguation.Intrinsic (disambiguateIntrinsic) where
import Prelude hiding (lookup)
import Data.Generics.Uniplate.Data
import Data.Data
import Language.Fortran.Analysis
import Language.Fortran.AST
import Language.Fortran.Transformation.TransformMonad
disambiguateIntrinsic :: Data a => Transform a ()
disambiguateIntrinsic = modifyProgramFile (trans expression)
where
trans = (transformBi :: Data a => TransFunc Expression ProgramFile a)
expression e@(ExpValue a s (ValVariable v))
| Just (IDType _ (Just CTIntrinsic)) <- idType a = ExpValue a s (ValIntrinsic v)
expression e = e