Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master
http://hackage.haskell.org/trac/ghc/changeset/9330f8d055e9e1113cecbf4e57b9f6a750fe0291 >--------------------------------------------------------------- commit 9330f8d055e9e1113cecbf4e57b9f6a750fe0291 Author: Ian Lynagh <[email protected]> Date: Sun Apr 3 15:23:38 2011 +0100 Fix parsing constructors containing dots; fixes trac #4891 >--------------------------------------------------------------- compiler/ghci/Linker.lhs | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/compiler/ghci/Linker.lhs b/compiler/ghci/Linker.lhs index bd0bb35..eaf4521 100644 --- a/compiler/ghci/Linker.lhs +++ b/compiler/ghci/Linker.lhs @@ -245,10 +245,17 @@ dataConInfoPtrToName x = do where (modWords, occWord) = ASSERT (length rest1 > 0) (parseModOcc [] (tail rest1)) parseModOcc :: [[Word8]] -> [Word8] -> ([[Word8]], [Word8]) - parseModOcc acc str + -- We only look for dots if str could start with a module name, + -- i.e. if it starts with an upper case character. + -- Otherwise we might think that "X.:->" is the module name in + -- "X.:->.+", whereas actually "X" is the module name and + -- ":->.+" is a constructor name. + parseModOcc acc str@(c : _) + | isUpper $ chr $ fromIntegral c = case break (== dot) str of (top, []) -> (acc, top) - (top, _:bot) -> parseModOcc (top : acc) bot + (top, _ : bot) -> parseModOcc (top : acc) bot + parseModOcc acc str = (acc, str) -- | Get the 'HValue' associated with the given name. -- _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
