From faceaffe792c597f5a374a8bda86ba2e474d4b50 Mon Sep 17 00:00:00 2001 From: krasimir Date: Thu, 17 Jun 2010 09:51:10 +0000 Subject: [PATCH] GF.Grammar.Lookup.allParamValues now works for table types as well --- src/compiler/GF/Grammar/Lookup.hs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/compiler/GF/Grammar/Lookup.hs b/src/compiler/GF/Grammar/Lookup.hs index c355056d5..d1473bbcd 100644 --- a/src/compiler/GF/Grammar/Lookup.hs +++ b/src/compiler/GF/Grammar/Lookup.hs @@ -133,15 +133,20 @@ lookupParamValues gr c = do _ -> Bad $ render (ppQIdent Qualified c <+> text "has no parameter values defined") allParamValues :: SourceGrammar -> Type -> Err [Term] -allParamValues cnc ptyp = case ptyp of - _ | Just n <- isTypeInts ptyp -> return [EInt i | i <- [0..n]] - QC c -> lookupParamValues cnc c - Q c -> lookupResDef cnc c >>= allParamValues cnc - RecType r -> do +allParamValues cnc ptyp = + case ptyp of + _ | Just n <- isTypeInts ptyp -> return [EInt i | i <- [0..n]] + QC c -> lookupParamValues cnc c + Q c -> lookupResDef cnc c >>= allParamValues cnc + RecType r -> do let (ls,tys) = unzip $ sortByFst r tss <- mapM (allParamValues cnc) tys return [R (zipAssign ls ts) | ts <- combinations tss] - _ -> Bad (render (text "cannot find parameter values for" <+> ppTerm Unqualified 0 ptyp)) + Table pt vt -> do + pvs <- allParamValues cnc pt + vvs <- allParamValues cnc vt + return [V pt ts | ts <- combinations (replicate (length pvs) vvs)] + _ -> Bad (render (text "cannot find parameter values for" <+> ppTerm Unqualified 0 ptyp)) where -- to normalize records and record types sortByFst = sortBy (\ x y -> compare (fst x) (fst y))