From be1de111ce61871aef3755dfecc58a1bad848b57 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 8 Aug 2025 09:19:14 +0200 Subject: [PATCH] support pattern definitions inside pre --- src/compiler/api/GF/Compile/GeneratePMCFG.hs | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/compiler/api/GF/Compile/GeneratePMCFG.hs b/src/compiler/api/GF/Compile/GeneratePMCFG.hs index b5861b350..952c65730 100644 --- a/src/compiler/api/GF/Compile/GeneratePMCFG.hs +++ b/src/compiler/api/GF/Compile/GeneratePMCFG.hs @@ -214,11 +214,26 @@ str2lin (VSymCat d r rs) = do (r, rs) <- compute r rs str2lin (VSymVar d r) = return [SymVar d r] str2lin VEmpty = return [] str2lin (VC v1 v2) = liftM2 (++) (str2lin v1) (str2lin v2) -str2lin (VAlts def alts) = do def <- str2lin def - alts <- forM alts $ \(v,VStrs vs) -> do - lin <- str2lin v - return (lin,[s | VStr s <- vs]) +str2lin v0@(VAlts def alts) + = do def <- str2lin def + alts <- forM alts $ \(v1,v2) -> do + lin <- str2lin v1 + ss <- to_strs v2 + return (lin,ss) return [SymKP def alts] + where + to_strs (VStrs vs) = mapM to_str vs + to_strs (VPatt _ _ p) = from_patt p + to_strs v = fail + + to_str (VStr s) = return s + to_str _ = fail + + from_patt (PAlt p1 p2) = liftM2 (++) (from_patt p1) (from_patt p2) + from_patt (PString s) = return [s] + from_patt _ = fail + + fail = evalError ("Complex patterns are not supported in:" $$ nest 2 (pp (showValue v0))) str2lin v = do t <- value2term False [] v evalError ("the string:" <+> ppTerm Unqualified 0 t $$ "cannot be evaluated at compile time.")