From: Christiaan Baaij Date: Thu, 25 Mar 2010 08:52:36 +0000 (+0100) Subject: Merge branch 'master' of http://git.stderr.nl/matthijs/master-project/cλash X-Git-Url: https://git.stderr.nl/gitweb?a=commitdiff_plain;h=6a943c79c8f7d6247e0b3336046b8a41c88e72f1;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git Merge branch 'master' of git.stderr.nl/matthijs/master-project/cλash Conflicts: cλash/CLasH/Normalize.hs cλash/CLasH/Normalize/NormalizeTools.hs --- 6a943c79c8f7d6247e0b3336046b8a41c88e72f1 diff --cc "c\316\273ash/CLasH/Normalize.hs" index 2e341cf,2fc34c6..31474d5 --- "a/c\316\273ash/CLasH/Normalize.hs" +++ "b/c\316\273ash/CLasH/Normalize.hs" @@@ -416,14 -444,16 +444,16 @@@ classopresolution expr@(App (App (Var s Nothing -> return expr Just cls -> case collectArgs dict of (_, []) -> return expr -- Dict is not an application (e.g., not inlined yet) - (dictdc, (ty':selectors)) | tyargs_neq ty ty' -> error $ "Normalize.classopresolution: Applying class selector to dictionary without matching type?\n" ++ pprString expr + (Var dictdc, (ty':selectors)) | not (Maybe.isJust (Id.isDataConId_maybe dictdc)) -> return expr -- Dictionary is not a datacon yet (but e.g., a top level binder) - | tyargs_neq ty ty' -> error $ "Applying class selector to dictionary without matching type?\n" ++ pprString expr ++ | tyargs_neq ty ty' -> error $ "Normalize.classopresolution: Applying class selector to dictionary without matching type?\n" ++ pprString expr | otherwise -> let selector_ids = Class.classSelIds cls in -- Find the selector used in the class' list of selectors case List.elemIndex sel selector_ids of - Nothing -> error $ "Selector not found in class' selector list? This should not happen!\nExpression: " ++ pprString expr ++ "\nClass: " ++ show cls ++ "\nSelectors: " ++ show selector_ids + Nothing -> error $ "Normalize.classopresolution: Selector not found in class' selector list? This should not happen!\nExpression: " ++ pprString expr ++ "\nClass: " ++ show cls ++ "\nSelectors: " ++ show selector_ids -- Get the corresponding argument from the dictionary Just n -> change (selectors!!n) + (_, _) -> return expr -- Not applying a variable? Don't touch where -- Compare two type arguments, returning True if they are _not_ -- equal