From 54993bce121e43c30eb51e8fbb172b413e892bb3 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Tue, 11 Jan 2022 12:48:14 +0100 Subject: [PATCH] deepForce VSymCat --- src/compiler/GF/Compile/GeneratePMCFG.hs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/compiler/GF/Compile/GeneratePMCFG.hs b/src/compiler/GF/Compile/GeneratePMCFG.hs index 33f478b2f..f6a57c1b6 100644 --- a/src/compiler/GF/Compile/GeneratePMCFG.hs +++ b/src/compiler/GF/Compile/GeneratePMCFG.hs @@ -28,6 +28,7 @@ import qualified Data.Map.Strict as Map import qualified Data.Sequence as Seq import Data.List(mapAccumL,sortOn,sortBy) import Data.Maybe(fromMaybe,isNothing) +import Debug.Trace generatePMCFG :: Options -> FilePath -> SourceGrammar -> SourceModule -> Check SourceModule generatePMCFG opts cwd gr cmo@(cm,cmi) @@ -181,6 +182,15 @@ deepForce (VApp q tnks) = mapM_ (\tnk -> force tnk >>= deepForce) tnks deepForce (VC v1 v2) = deepForce v1 >> deepForce v2 deepForce (VAlts def alts) = do deepForce def mapM_ (\(v,_) -> deepForce v) alts +deepForce (VSymCat d r rs) = mapM_ (\(_,(tnk,_)) -> force tnk >>= deepForce) rs + where + compute r' [] = return (r',[]) + compute r' ((cnt',(tnk,ty)):tnks) = do + v <- force tnk + (r, rs,_) <- param2int v ty + (r',rs' ) <- compute r' tnks + return (r*cnt'+r',combine cnt' rs rs') + deepForce _ = return () str2lin (VApp q [])