forked from GitHub/gf-core
GF.Compile.Coding: cleaner code
Refine function codeTerm into codeTerm, codeLTerm and codeLTerms.
This commit is contained in:
@@ -21,14 +21,19 @@ codeSourceModule :: (String -> String) -> SourceModule -> SourceModule
|
||||
codeSourceModule co (id,mo) = (id,replaceJudgements mo (mapTree codj (jments mo)))
|
||||
where
|
||||
codj (c,info) = case info of
|
||||
ResOper pty pt -> ResOper (fmap (codeTerm co) pty) (fmap (codeTerm co) pt)
|
||||
ResOverload es tyts -> ResOverload es [(codeTerm co ty,codeTerm co t) | (ty,t) <- tyts]
|
||||
CncCat pty pt mpr -> CncCat pty (fmap (codeTerm co) pt) (fmap (codeTerm co) mpr)
|
||||
CncFun mty pt mpr -> CncFun mty (fmap (codeTerm co) pt) (fmap (codeTerm co) mpr)
|
||||
ResOper pty pt -> ResOper (codeLTerms co pty) (codeLTerms co pt)
|
||||
ResOverload es tyts -> ResOverload es [(codeLTerm co ty,codeLTerm co t) | (ty,t) <- tyts]
|
||||
CncCat pty pt mpr -> CncCat pty (codeLTerms co pt) (codeLTerms co mpr)
|
||||
CncFun mty pt mpr -> CncFun mty (codeLTerms co pt) (codeLTerms co mpr)
|
||||
_ -> info
|
||||
|
||||
codeTerm :: (String -> String) -> L Term -> L Term
|
||||
codeTerm co (L loc t) = L loc (codt t)
|
||||
codeLTerms co = fmap (codeLTerm co)
|
||||
|
||||
codeLTerm :: (String -> String) -> L Term -> L Term
|
||||
codeLTerm = fmap . codeTerm
|
||||
|
||||
codeTerm :: (String -> String) -> Term -> Term
|
||||
codeTerm co = codt
|
||||
where
|
||||
codt t = case t of
|
||||
K s -> K (co s)
|
||||
|
||||
@@ -176,7 +176,7 @@ execute1 opts gfenv0 s0 =
|
||||
|
||||
case runP pExp (encodeUnicode utf8 s) of
|
||||
Left (_,msg) -> putStrLn msg
|
||||
Right t -> case checkComputeTerm sgr (unLoc (codeTerm (decodeUnicode utf8 . BS.pack) (L (0,0) t))) of
|
||||
Right t -> case checkComputeTerm sgr (codeTerm (decodeUnicode utf8 . BS.pack) t) of
|
||||
Ok x -> putStrLn $ showTerm sgr style q x
|
||||
Bad s -> putStrLn $ s
|
||||
continue gfenv
|
||||
|
||||
Reference in New Issue
Block a user