Minor bug in SpecConstr
authorsimonpj@microsoft.com <unknown>
Tue, 22 Apr 2008 11:52:38 +0000 (11:52 +0000)
committersimonpj@microsoft.com <unknown>
Tue, 22 Apr 2008 11:52:38 +0000 (11:52 +0000)
In SpecConstr.isValue, we recorded a ConVal for a big-lambda,
which seems wrong. I came across this when implementing System IF.
The code now reads:

  isValue env (Lam b e)
    | isTyVar b = case isValue env e of
       Just _  -> Just LambdaVal -- NB!
       Nothing -> Nothing
    | otherwise = Just LambdaVal

compiler/specialise/SpecConstr.lhs

index c9b5998..1897e1a 100644 (file)
@@ -1320,7 +1320,9 @@ isValue env (Var v)
        -- as well, for let-bound constructors!
 
 isValue env (Lam b e)
-  | isTyVar b = isValue env e
+  | isTyVar b = case isValue env e of
+                 Just _  -> Just LambdaVal
+                 Nothing -> Nothing
   | otherwise = Just LambdaVal
 
 isValue _env expr      -- Maybe it's a constructor application