packages feed

fortran-src-0.7.0: src/Language/Fortran/Lexer/FixedForm/Utils.hs

module Language.Fortran.Lexer.FixedForm.Utils where

import           Language.Fortran.Lexer.FixedForm
import           Language.Fortran.AST
import           Language.Fortran.AST.RealLit
import           Language.Fortran.Util.Position

makeReal :: Maybe Token -> Maybe Token -> Maybe Token -> Maybe (SrcSpan, String) -> Expression A0
makeReal i1 dot i2 expr =
  let span1   = getSpan (i1, dot, i2)
      span2   = case expr of
                  Just e -> getTransSpan span1 (fst e)
                  Nothing -> span1
      i1Str   = case i1 of { Just (TInt _ s) -> s ; _ -> "" }
      dotStr  = case dot of { Just (TDot _) -> "." ; _ -> "" }
      i2Str   = case i2 of { Just (TInt _ s) -> s ; _ -> "" }
      exprStr  = case expr of { Just (_, s) -> s ; _ -> "" }
      litStr  = i1Str ++ dotStr ++ i2Str ++ exprStr
   in ExpValue () span2 $ ValReal (parseRealLit litStr) Nothing