diff options
| author | krasimir <krasimir@chalmers.se> | 2009-11-07 15:30:57 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2009-11-07 15:30:57 +0000 |
| commit | 2a22325678bac22d16ece1c357e9a9858dc66897 (patch) | |
| tree | 13c3a79ab813a5ca04d15bc74587f51535677d18 /src/GF/Grammar | |
| parent | 7c513609f03c5719e0a15c61b7d44abc8d6b56d6 (diff) | |
check grammar should process the definitions in dependency order. This also ensures that the list of parameters for some parameter type is complete
Diffstat (limited to 'src/GF/Grammar')
| -rw-r--r-- | src/GF/Grammar/Lookup.hs | 24 |
1 files changed, 4 insertions, 20 deletions
diff --git a/src/GF/Grammar/Lookup.hs b/src/GF/Grammar/Lookup.hs index 0cd46a9b9..ef1395d1f 100644 --- a/src/GF/Grammar/Lookup.hs +++ b/src/GF/Grammar/Lookup.hs @@ -140,28 +140,12 @@ allOrigInfos gr m = errVal [] $ do where look = lookupOrigInfo gr m -lookupParams :: SourceGrammar -> Ident -> Ident -> Err ([Param],Maybe [Term]) -lookupParams gr = look True where - look isTop m c = do - mo <- lookupModule gr m - info <- lookupIdentInfo mo c - case info of - ResParam (Just psm) m -> return (psm,m) - AnyInd _ n -> look False n c - _ -> Bad $ render (ppIdent c <+> text "has no parameters defined in resource" <+> ppIdent m) - lookExt m c = - checks [look False n c | n <- allExtensions gr m] - lookupParamValues :: SourceGrammar -> Ident -> Ident -> Err [Term] lookupParamValues gr m c = do - (ps,mpv) <- lookupParams gr m c - case mpv of - Just ts -> return ts - _ -> liftM concat $ mapM mkPar ps - where - mkPar (f,co) = do - vs <- liftM combinations $ mapM (\(_,_,ty) -> allParamValues gr ty) co - return $ map (mkApp (QC m f)) vs + (_,info) <- lookupOrigInfo gr m c + case info of + ResParam _ (Just pvs) -> return pvs + _ -> Bad $ render (ppIdent c <+> text "has no parameter values defined in resource" <+> ppIdent m) allParamValues :: SourceGrammar -> Type -> Err [Term] allParamValues cnc ptyp = case ptyp of |
