diff options
Diffstat (limited to 'testsuite/tests/ghci.debugger')
209 files changed, 2639 insertions, 0 deletions
diff --git a/testsuite/tests/ghci.debugger/GADT.hs b/testsuite/tests/ghci.debugger/GADT.hs new file mode 100644 index 0000000000..a99c1156b9 --- /dev/null +++ b/testsuite/tests/ghci.debugger/GADT.hs @@ -0,0 +1,20 @@ +data Empty +data NonEmpty + +data SafeList x y where + Nil :: SafeList x Empty + Cons:: Eq x => x -> SafeList x y -> SafeList x NonEmpty + One :: Eq x => x -> SafeList x Empty -> SafeList x NonEmpty + +safeHead :: SafeList x NonEmpty -> x +safeHead (Cons x _) = x + +foo = Cons 3 (Cons 6 (Cons 9 Nil)) + + +data Dict x where + DictN :: Num x => x -> Dict x + DictE :: Eq x => x -> Dict x + +data Exist where + Exist :: forall a. a -> Exist
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/HappyTest.hs b/testsuite/tests/ghci.debugger/HappyTest.hs new file mode 100644 index 0000000000..9be54402a9 --- /dev/null +++ b/testsuite/tests/ghci.debugger/HappyTest.hs @@ -0,0 +1,525 @@ +{-# LANGUAGE CPP #-} +import Data.Char +import Data.Array +import GHC.Exts +import System.IO +import System.IO.Unsafe +import Debug.Trace + +-- parser produced by Happy Version 1.16 + +data HappyAbsSyn + = HappyTerminal Token + | HappyErrorToken Int + | HappyAbsSyn4 (Exp) + | HappyAbsSyn5 (Exp1) + | HappyAbsSyn6 (Term) + | HappyAbsSyn7 (Factor) + +happyActOffsets :: HappyAddr +happyActOffsets = HappyA# "\x01\x00\x25\x00\x1e\x00\x1b\x00\x1d\x00\x18\x00\x00\x00\x00\x00\x00\x00\x01\x00\xf8\xff\x03\x00\x03\x00\x03\x00\x03\x00\x20\x00\x01\x00\x18\x00\x18\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x01\x00\x00\x00\x00\x00"# + +happyGotoOffsets :: HappyAddr +happyGotoOffsets = HappyA# "\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x07\x00\xfe\xff\x1c\x00\x06\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00"# + +happyDefActions :: HappyAddr +happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xff\xfa\xff\xf7\xff\xf6\xff\xf5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xfc\xff\xf8\xff\xf9\xff\xf4\xff\x00\x00\x00\x00\xfe\xff"# + +happyCheck :: HappyAddr +happyCheck = HappyA# "\xff\xff\x03\x00\x01\x00\x0b\x00\x03\x00\x04\x00\x03\x00\x04\x00\x02\x00\x03\x00\x03\x00\x0a\x00\x02\x00\x0a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x02\x00\x03\x00\x08\x00\x09\x00\x04\x00\x06\x00\x07\x00\x05\x00\x01\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# + +happyTable :: HappyAddr +happyTable = HappyA# "\x00\x00\x13\x00\x03\x00\x16\x00\x08\x00\x09\x00\x08\x00\x09\x00\x11\x00\x06\x00\x14\x00\x0a\x00\x18\x00\x0a\x00\x18\x00\x04\x00\x05\x00\x06\x00\x16\x00\x04\x00\x05\x00\x06\x00\x0a\x00\x04\x00\x05\x00\x06\x00\x03\x00\x04\x00\x05\x00\x06\x00\x12\x00\x06\x00\x0c\x00\x0d\x00\x10\x00\x0e\x00\x0f\x00\x11\x00\x03\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyReduceArr = array (1, 11) [ + (1 , happyReduce_1), + (2 , happyReduce_2), + (3 , happyReduce_3), + (4 , happyReduce_4), + (5 , happyReduce_5), + (6 , happyReduce_6), + (7 , happyReduce_7), + (8 , happyReduce_8), + (9 , happyReduce_9), + (10 , happyReduce_10), + (11 , happyReduce_11) + ] + +happy_n_terms = 13 :: Int +happy_n_nonterms = 4 :: Int + +happyReduce_1 = happyReduce 6# 0# happyReduction_1 +happyReduction_1 ((HappyAbsSyn4 happy_var_6) `HappyStk` + _ `HappyStk` + (HappyAbsSyn4 happy_var_4) `HappyStk` + _ `HappyStk` + (HappyTerminal (TokenVar happy_var_2)) `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn4 + (Let happy_var_2 happy_var_4 happy_var_6 + ) `HappyStk` happyRest + +happyReduce_2 = happySpecReduce_1 0# happyReduction_2 +happyReduction_2 (HappyAbsSyn5 happy_var_1) + = HappyAbsSyn4 + (Exp1 happy_var_1 + ) +happyReduction_2 _ = notHappyAtAll + +happyReduce_3 = happySpecReduce_3 1# happyReduction_3 +happyReduction_3 (HappyAbsSyn6 happy_var_3) + _ + (HappyAbsSyn5 happy_var_1) + = HappyAbsSyn5 + (Plus happy_var_1 happy_var_3 + ) +happyReduction_3 _ _ _ = notHappyAtAll + +happyReduce_4 = happySpecReduce_3 1# happyReduction_4 +happyReduction_4 (HappyAbsSyn6 happy_var_3) + _ + (HappyAbsSyn5 happy_var_1) + = HappyAbsSyn5 + (Minus happy_var_1 happy_var_3 + ) +happyReduction_4 _ _ _ = notHappyAtAll + +happyReduce_5 = happySpecReduce_1 1# happyReduction_5 +happyReduction_5 (HappyAbsSyn6 happy_var_1) + = HappyAbsSyn5 + (Term happy_var_1 + ) +happyReduction_5 _ = notHappyAtAll + +happyReduce_6 = happySpecReduce_3 2# happyReduction_6 +happyReduction_6 (HappyAbsSyn7 happy_var_3) + _ + (HappyAbsSyn6 happy_var_1) + = HappyAbsSyn6 + (Times happy_var_1 happy_var_3 + ) +happyReduction_6 _ _ _ = notHappyAtAll + +happyReduce_7 = happySpecReduce_3 2# happyReduction_7 +happyReduction_7 (HappyAbsSyn7 happy_var_3) + _ + (HappyAbsSyn6 happy_var_1) + = HappyAbsSyn6 + (Div happy_var_1 happy_var_3 + ) +happyReduction_7 _ _ _ = notHappyAtAll + +happyReduce_8 = happySpecReduce_1 2# happyReduction_8 +happyReduction_8 (HappyAbsSyn7 happy_var_1) + = HappyAbsSyn6 + (Factor happy_var_1 + ) +happyReduction_8 _ = notHappyAtAll + +happyReduce_9 = happySpecReduce_1 3# happyReduction_9 +happyReduction_9 (HappyTerminal (TokenInt happy_var_1)) + = HappyAbsSyn7 + (Int happy_var_1 + ) +happyReduction_9 _ = notHappyAtAll + +happyReduce_10 = happySpecReduce_1 3# happyReduction_10 +happyReduction_10 (HappyTerminal (TokenVar happy_var_1)) + = HappyAbsSyn7 + (Var happy_var_1 + ) +happyReduction_10 _ = notHappyAtAll + +happyReduce_11 = happySpecReduce_3 3# happyReduction_11 +happyReduction_11 _ + (HappyAbsSyn4 happy_var_2) + _ + = HappyAbsSyn7 + (Brack happy_var_2 + ) +happyReduction_11 _ _ _ = notHappyAtAll + +happyNewToken action sts stk [] = + happyDoAction 12# notHappyAtAll action sts stk [] + +happyNewToken action sts stk (tk:tks) = + let cont i = happyDoAction i tk action sts stk tks in + case tk of { + TokenLet -> cont 1#; + TokenIn -> cont 2#; + TokenInt happy_dollar_dollar -> cont 3#; + TokenVar happy_dollar_dollar -> cont 4#; + TokenEq -> cont 5#; + TokenPlus -> cont 6#; + TokenMinus -> cont 7#; + TokenTimes -> cont 8#; + TokenDiv -> cont 9#; + TokenOB -> cont 10#; + TokenCB -> cont 11#; + _ -> happyError' (tk:tks) + } + +happyError_ tk tks = happyError' (tk:tks) + +newtype HappyIdentity a = HappyIdentity a +happyIdentity = HappyIdentity +happyRunIdentity (HappyIdentity a) = a + +instance Monad HappyIdentity where + return = HappyIdentity + (HappyIdentity p) >>= q = q p + +happyThen :: () => HappyIdentity a -> (a -> HappyIdentity b) -> HappyIdentity b +happyThen = (>>=) +happyReturn :: () => a -> HappyIdentity a +happyReturn = (return) +happyThen1 m k tks = (>>=) m (\a -> k a tks) +happyReturn1 :: () => a -> b -> HappyIdentity a +happyReturn1 = \a tks -> (return) a +happyError' :: () => [Token] -> HappyIdentity a +happyError' = HappyIdentity . happyError + +calc tks = happyRunIdentity happySomeParser where + happySomeParser = happyThen (happyParse 0# tks) (\x -> case x of {HappyAbsSyn4 z -> happyReturn z; _other -> notHappyAtAll }) + +happySeq = happyDontSeq + + +happyError tks = error "Parse error" + + + +data Exp = Let String Exp Exp | Exp1 Exp1 +data Exp1 = Plus Exp1 Term | Minus Exp1 Term | Term Term +data Term = Times Term Factor | Div Term Factor | Factor Factor +data Factor = Int Int | Var String | Brack Exp + + + +data Token + = TokenLet + | TokenIn + | TokenInt Int + | TokenVar String + | TokenEq + | TokenPlus + | TokenMinus + | TokenTimes + | TokenDiv + | TokenOB + | TokenCB + + + +lexer :: String -> [Token] +lexer [] = [] +lexer (c:cs) + | isSpace c = lexer cs + | isAlpha c = lexVar (c:cs) + | isDigit c = lexNum (c:cs) +lexer ('=':cs) = TokenEq : lexer cs +lexer ('+':cs) = TokenPlus : lexer cs +lexer ('-':cs) = TokenMinus : lexer cs +lexer ('*':cs) = TokenTimes : lexer cs +lexer ('/':cs) = TokenDiv : lexer cs +lexer ('(':cs) = TokenOB : lexer cs +lexer (')':cs) = TokenCB : lexer cs + +lexNum cs = TokenInt (read num) : lexer rest + where (num,rest) = span isDigit cs + +lexVar cs = + case span isAlpha cs of + ("let",rest) -> TokenLet : lexer rest + ("in",rest) -> TokenIn : lexer rest + (var,rest) -> TokenVar var : lexer rest + + + + +runCalc :: String -> Exp +runCalc = calc . lexer + + + +main = case runCalc "1 + 2 + 3" of { + (Exp1 (Plus (Plus (Term (Factor (Int 1))) (Factor (Int 2))) (Factor (Int 3)))) -> + case runCalc "1 * 2 + 3" of { + (Exp1 (Plus (Term (Times (Factor (Int 1)) (Int 2))) (Factor (Int 3)))) -> + case runCalc "1 + 2 * 3" of { + (Exp1 (Plus (Term (Factor (Int 1))) (Times (Factor (Int 2)) (Int 3)))) -> + case runCalc "let x = 2 in x * (x - 2)" of { + (Let "x" (Exp1 (Term (Factor (Int 2)))) (Exp1 (Term (Times (Factor (Var "x")) (Brack (Exp1 (Minus (Term (Factor (Var "x"))) (Factor (Int 2))))))))) -> print "Test works\n"; + _ -> quit } ; _ -> quit } ; _ -> quit } ; _ -> quit } +quit = print "Test failed\n" +{-# LINE 1 "GenericTemplate.hs" #-} +{-# LINE 1 "<built-in>" #-} +{-# LINE 1 "<command line>" #-} +{-# LINE 1 "GenericTemplate.hs" #-} +-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp + +{-# LINE 28 "GenericTemplate.hs" #-} + + +data Happy_IntList = HappyCons Int# Happy_IntList + + + + + +{-# LINE 49 "GenericTemplate.hs" #-} + +{-# LINE 59 "GenericTemplate.hs" #-} + + + +happyTrace string expr = unsafePerformIO $ do + hPutStr stderr string + return expr + + + + +infixr 9 `HappyStk` +data HappyStk a = HappyStk a (HappyStk a) + +----------------------------------------------------------------------------- +-- starting the parse + +happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll + +----------------------------------------------------------------------------- +-- Accepting the parse + +-- If the current token is 0#, it means we've just accepted a partial +-- parse (a %partial parser). We must ignore the saved token on the top of +-- the stack in this case. +happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) = + happyReturn1 ans +happyAccept j tk st sts (HappyStk ans _) = + (happyTcHack j (happyTcHack st)) (happyReturn1 ans) + +----------------------------------------------------------------------------- +-- Arrays only: do the next action + + + +happyDoAction i tk st + = (happyTrace ("state: " ++ show (I# (st)) ++ ",\ttoken: " ++ show (I# (i)) ++ ",\taction: ")) $ + + + case action of + 0# -> (happyTrace ("fail.\n")) $ + happyFail i tk st + -1# -> (happyTrace ("accept.\n")) $ + happyAccept i tk st + n | (n <# (0# :: Int#)) -> (happyTrace ("reduce (rule " ++ show rule ++ ")")) $ + + (happyReduceArr ! rule) i tk st + where rule = (I# ((negateInt# ((n +# (1# :: Int#)))))) + n -> (happyTrace ("shift, enter state " ++ show (I# (new_state)) ++ "\n")) $ + + + happyShift new_state i tk st + where new_state = (n -# (1# :: Int#)) + where off = indexShortOffAddr happyActOffsets st + off_i = (off +# i) + check = if (off_i >=# (0# :: Int#)) + then (indexShortOffAddr happyCheck off_i ==# i) + else False + action | check = indexShortOffAddr happyTable off_i + | otherwise = indexShortOffAddr happyDefActions st + +{-# LINE 127 "GenericTemplate.hs" #-} + + +indexShortOffAddr (HappyA# arr) off = +#if __GLASGOW_HASKELL__ > 500 + narrow16Int# i +#elif __GLASGOW_HASKELL__ == 500 + intToInt16# i +#else + (i `iShiftL#` 16#) `iShiftRA#` 16# +#endif + where +#if __GLASGOW_HASKELL__ >= 503 + i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low) +#else + i = word2Int# ((high `shiftL#` 8#) `or#` low) +#endif + high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) + low = int2Word# (ord# (indexCharOffAddr# arr off')) + off' = off *# 2# + + + + + +data HappyAddr = HappyA# Addr# + + + + +----------------------------------------------------------------------------- +-- HappyState data type (not arrays) + +{-# LINE 170 "GenericTemplate.hs" #-} + +----------------------------------------------------------------------------- +-- Shifting a token + +happyShift new_state 0# tk st sts stk@(x `HappyStk` _) = + let i = (case x of { HappyErrorToken (I# (i)) -> i }) in +-- trace "shifting the error token" $ + happyDoAction i tk new_state (HappyCons (st) (sts)) (stk) + +happyShift new_state i tk st sts stk = + happyNewToken new_state (HappyCons (st) (sts)) ((HappyTerminal (tk))`HappyStk`stk) + +-- happyReduce is specialised for the common cases. + +happySpecReduce_0 i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happySpecReduce_0 nt fn j tk st@((action)) sts stk + = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk) + +happySpecReduce_1 i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk') + = let r = fn v1 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_2 i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk') + = let r = fn v1 v2 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_3 i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk') + = let r = fn v1 v2 v3 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happyReduce k i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happyReduce k nt fn j tk st sts stk + = case happyDrop (k -# (1# :: Int#)) sts of + sts1@((HappyCons (st1@(action)) (_))) -> + let r = fn stk in -- it doesn't hurt to always seq here... + happyDoSeq r (happyGoto nt j tk st1 sts1 r) + +happyMonadReduce k nt fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happyMonadReduce k nt fn j tk st sts stk = + happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk)) + where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts)) + drop_stk = happyDropStk k stk + +happyMonad2Reduce k nt fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happyMonad2Reduce k nt fn j tk st sts stk = + happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk)) + where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts)) + drop_stk = happyDropStk k stk + + off = indexShortOffAddr happyGotoOffsets st1 + off_i = (off +# nt) + new_state = indexShortOffAddr happyTable off_i + + + + +happyDrop 0# l = l +happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t + +happyDropStk 0# l = l +happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::Int#)) xs + +----------------------------------------------------------------------------- +-- Moving to a new state after a reduction + + +happyGoto nt j tk st = + (happyTrace (", goto state " ++ show (I# (new_state)) ++ "\n")) $ + happyDoAction j tk new_state + where off = indexShortOffAddr happyGotoOffsets st + off_i = (off +# nt) + new_state = indexShortOffAddr happyTable off_i + + + + +----------------------------------------------------------------------------- +-- Error recovery (0# is the error token) + +-- parse error if we are in recovery and we fail again +happyFail 0# tk old_st _ stk = +-- trace "failing" $ + happyError_ tk + +{- We don't need state discarding for our restricted implementation of + "error". In fact, it can cause some bogus parses, so I've disabled it + for now --SDM + +-- discard a state +happyFail 0# tk old_st (HappyCons ((action)) (sts)) + (saved_tok `HappyStk` _ `HappyStk` stk) = +-- trace ("discarding state, depth " ++ show (length stk)) $ + happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk)) +-} + +-- Enter error recovery: generate an error token, +-- save the old token and carry on. +happyFail i tk (action) sts stk = +-- trace "entering error recovery" $ + happyDoAction 0# tk action sts ( (HappyErrorToken (I# (i))) `HappyStk` stk) + +-- Internal happy errors: + +notHappyAtAll = error "Internal Happy error\n" + +----------------------------------------------------------------------------- +-- Hack to get the typechecker to accept our action functions + + +happyTcHack :: Int# -> a -> a +happyTcHack x y = y +{-# INLINE happyTcHack #-} + + +----------------------------------------------------------------------------- +-- Seq-ing. If the --strict flag is given, then Happy emits +-- happySeq = happyDoSeq +-- otherwise it emits +-- happySeq = happyDontSeq + +happyDoSeq, happyDontSeq :: a -> b -> b +happyDoSeq a b = a `seq` b +happyDontSeq a b = b + +----------------------------------------------------------------------------- +-- Don't inline any functions from the template. GHC has a nasty habit +-- of deciding to inline happyGoto everywhere, which increases the size of +-- the generated parser quite a bit. + + +{-# NOINLINE happyDoAction #-} +{-# NOINLINE happyTable #-} +{-# NOINLINE happyCheck #-} +{-# NOINLINE happyActOffsets #-} +{-# NOINLINE happyGotoOffsets #-} +{-# NOINLINE happyDefActions #-} + +{-# NOINLINE happyShift #-} +{-# NOINLINE happySpecReduce_0 #-} +{-# NOINLINE happySpecReduce_1 #-} +{-# NOINLINE happySpecReduce_2 #-} +{-# NOINLINE happySpecReduce_3 #-} +{-# NOINLINE happyReduce #-} +{-# NOINLINE happyMonadReduce #-} +{-# NOINLINE happyGoto #-} +{-# NOINLINE happyFail #-} + +-- end of Happy Template. diff --git a/testsuite/tests/ghci.debugger/Makefile b/testsuite/tests/ghci.debugger/Makefile new file mode 100644 index 0000000000..9a36a1c5fe --- /dev/null +++ b/testsuite/tests/ghci.debugger/Makefile @@ -0,0 +1,3 @@ +TOP=../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk diff --git a/testsuite/tests/ghci.debugger/QSort.hs b/testsuite/tests/ghci.debugger/QSort.hs new file mode 100644 index 0000000000..aa45aa14e5 --- /dev/null +++ b/testsuite/tests/ghci.debugger/QSort.hs @@ -0,0 +1,11 @@ +module QSort where + + +qsort [] = [] +qsort (a:as) = (qsort left) ++ [a] ++ (qsort right) + where (left,right) = (filter (<=a) as, filter (>a) as) + +run = qsort [8, 4, 0, 3, 1, 23, 11, 18] + +-- > run +-- [0,1,3,4,8,11,18,23]
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/Test.hs b/testsuite/tests/ghci.debugger/Test.hs new file mode 100644 index 0000000000..f0477afc3b --- /dev/null +++ b/testsuite/tests/ghci.debugger/Test.hs @@ -0,0 +1,40 @@ +module Test.Test2 where
+import Data.Typeable
+
+data Show1 = S1 Char Char Char
+ deriving Typeable
+
+data Strict = S2 Char !Char
+
+data Opaque = forall a. O a
+data List1 a = Nil | a :^ (List1 a)
+ deriving Show
+
+newtype MyInt = My Int
+ deriving (Eq,Show,Num, Enum)
+
+newtype MkT a = MkT a
+ deriving (Show)
+
+newtype MkT2 a = MkT2 (MkT a)
+ deriving Show
+
+data Param2 s r = P2 (FakeSTRef r (s(Param2 s r)))
+ | P2Nil
+data FakeSTRef r s = Ref s
+
+testParam2 = O (P2 (Ref P2Nil))
+
+infixr 5 :^
+--test T{t=t1} = undefined
+
+instance Show Show1 where
+ show (S1 a b c) = show (a)
+
+type Just1 = Maybe
+
+
+data Unary = Unary deriving Show
+
+poly :: a -> ()
+poly x = seq x ()
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/Test2.hs b/testsuite/tests/ghci.debugger/Test2.hs new file mode 100644 index 0000000000..ee52f7b00a --- /dev/null +++ b/testsuite/tests/ghci.debugger/Test2.hs @@ -0,0 +1,6 @@ +module Test2 where + +f x = g x + +g y = y + diff --git a/testsuite/tests/ghci.debugger/Test3.hs b/testsuite/tests/ghci.debugger/Test3.hs new file mode 100644 index 0000000000..3bb7bd629b --- /dev/null +++ b/testsuite/tests/ghci.debugger/Test3.hs @@ -0,0 +1,4 @@ +mymap f [] = [] +mymap f (x:xs) = f x:mymap f xs + +main = mapM_ putStrLn $ mymap ('a':) ["hello","bye"] diff --git a/testsuite/tests/ghci.debugger/Test4.hs b/testsuite/tests/ghci.debugger/Test4.hs new file mode 100644 index 0000000000..8bd15e6fba --- /dev/null +++ b/testsuite/tests/ghci.debugger/Test4.hs @@ -0,0 +1,3 @@ +data T a b = T (a -> b) + +f g y = () where x = T g diff --git a/testsuite/tests/ghci.debugger/Test6.hs b/testsuite/tests/ghci.debugger/Test6.hs new file mode 100644 index 0000000000..a6ed16e611 --- /dev/null +++ b/testsuite/tests/ghci.debugger/Test6.hs @@ -0,0 +1,5 @@ +f xs = head xs + +g xs = f xs + +main = g [] diff --git a/testsuite/tests/ghci.debugger/Test7.hs b/testsuite/tests/ghci.debugger/Test7.hs new file mode 100644 index 0000000000..9f34bfd4f5 --- /dev/null +++ b/testsuite/tests/ghci.debugger/Test7.hs @@ -0,0 +1,2 @@ +import Control.Exception +main = evaluate (error "foo") diff --git a/testsuite/tests/ghci.debugger/getargs.hs b/testsuite/tests/ghci.debugger/getargs.hs new file mode 100644 index 0000000000..62208f7bf7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/getargs.hs @@ -0,0 +1,3 @@ +import System.Environment + +main = getArgs >>= print diff --git a/testsuite/tests/ghci.debugger/mdo.hs b/testsuite/tests/ghci.debugger/mdo.hs new file mode 100644 index 0000000000..761c056658 --- /dev/null +++ b/testsuite/tests/ghci.debugger/mdo.hs @@ -0,0 +1,37 @@ +import Control.Monad.Fix +import Data.IORef + +data N a = N (IORef Bool, N a, a, N a) + +newNode :: N a -> a -> N a -> IO (N a) +newNode b c f = do v <- newIORef False + return (N (v, b, c, f)) + +ll = mdo n0 <- newNode n3 0 n1 + n1 <- newNode n0 1 n2 + n2 <- newNode n1 2 n3 + n3 <- newNode n2 3 n0 + return n0 + +data Dir = F | B deriving Eq + +traverse :: Dir -> N a -> IO [a] +traverse d (N (v, b, i, f)) = + do visited <- readIORef v + if visited + then return [] + else do writeIORef v True + let next = if d == F then f else b + is <- traverse d next + return (i:is) + +l2dll :: [a] -> IO (N a) +l2dll (x:xs) = mdo c <- newNode l x f + (f, l) <- l2dll' c xs + return c + +l2dll' :: N a -> [a] -> IO (N a, N a) +l2dll' p [] = return (p, p) +l2dll' p (x:xs) = mdo c <- newNode p x f + (f, l) <- l2dll' c xs + return (c, l)
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/2740.hs b/testsuite/tests/ghci.debugger/scripts/2740.hs new file mode 100644 index 0000000000..291e7c8c02 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/2740.hs @@ -0,0 +1,4 @@ +module Test where + +f x y z | x<y = z + | otherwise = z*y diff --git a/testsuite/tests/ghci.debugger/scripts/2740.script b/testsuite/tests/ghci.debugger/scripts/2740.script new file mode 100644 index 0000000000..8cf8c3909b --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/2740.script @@ -0,0 +1,7 @@ +:l 2740.hs +:step f 1 2 3 +:step +:print x +:print y +:force x +:force y diff --git a/testsuite/tests/ghci.debugger/scripts/2740.stdout b/testsuite/tests/ghci.debugger/scripts/2740.stdout new file mode 100644 index 0000000000..c7fefaaeb2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/2740.stdout @@ -0,0 +1,10 @@ +Stopped at 2740.hs:(3,1)-(4,25) +_result :: a = _ +Stopped at 2740.hs:3:11-13 +_result :: a = _ +x :: a = _ +y :: a = _ +x = (_t1::a) +y = (_t2::a) +x = 1 +y = 2 diff --git a/testsuite/tests/ghci.debugger/scripts/Break007.hs b/testsuite/tests/ghci.debugger/scripts/Break007.hs new file mode 100644 index 0000000000..fc66e943da --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/Break007.hs @@ -0,0 +1,4 @@ +mymap f [] = [] +mymap f (x:xs) = f x:mymap f xs + +main = mapM_ putStrLn $ mymap ('a':) ["hello","bye"] diff --git a/testsuite/tests/ghci.debugger/scripts/Break020b.hs b/testsuite/tests/ghci.debugger/scripts/Break020b.hs new file mode 100644 index 0000000000..ca4737ff26 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/Break020b.hs @@ -0,0 +1,4 @@ +module Break020b where + + +in_another_module _ = return ()
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/Makefile b/testsuite/tests/ghci.debugger/scripts/Makefile new file mode 100644 index 0000000000..9101fbd40a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/Makefile @@ -0,0 +1,3 @@ +TOP=../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk diff --git a/testsuite/tests/ghci.debugger/scripts/TupleN.hs b/testsuite/tests/ghci.debugger/scripts/TupleN.hs new file mode 100644 index 0000000000..528f0ea238 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/TupleN.hs @@ -0,0 +1,10 @@ +module TupleN where +import Language.Haskell.TH + +tuple :: Int -> ExpQ +tuple n = [|\list -> $(tupE (exprs [|list|])) |] + where + exprs list = id [infixE (Just (list)) + (varE '(!!)) + (Just (litE $ integerL (toInteger num))) + | num <- [0..(n - 1)]]
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/all.T b/testsuite/tests/ghci.debugger/scripts/all.T new file mode 100644 index 0000000000..8c8cb7c64f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/all.T @@ -0,0 +1,84 @@ +setTestOpts(composes([extra_run_opts('-ignore-dot-ghci'), + if_compiler_profiled(skip), + normalise_slashes])) + +test('print001', normal, ghci_script, ['print001.script']) +test('print002', normal, ghci_script, ['print002.script']) +test('print003', normal, ghci_script, ['print003.script']) +test('print004', normal, ghci_script, ['print004.script']) +test('print005', normal, ghci_script, ['print005.script']) +test('print006', normal, ghci_script, ['print006.script']) +test('print007', normal, ghci_script, ['print007.script']) +test('print008', normal, ghci_script, ['print008.script']) +test('print009', normal, ghci_script, ['print009.script']) +test('print010', normal, ghci_script, ['print010.script']) +test('print011', normal, ghci_script, ['print011.script']) +test('print012', normal, ghci_script, ['print012.script']) +test('print013', normal, ghci_script, ['print013.script']) +test('print014', normal, ghci_script, ['print014.script']) +test('print016', normal, ghci_script, ['print016.script']) +test('print017', normal, ghci_script, ['print017.script']) +test('print018', normal, ghci_script, ['print018.script']) +test('print019', normal, ghci_script, ['print019.script']) +test('print020', expect_broken(2806), ghci_script, ['print020.script']) +test('print021', normal, ghci_script, ['print021.script']) +test('print022', normal, ghci_script, ['print022.script']) +test('print023', normal, ghci_script, ['print023.script']) +test('print024', normal, ghci_script, ['print024.script']) +test('print025', normal, ghci_script, ['print025.script']) +test('print026', normal, ghci_script, ['print026.script']) +test('print027', normal, ghci_script, ['print027.script']) +test('print028', normal, ghci_script, ['print028.script']) +test('print029', normal, ghci_script, ['print029.script']) +test('print030', normal, ghci_script, ['print030.script']) +test('print031', normal, ghci_script, ['print031.script']) +test('print032', expect_broken(1995), ghci_script, ['print032.script']) +test('print033', normal, ghci_script, ['print033.script']) +test('print034', normal, ghci_script, ['print034.script']) + +test('break001', normal, ghci_script, ['break001.script']) +test('break002', normal, ghci_script, ['break002.script']) +test('break003', normal, ghci_script, ['break003.script']) +test('break005', normal, ghci_script, ['break005.script']) +test('break006', normal, ghci_script, ['break006.script']) +test('break007', extra_clean(['Break007.o', 'Break007.hi']), + ghci_script, ['break007.script']) +test('break008', normal, ghci_script, ['break008.script']) +test('break009', normal, ghci_script, ['break009.script']) +test('break010', normal, ghci_script, ['break010.script']) +test('break011', normal, ghci_script, ['break011.script']) +test('break012', normal, ghci_script, ['break012.script']) +test('break013', normal, ghci_script, ['break013.script']) +test('break014', normal, ghci_script, ['break014.script']) +test('break015', expect_broken(1532), ghci_script, ['break015.script']) +test('break016', normal, ghci_script, ['break016.script']) +test('break017', normal, ghci_script, ['break017.script']) +test('break018', normal, ghci_script, ['break018.script']) +test('break019', normal, ghci_script, ['break019.script']) +test('break020', normal, ghci_script, ['break020.script']) +test('break021', normal, ghci_script, ['break021.script']) +test('break024', normal, ghci_script, ['break024.script']) +test('break025', normal, ghci_script, ['break025.script']) +test('break026', normal, ghci_script, ['break026.script']) +test('break027', normal, ghci_script, ['break027.script']) +test('break028', normal, ghci_script, ['break028.script']) + +test('dynbrk001', normal, ghci_script, ['dynbrk001.script']) +test('dynbrk002', normal, ghci_script, ['dynbrk002.script']) +test('dynbrk003', normal, ghci_script, ['dynbrk003.script']) +test('dynbrk004', normal, ghci_script, ['dynbrk004.script']) +test('dynbrk005', expect_broken(1530), ghci_script, ['dynbrk005.script']) +test('dynbrk007', normal, ghci_script, ['dynbrk007.script']) +test('dynbrk008', normal, ghci_script, ['dynbrk008.script']) +test('dynbrk009', normal, ghci_script, ['dynbrk009.script']) + +test('result001', expect_broken(1531), ghci_script, ['result001.script']) + +test('listCommand001', normal, ghci_script, ['listCommand001.script']) +test('listCommand002', normal, ghci_script, ['listCommand002.script']) + +test('hist001', normal, ghci_script, ['hist001.script']) + +test('2740', normal, ghci_script, ['2740.script']) + +test('getargs', normal, ghci_script, ['getargs.script']) diff --git a/testsuite/tests/ghci.debugger/scripts/break001.script b/testsuite/tests/ghci.debugger/scripts/break001.script new file mode 100644 index 0000000000..63b5e71a5f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break001.script @@ -0,0 +1,14 @@ +:l ../Test2 +:b 3 +:b 5 +f 1 +:st +:st +:st +-- Test that the binding for x is now gone +:show bindings +y +:p y +seq y () +:p y +y diff --git a/testsuite/tests/ghci.debugger/scripts/break001.stderr b/testsuite/tests/ghci.debugger/scripts/break001.stderr new file mode 100644 index 0000000000..cb0cc93ac7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break001.stderr @@ -0,0 +1,7 @@ + +<interactive>:1:1: + Ambiguous type variable `t' in the constraint: + (Show t) arising from a use of `print' + Cannot resolve unknown runtime types: t + Use :print or :force to determine these types + In a stmt of an interactive GHCi command: print it diff --git a/testsuite/tests/ghci.debugger/scripts/break001.stdout b/testsuite/tests/ghci.debugger/scripts/break001.stdout new file mode 100644 index 0000000000..e88c2fcc5c --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break001.stdout @@ -0,0 +1,18 @@ +Breakpoint 0 activated at ../Test2.hs:3:1-9 +Breakpoint 1 activated at ../Test2.hs:5:1-7 +Stopped at ../Test2.hs:3:1-9 +_result :: t = _ +Stopped at ../Test2.hs:3:7-9 +_result :: t = _ +x :: t = _ +Stopped at ../Test2.hs:5:1-7 +_result :: t = _ +Stopped at ../Test2.hs:5:7 +_result :: t = _ +y :: t = _ +_result :: t = _ +y :: t = _ +y = (_t1::t) +() +y = 1 +1 diff --git a/testsuite/tests/ghci.debugger/scripts/break002.script b/testsuite/tests/ghci.debugger/scripts/break002.script new file mode 100644 index 0000000000..0bc2605e4f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break002.script @@ -0,0 +1,5 @@ +-- can't set breakpoints on non-interpreted things: +:b Data.List.map + +:l ../Test2.hs +:b Data.List.map diff --git a/testsuite/tests/ghci.debugger/scripts/break002.stdout b/testsuite/tests/ghci.debugger/scripts/break002.stdout new file mode 100644 index 0000000000..72e0359c7b --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break002.stdout @@ -0,0 +1,2 @@ +cannot set breakpoint on map: module GHC.Base is not interpreted +cannot set breakpoint on map: module GHC.Base is not interpreted diff --git a/testsuite/tests/ghci.debugger/scripts/break003.script b/testsuite/tests/ghci.debugger/scripts/break003.script new file mode 100644 index 0000000000..68ca96fcd2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break003.script @@ -0,0 +1,10 @@ +:l ../Test3 +:b 2 +main +f +:q + +-- currently gives: +-- ghc-6.7: panic! (the 'impossible' happened) +-- (GHC version 6.7 for x86_64-unknown-linux): +-- ASSERT failed! file typecheck/TcMType.lhs line 362 t{tv aqh} [tv] diff --git a/testsuite/tests/ghci.debugger/scripts/break003.stderr b/testsuite/tests/ghci.debugger/scripts/break003.stderr new file mode 100644 index 0000000000..f640cb0fab --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break003.stderr @@ -0,0 +1,6 @@ + +<interactive>:1:1: + No instance for (Show (t -> a)) + arising from a use of `print' + Possible fix: add an instance declaration for (Show (t -> a)) + In a stmt of an interactive GHCi command: print it diff --git a/testsuite/tests/ghci.debugger/scripts/break003.stdout b/testsuite/tests/ghci.debugger/scripts/break003.stdout new file mode 100644 index 0000000000..ed418836c8 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break003.stdout @@ -0,0 +1,6 @@ +Breakpoint 0 activated at ../Test3.hs:2:18-31 +Stopped at ../Test3.hs:2:18-31 +_result :: [a] = _ +f :: t -> a = _ +x :: t = _ +xs :: [t] = [_] diff --git a/testsuite/tests/ghci.debugger/scripts/break004.script b/testsuite/tests/ghci.debugger/scripts/break004.script new file mode 100644 index 0000000000..e4bb16fd1a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break004.script @@ -0,0 +1,5 @@ +:l ../Test4.hs +:b f +seq (f (+(1::Int)) "abc") () +-- We can subvert the Unknown machinery this was and pass the string +-- to the function expecting Int. ToDo: finish this diff --git a/testsuite/tests/ghci.debugger/scripts/break005.script b/testsuite/tests/ghci.debugger/scripts/break005.script new file mode 100644 index 0000000000..b36ebbca2a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break005.script @@ -0,0 +1,5 @@ +:l ../QSort +:st qsort [1,2] +:step +seq left () +:print left diff --git a/testsuite/tests/ghci.debugger/scripts/break005.stdout b/testsuite/tests/ghci.debugger/scripts/break005.stdout new file mode 100644 index 0000000000..adf9502b0a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break005.stdout @@ -0,0 +1,9 @@ +Stopped at ../QSort.hs:(4,1)-(6,55) +_result :: [a] = _ +Stopped at ../QSort.hs:5:16-51 +_result :: [a] = _ +a :: a = _ +left :: [a] = _ +right :: [a] = _ +() +left = [] diff --git a/testsuite/tests/ghci.debugger/scripts/break006.script b/testsuite/tests/ghci.debugger/scripts/break006.script new file mode 100644 index 0000000000..7381490f69 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break006.script @@ -0,0 +1,14 @@ +:l ../Test3.hs +:st mymap (+1) [1,2,3] +:st +:show bindings +f x -- should fail, unknown return type +let y = f x +y +:p y +:force y +:show bindings +-- we know the result is Integer now +f x +-- should work now + diff --git a/testsuite/tests/ghci.debugger/scripts/break006.stderr b/testsuite/tests/ghci.debugger/scripts/break006.stderr new file mode 100644 index 0000000000..31c3f94f1b --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break006.stderr @@ -0,0 +1,14 @@ + +<interactive>:1:1: + Ambiguous type variable `a' in the constraint: + (Show a) arising from a use of `print' + Cannot resolve unknown runtime types: a + Use :print or :force to determine these types + In a stmt of an interactive GHCi command: print it + +<interactive>:1:1: + Ambiguous type variable `a' in the constraint: + (Show a) arising from a use of `print' + Cannot resolve unknown runtime types: a + Use :print or :force to determine these types + In a stmt of an interactive GHCi command: print it diff --git a/testsuite/tests/ghci.debugger/scripts/break006.stdout b/testsuite/tests/ghci.debugger/scripts/break006.stdout new file mode 100644 index 0000000000..42560877d1 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break006.stdout @@ -0,0 +1,20 @@ +Stopped at ../Test3.hs:(1,1)-(2,31) +_result :: [a] = _ +Stopped at ../Test3.hs:2:18-31 +_result :: [a] = _ +f :: t -> a = _ +x :: t = _ +xs :: [t] = [_,_] +_result :: [a] = _ +f :: t -> a = _ +x :: t = _ +xs :: [t] = [_,_] +y = (_t1::a) +y = 2 +_result :: [Integer] = _ +_t1 :: Integer = 2 +f :: t -> Integer = _ +x :: t = 1 +xs :: [t] = [_,_] +y :: Integer = 2 +2 diff --git a/testsuite/tests/ghci.debugger/scripts/break007.script b/testsuite/tests/ghci.debugger/scripts/break007.script new file mode 100644 index 0000000000..46386ca182 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break007.script @@ -0,0 +1,5 @@ +:!rm -f Break007.o Break007.hi +:set -fobject-code +:l Break007 +:b 1 +-- can't set a breakpoint in a compiled module diff --git a/testsuite/tests/ghci.debugger/scripts/break007.stdout b/testsuite/tests/ghci.debugger/scripts/break007.stdout new file mode 100644 index 0000000000..e692d2048f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break007.stdout @@ -0,0 +1 @@ +No breakpoints found at that location. diff --git a/testsuite/tests/ghci.debugger/scripts/break008.script b/testsuite/tests/ghci.debugger/scripts/break008.script new file mode 100644 index 0000000000..0cdf7566e6 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break008.script @@ -0,0 +1,5 @@ +:l ../Test3 +:b 1 +mymap id [] +-- second load, should discard the breakpoints without blowing up +:l ../Test3.hs diff --git a/testsuite/tests/ghci.debugger/scripts/break008.stdout b/testsuite/tests/ghci.debugger/scripts/break008.stdout new file mode 100644 index 0000000000..6961fa3cec --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break008.stdout @@ -0,0 +1,3 @@ +Breakpoint 0 activated at ../Test3.hs:1:14-15 +Stopped at ../Test3.hs:1:14-15 +_result :: [a] = _ diff --git a/testsuite/tests/ghci.debugger/scripts/break009.script b/testsuite/tests/ghci.debugger/scripts/break009.script new file mode 100644 index 0000000000..3e43b07a70 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break009.script @@ -0,0 +1,7 @@ +:l ../Test6.hs +:b 5 +main +-- stopped now +:l ../Test6.hs +main +-- should not break diff --git a/testsuite/tests/ghci.debugger/scripts/break009.stdout b/testsuite/tests/ghci.debugger/scripts/break009.stdout new file mode 100644 index 0000000000..cd9436e34a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break009.stdout @@ -0,0 +1,4 @@ +Breakpoint 0 activated at ../Test6.hs:5:8-11 +Stopped at ../Test6.hs:5:8-11 +_result :: a = _ +*** Exception: Prelude.head: empty list diff --git a/testsuite/tests/ghci.debugger/scripts/break010.script b/testsuite/tests/ghci.debugger/scripts/break010.script new file mode 100644 index 0000000000..c4cfe917f2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break010.script @@ -0,0 +1,6 @@ +:l ../Test6.hs +:b 5 +main +:abandon +main +-- should not hang here; we abandoned the previous computation diff --git a/testsuite/tests/ghci.debugger/scripts/break010.stdout b/testsuite/tests/ghci.debugger/scripts/break010.stdout new file mode 100644 index 0000000000..2751b6d160 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break010.stdout @@ -0,0 +1,5 @@ +Breakpoint 0 activated at ../Test6.hs:5:8-11 +Stopped at ../Test6.hs:5:8-11 +_result :: a = _ +Stopped at ../Test6.hs:5:8-11 +_result :: a = _ diff --git a/testsuite/tests/ghci.debugger/scripts/break011.script b/testsuite/tests/ghci.debugger/scripts/break011.script new file mode 100644 index 0000000000..f9ca3fe393 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break011.script @@ -0,0 +1,18 @@ +-- Testing -fbreak-on-exception +error "foo" +:set -fbreak-on-exception +error "foo" +:abandon +:l ../Test7.hs +:tr main +:hist +:back +:back +:back +:forward +:forward +:forward +:force _exception +:show bindings +:force _result +:continue diff --git a/testsuite/tests/ghci.debugger/scripts/break011.stdout b/testsuite/tests/ghci.debugger/scripts/break011.stdout new file mode 100644 index 0000000000..7ca63b686a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break011.stdout @@ -0,0 +1,23 @@ +*** Exception: foo +Stopped at <exception thrown> +_exception :: e = _ +Stopped at <exception thrown> +_exception :: e = _ +-1 : main (../Test7.hs:2:18-28) +-2 : main (../Test7.hs:2:8-29) +<end of history> +Logged breakpoint at ../Test7.hs:2:18-28 +_result :: a +Logged breakpoint at ../Test7.hs:2:8-29 +_result :: IO a +no more logged breakpoints +Logged breakpoint at ../Test7.hs:2:18-28 +_result :: a +Stopped at <exception thrown> +_exception :: e +already at the beginning of the history +_exception = SomeException (ErrorCall "foo") +_exception :: SomeException = SomeException (ErrorCall "foo") +_result :: a = _ +*** Exception: foo +*** Exception: foo diff --git a/testsuite/tests/ghci.debugger/scripts/break012.hs b/testsuite/tests/ghci.debugger/scripts/break012.hs new file mode 100644 index 0000000000..7b2e2ea0fb --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break012.hs @@ -0,0 +1,5 @@ +g i = let a = i + 1 + b = id + c = () + d = (+) + in (a,b,c,d) diff --git a/testsuite/tests/ghci.debugger/scripts/break012.script b/testsuite/tests/ghci.debugger/scripts/break012.script new file mode 100644 index 0000000000..749947a4a9 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break012.script @@ -0,0 +1,9 @@ +-- Test polymorphic types in a breakpoint +:l break012 +:st g 5 `seq` () +:st +:t a +:t b +:t c +:t d +:p a b c d diff --git a/testsuite/tests/ghci.debugger/scripts/break012.stdout b/testsuite/tests/ghci.debugger/scripts/break012.stdout new file mode 100644 index 0000000000..90e228c293 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break012.stdout @@ -0,0 +1,16 @@ +Stopped at break012.hs:(1,1)-(5,18) +_result :: (t, a1 -> a1, (), a -> a -> a) = _ +Stopped at break012.hs:5:10-18 +_result :: (t, a1 -> a1, (), a -> a -> a) = _ +a :: t = _ +b :: a2 -> a2 = _ +c :: () = _ +d :: a -> a -> a = _ +a :: t +b :: a2 -> a2 +c :: () +d :: a -> a -> a +a = (_t1::t) +b = (_t2::forall a2. a2 -> a2) +c = (_t3::()) +d = (_t4::a -> a -> a) diff --git a/testsuite/tests/ghci.debugger/scripts/break013.hs b/testsuite/tests/ghci.debugger/scripts/break013.hs new file mode 100644 index 0000000000..53d8432865 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break013.hs @@ -0,0 +1,4 @@ +g i = (a,b,c) + where a = False + b = True + c = () diff --git a/testsuite/tests/ghci.debugger/scripts/break013.script b/testsuite/tests/ghci.debugger/scripts/break013.script new file mode 100644 index 0000000000..b14e4c135f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break013.script @@ -0,0 +1,5 @@ +-- Available bindings at where(s) +:l break013 +:st g 1 `seq` () +:st +:show bindings diff --git a/testsuite/tests/ghci.debugger/scripts/break013.stdout b/testsuite/tests/ghci.debugger/scripts/break013.stdout new file mode 100644 index 0000000000..9daa2db266 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break013.stdout @@ -0,0 +1,11 @@ +Stopped at break013.hs:(1,1)-(4,18) +_result :: (Bool, Bool, ()) = _ +Stopped at break013.hs:1:7-13 +_result :: (Bool, Bool, ()) = _ +a :: Bool = _ +b :: Bool = _ +c :: () = _ +_result :: (Bool, Bool, ()) = _ +a :: Bool = _ +b :: Bool = _ +c :: () = _ diff --git a/testsuite/tests/ghci.debugger/scripts/break014.hs b/testsuite/tests/ghci.debugger/scripts/break014.hs new file mode 100644 index 0000000000..7dff7b6fc5 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break014.hs @@ -0,0 +1,4 @@ +g i = let a = False + b = True + c = (a,b) + in c diff --git a/testsuite/tests/ghci.debugger/scripts/break014.script b/testsuite/tests/ghci.debugger/scripts/break014.script new file mode 100644 index 0000000000..f0ad6da277 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break014.script @@ -0,0 +1,5 @@ +-- Available bindings at let(s) +:l break014 +:break 3 +g 1 +-- stops at the breakpoint on c, a and b should be in scope diff --git a/testsuite/tests/ghci.debugger/scripts/break014.stdout b/testsuite/tests/ghci.debugger/scripts/break014.stdout new file mode 100644 index 0000000000..3d284bf11f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break014.stdout @@ -0,0 +1,5 @@ +Breakpoint 0 activated at break014.hs:3:15-19 +Stopped at break014.hs:3:15-19 +_result :: (Bool, Bool) = _ +a :: Bool = _ +b :: Bool = _ diff --git a/testsuite/tests/ghci.debugger/scripts/break015.hs b/testsuite/tests/ghci.debugger/scripts/break015.hs new file mode 100644 index 0000000000..d897118268 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break015.hs @@ -0,0 +1,3 @@ +f i = if ?flag then i*2 else i + +g i = let ?flag=False in f i diff --git a/testsuite/tests/ghci.debugger/scripts/break015.script b/testsuite/tests/ghci.debugger/scripts/break015.script new file mode 100644 index 0000000000..bbeba92f2c --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break015.script @@ -0,0 +1,8 @@ +-- implicit params availability in breakpoints + +:set -XImplicitParams +:l break015.hs +:b f +g 5 +:st +_flag diff --git a/testsuite/tests/ghci.debugger/scripts/break016.hs b/testsuite/tests/ghci.debugger/scripts/break016.hs new file mode 100644 index 0000000000..1e31c807e9 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break016.hs @@ -0,0 +1,4 @@ +f i = i :: Int + +g :: Int -> () +g i = () diff --git a/testsuite/tests/ghci.debugger/scripts/break016.script b/testsuite/tests/ghci.debugger/scripts/break016.script new file mode 100644 index 0000000000..2124e045bd --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break016.script @@ -0,0 +1,11 @@ +-- conditional breakpoints +:l break016.hs +:break 1 7 +-- this is one way to do conditional breakpoints. It's a bit +-- horrible: the :undef will complain the first time it is used. +:def cond (\expr -> return (":undef __cond\n:def __cond (\\_ -> if "++expr++" then return \"\" else return \":cont\")\n:__cond")) +:set stop 0 :cond (i < 3) +-- this one continues: +f 4 +-- this one stops: +f 1 diff --git a/testsuite/tests/ghci.debugger/scripts/break016.stdout b/testsuite/tests/ghci.debugger/scripts/break016.stdout new file mode 100644 index 0000000000..92128d177d --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break016.stdout @@ -0,0 +1,3 @@ +Breakpoint 0 activated at break016.hs:1:7-14 +macro '__cond' is not defined +4 diff --git a/testsuite/tests/ghci.debugger/scripts/break017.script b/testsuite/tests/ghci.debugger/scripts/break017.script new file mode 100644 index 0000000000..05c99acdda --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break017.script @@ -0,0 +1,11 @@ +:l ../QSort.hs +:set -fbreak-on-exception +:trace qsort ("abc" ++ undefined) +:back +putStrLn "Printing 1" +:print as +putStrLn "Forcing" +:force as +-- this should print the exception +putStrLn "Printing 2" +:print as diff --git a/testsuite/tests/ghci.debugger/scripts/break017.stdout b/testsuite/tests/ghci.debugger/scripts/break017.stdout new file mode 100644 index 0000000000..305289d216 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break017.stdout @@ -0,0 +1,12 @@ +"Stopped at <exception thrown> +_exception :: e = _ +Logged breakpoint at ../QSort.hs:6:24-38 +_result :: [Char] +a :: Char +as :: [Char] +Printing 1 +as = 'b' : 'c' : (_t1::[Char]) +Forcing +*** Exception: Prelude.undefined +Printing 2 +as = 'b' : 'c' : (_t2::[Char]) diff --git a/testsuite/tests/ghci.debugger/scripts/break018.script b/testsuite/tests/ghci.debugger/scripts/break018.script new file mode 100644 index 0000000000..0a4c70ef5a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break018.script @@ -0,0 +1,9 @@ +-- Check mdo statements: availability of local bindings. +-- Maybe we should not want to put in scope the things binded in the mdo scope, to avoid silliness. + +:set -XRecursiveDo +:l ../mdo.hs +:st l2dll "hello world" +:st +:st +:st diff --git a/testsuite/tests/ghci.debugger/scripts/break018.stderr b/testsuite/tests/ghci.debugger/scripts/break018.stderr new file mode 100644 index 0000000000..0107b5880f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break018.stderr @@ -0,0 +1,3 @@ +
+<no location info>:
+ Warning: -XRecursiveDo is deprecated: use -XDoRec or pragma {-# LANGUAGE DoRec #-} instead
diff --git a/testsuite/tests/ghci.debugger/scripts/break018.stdout b/testsuite/tests/ghci.debugger/scripts/break018.stdout new file mode 100644 index 0000000000..a495e7903a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break018.stdout @@ -0,0 +1,13 @@ +Stopped at ../mdo.hs:(29,1)-(31,27) +_result :: IO (N a) = _ +Stopped at ../mdo.hs:(29,16)-(31,27) +_result :: IO (N Char) = _ +x :: Char = 'h' +xs :: [Char] = _ +Stopped at ../mdo.hs:29:30-42 +_result :: IO (N Char) = _ +f :: N Char = _ +l :: N Char = _ +x :: Char = 'h' +Stopped at ../mdo.hs:(7,1)-(8,42) +_result :: IO (N a) = _ diff --git a/testsuite/tests/ghci.debugger/scripts/break019.script b/testsuite/tests/ghci.debugger/scripts/break019.script new file mode 100644 index 0000000000..59537e7364 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break019.script @@ -0,0 +1,3 @@ +-- Test for #1505 +:load ../Test2.hs +:break Test2 diff --git a/testsuite/tests/ghci.debugger/scripts/break019.stderr b/testsuite/tests/ghci.debugger/scripts/break019.stderr new file mode 100644 index 0000000000..fe27afda19 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break019.stderr @@ -0,0 +1,2 @@ +
+Top level: Not in scope: data constructor `Test2'
diff --git a/testsuite/tests/ghci.debugger/scripts/break020.hs b/testsuite/tests/ghci.debugger/scripts/break020.hs new file mode 100644 index 0000000000..b44de82a4c --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break020.hs @@ -0,0 +1,15 @@ +import Break020b + +line1 _ = return () +line2 _ = return () + +in_another_decl _ = do line1 0 + line2 0 + +main = do + line1 0 + line2 0 + in_another_decl 0 + in_another_module 0 + line2 1 + return ()
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break020.script b/testsuite/tests/ghci.debugger/scripts/break020.script new file mode 100644 index 0000000000..f8ba30859e --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break020.script @@ -0,0 +1,8 @@ +:l break020.hs +:set stop :list +:step main +:steplocal +:steplocal +:steplocal +:steplocal +:steplocal
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break020.stdout b/testsuite/tests/ghci.debugger/scripts/break020.stdout new file mode 100644 index 0000000000..0c7b0a4fc9 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break020.stdout @@ -0,0 +1,42 @@ +Stopped at break020.hs:(9,8)-(15,11) +_result :: IO () = _ +8 + vv +9 main = do +10 line1 0 +11 line2 0 +12 in_another_decl 0 +13 in_another_module 0 +14 line2 1 +15 return () + ^^ +Stopped at break020.hs:10:3-9 +_result :: IO () = _ +9 main = do +10 line1 0 + ^^^^^^^ +11 line2 0 +Stopped at break020.hs:11:3-9 +_result :: IO () = _ +10 line1 0 +11 line2 0 + ^^^^^^^ +12 in_another_decl 0 +Stopped at break020.hs:12:3-19 +_result :: IO () = _ +11 line2 0 +12 in_another_decl 0 + ^^^^^^^^^^^^^^^^^ +13 in_another_module 0 +Stopped at break020.hs:13:3-21 +_result :: IO () = _ +12 in_another_decl 0 +13 in_another_module 0 + ^^^^^^^^^^^^^^^^^^^ +14 line2 1 +Stopped at break020.hs:14:3-9 +_result :: IO () = _ +13 in_another_module 0 +14 line2 1 + ^^^^^^^ +15 return () diff --git a/testsuite/tests/ghci.debugger/scripts/break021.script b/testsuite/tests/ghci.debugger/scripts/break021.script new file mode 100644 index 0000000000..e9251d6613 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break021.script @@ -0,0 +1,23 @@ +:l break020.hs +:set stop :list +:step main +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule +:stepmodule
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break021.stdout b/testsuite/tests/ghci.debugger/scripts/break021.stdout new file mode 100644 index 0000000000..3a78eafce7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break021.stdout @@ -0,0 +1,135 @@ +Stopped at break020.hs:(9,8)-(15,11) +_result :: IO () = _ +8 + vv +9 main = do +10 line1 0 +11 line2 0 +12 in_another_decl 0 +13 in_another_module 0 +14 line2 1 +15 return () + ^^ +Stopped at break020.hs:10:3-9 +_result :: IO () = _ +9 main = do +10 line1 0 + ^^^^^^^ +11 line2 0 +Stopped at break020.hs:3:1-19 +_result :: IO () = _ +2 +3 line1 _ = return () + ^^^^^^^^^^^^^^^^^^^ +4 line2 _ = return () +Stopped at break020.hs:3:11-19 +_result :: IO () = _ +2 +3 line1 _ = return () + ^^^^^^^^^ +4 line2 _ = return () +Stopped at break020.hs:11:3-9 +_result :: IO () = _ +10 line1 0 +11 line2 0 + ^^^^^^^ +12 in_another_decl 0 +Stopped at break020.hs:4:1-19 +_result :: IO () = _ +3 line1 _ = return () +4 line2 _ = return () + ^^^^^^^^^^^^^^^^^^^ +5 +Stopped at break020.hs:4:11-19 +_result :: IO () = _ +3 line1 _ = return () +4 line2 _ = return () + ^^^^^^^^^ +5 +Stopped at break020.hs:12:3-19 +_result :: IO () = _ +11 line2 0 +12 in_another_decl 0 + ^^^^^^^^^^^^^^^^^ +13 in_another_module 0 +Stopped at break020.hs:(6,1)-(7,30) +_result :: m () = _ +5 + vv +6 in_another_decl _ = do line1 0 +7 line2 0 + ^^ +8 +Stopped at break020.hs:(6,21)-(7,30) +_result :: m () = _ +5 + vv +6 in_another_decl _ = do line1 0 +7 line2 0 + ^^ +8 +Stopped at break020.hs:6:24-30 +_result :: m () = _ +5 +6 in_another_decl _ = do line1 0 + ^^^^^^^ +7 line2 0 +Stopped at break020.hs:3:1-19 +_result :: m () = _ +2 +3 line1 _ = return () + ^^^^^^^^^^^^^^^^^^^ +4 line2 _ = return () +Stopped at break020.hs:3:11-19 +_result :: m () = _ +2 +3 line1 _ = return () + ^^^^^^^^^ +4 line2 _ = return () +Stopped at break020.hs:7:24-30 +_result :: m () = _ +6 in_another_decl _ = do line1 0 +7 line2 0 + ^^^^^^^ +8 +Stopped at break020.hs:4:1-19 +_result :: m () = _ +3 line1 _ = return () +4 line2 _ = return () + ^^^^^^^^^^^^^^^^^^^ +5 +Stopped at break020.hs:4:11-19 +_result :: m () = _ +3 line1 _ = return () +4 line2 _ = return () + ^^^^^^^^^ +5 +Stopped at break020.hs:13:3-21 +_result :: IO () = _ +12 in_another_decl 0 +13 in_another_module 0 + ^^^^^^^^^^^^^^^^^^^ +14 line2 1 +Stopped at break020.hs:14:3-9 +_result :: IO () = _ +13 in_another_module 0 +14 line2 1 + ^^^^^^^ +15 return () +Stopped at break020.hs:4:1-19 +_result :: IO () = _ +3 line1 _ = return () +4 line2 _ = return () + ^^^^^^^^^^^^^^^^^^^ +5 +Stopped at break020.hs:4:11-19 +_result :: IO () = _ +3 line1 _ = return () +4 line2 _ = return () + ^^^^^^^^^ +5 +Stopped at break020.hs:15:3-11 +_result :: IO () = _ +14 line2 1 +15 return () + ^^^^^^^^^ diff --git a/testsuite/tests/ghci.debugger/scripts/break022/A.hs b/testsuite/tests/ghci.debugger/scripts/break022/A.hs new file mode 100644 index 0000000000..bf903ab11e --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break022/A.hs @@ -0,0 +1,4 @@ +module A where +import {-# SOURCE #-} B + +a x = b x
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break022/B.hs b/testsuite/tests/ghci.debugger/scripts/break022/B.hs new file mode 100644 index 0000000000..cfc9682cbd --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break022/B.hs @@ -0,0 +1,5 @@ +module B where + +import A + +b x = x
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break022/B.hs-boot b/testsuite/tests/ghci.debugger/scripts/break022/B.hs-boot new file mode 100644 index 0000000000..8e73321e9f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break022/B.hs-boot @@ -0,0 +1,3 @@ +module B where + +b :: a -> a
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break022/C.hs b/testsuite/tests/ghci.debugger/scripts/break022/C.hs new file mode 100644 index 0000000000..0dd15af7e7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break022/C.hs @@ -0,0 +1,5 @@ +module C where + +import A +import B + diff --git a/testsuite/tests/ghci.debugger/scripts/break022/Makefile b/testsuite/tests/ghci.debugger/scripts/break022/Makefile new file mode 100644 index 0000000000..1c39d1c1fe --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break022/Makefile @@ -0,0 +1,3 @@ +TOP=../../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk diff --git a/testsuite/tests/ghci.debugger/scripts/break022/all.T b/testsuite/tests/ghci.debugger/scripts/break022/all.T new file mode 100644 index 0000000000..f81e8de45c --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break022/all.T @@ -0,0 +1,4 @@ +setTestOpts(extra_run_opts('-ignore-dot-ghci')) +setTestOpts(if_compiler_profiled(skip)) + +test('break022', normal, ghci_script, ['break022.script']) diff --git a/testsuite/tests/ghci.debugger/scripts/break022/break022.script b/testsuite/tests/ghci.debugger/scripts/break022/break022.script new file mode 100644 index 0000000000..e0aaeda371 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break022/break022.script @@ -0,0 +1,20 @@ + +-- We have this structure of modules: + +-- A (imports B.boot) +-- B (imports A) +-- B.boot (imports A) +-- C (imports A and B) + +-- And we load C, to debug some function in A which enters B. +-- But first we touch A, and reload. B.boot will be reloaded, but not B, which will end up with an empty modbreaks. When we :step into B, ghci will die with an out of bounds access in B's break array. +-- The effect we want is B.boot being reloaded while B is not. + +:l C +:! touch A.hs +:r +:break a +a () +:st +:st +:st -- here we step into B, and produce the exception
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break022/break022.stdout b/testsuite/tests/ghci.debugger/scripts/break022/break022.stdout new file mode 100644 index 0000000000..49cbd2628d --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break022/break022.stdout @@ -0,0 +1,8 @@ +Breakpoint 0 activated at A.hs:4:1-9 +Stopped at A.hs:4:1-9 +_result :: a = _ +Stopped at A.hs:4:7-9 +_result :: () = _ +x :: () = () +Stopped at B.hs:5:1-7 +_result :: t = _ diff --git a/testsuite/tests/ghci.debugger/scripts/break023/A.hs b/testsuite/tests/ghci.debugger/scripts/break023/A.hs new file mode 100644 index 0000000000..138a4faa1c --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break023/A.hs @@ -0,0 +1,2 @@ +module A where +import {-# SOURCE #-} B diff --git a/testsuite/tests/ghci.debugger/scripts/break023/B.hs b/testsuite/tests/ghci.debugger/scripts/break023/B.hs new file mode 100644 index 0000000000..cfc9682cbd --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break023/B.hs @@ -0,0 +1,5 @@ +module B where + +import A + +b x = x
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break023/B.hs-boot b/testsuite/tests/ghci.debugger/scripts/break023/B.hs-boot new file mode 100644 index 0000000000..8e73321e9f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break023/B.hs-boot @@ -0,0 +1,3 @@ +module B where + +b :: a -> a
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break023/C.hs b/testsuite/tests/ghci.debugger/scripts/break023/C.hs new file mode 100644 index 0000000000..0dd15af7e7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break023/C.hs @@ -0,0 +1,5 @@ +module C where + +import A +import B + diff --git a/testsuite/tests/ghci.debugger/scripts/break023/Makefile b/testsuite/tests/ghci.debugger/scripts/break023/Makefile new file mode 100644 index 0000000000..1c39d1c1fe --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break023/Makefile @@ -0,0 +1,3 @@ +TOP=../../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk diff --git a/testsuite/tests/ghci.debugger/scripts/break023/all.T b/testsuite/tests/ghci.debugger/scripts/break023/all.T new file mode 100644 index 0000000000..3858849735 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break023/all.T @@ -0,0 +1,4 @@ +setTestOpts(extra_run_opts('-ignore-dot-ghci')) +setTestOpts(if_compiler_profiled(skip)) + +test('break023', normal, ghci_script, ['break023.script']) diff --git a/testsuite/tests/ghci.debugger/scripts/break023/break023.script b/testsuite/tests/ghci.debugger/scripts/break023/break023.script new file mode 100644 index 0000000000..4ddd2d6be4 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break023/break023.script @@ -0,0 +1,17 @@ + +-- We have this structure of modules: + +-- A (imports B.boot) +-- B (imports A) +-- B.boot (imports A) +-- C (imports A and B) + +-- And we load C, to debug some function called b in B. +-- But first we touch A, and reload. B.boot will be reloaded, but not B, which will end up with an empty modbreaks. We can no longer set a breakpoint in B.b +-- The effect we want is B.boot being reloaded while B is not. + +:l C +:break b -- it works ok at this point +:! touch A.hs +:r +:break b -- it does not work anymore diff --git a/testsuite/tests/ghci.debugger/scripts/break023/break023.stdout b/testsuite/tests/ghci.debugger/scripts/break023/break023.stdout new file mode 100644 index 0000000000..2b6c85daf4 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break023/break023.stdout @@ -0,0 +1,2 @@ +Breakpoint 0 activated at B.hs:5:1-7 +Breakpoint 1 activated at B.hs:5:1-7 diff --git a/testsuite/tests/ghci.debugger/scripts/break024.hs b/testsuite/tests/ghci.debugger/scripts/break024.hs new file mode 100644 index 0000000000..33c8ce6036 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break024.hs @@ -0,0 +1,4 @@ +import Control.Exception as CE + +exception_uncaught = ioError (userError "error") +exception_caught = CE.try exception_uncaught :: IO (Either CE.IOException ()) diff --git a/testsuite/tests/ghci.debugger/scripts/break024.script b/testsuite/tests/ghci.debugger/scripts/break024.script new file mode 100644 index 0000000000..7efb396788 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break024.script @@ -0,0 +1,16 @@ +-- Test -fbreak-on-exception and -fbreak-on-error +:set -XDeriveDataTypeable +:l break024 +:set -fbreak-on-error +exception_caught +exception_uncaught +:force _exception +:co +:set -fno-break-on-error +:set -fbreak-on-exception +exception_uncaught +:force _exception +:co +exception_caught +:force _exception +:co diff --git a/testsuite/tests/ghci.debugger/scripts/break024.stdout b/testsuite/tests/ghci.debugger/scripts/break024.stdout new file mode 100644 index 0000000000..dc3bd73425 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break024.stdout @@ -0,0 +1,19 @@ +Left user error (error) +Stopped at <exception thrown> +_exception :: e = _ +_exception = SomeException + (GHC.IO.Exception.IOError + Nothing GHC.IO.Exception.UserError [] "error" Nothing Nothing) +*** Exception: user error (error) +Stopped at <exception thrown> +_exception :: e = _ +_exception = SomeException + (GHC.IO.Exception.IOError + Nothing GHC.IO.Exception.UserError [] "error" Nothing Nothing) +*** Exception: user error (error) +Stopped at <exception thrown> +_exception :: e = _ +_exception = SomeException + (GHC.IO.Exception.IOError + Nothing GHC.IO.Exception.UserError [] "error" Nothing Nothing) +Left user error (error) diff --git a/testsuite/tests/ghci.debugger/scripts/break024.stdout-ghc-7.0 b/testsuite/tests/ghci.debugger/scripts/break024.stdout-ghc-7.0 new file mode 100644 index 0000000000..d2c3495ee6 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break024.stdout-ghc-7.0 @@ -0,0 +1,28 @@ +Left user error (error) +Stopped at <exception thrown> +_exception :: e = SomeException (GHC.Exception.D:Exception _ + (GHC.Show.D:Show ...) ....) + (GHC.IO.Exception.IOError Nothing GHC.IO.Exception.UserError ....) +_exception = SomeException (GHC.Exception.D:Exception _ + (GHC.Show.D:Show _ _ _) _ _) + (GHC.IO.Exception.IOError Nothing GHC.IO.Exception.UserError [] + ['e','r','r','o','r'] Nothing Nothing) +*** Exception: user error (error) +Stopped at <exception thrown> +_exception :: e = SomeException (GHC.Exception.D:Exception _ + (GHC.Show.D:Show ...) ....) + (GHC.IO.Exception.IOError Nothing GHC.IO.Exception.UserError ....) +_exception = SomeException (GHC.Exception.D:Exception _ + (GHC.Show.D:Show _ _ _) _ _) + (GHC.IO.Exception.IOError Nothing GHC.IO.Exception.UserError [] + ['e','r','r','o','r'] Nothing Nothing) +*** Exception: user error (error) +Stopped at <exception thrown> +_exception :: e = SomeException (GHC.Exception.D:Exception _ + (GHC.Show.D:Show ...) ....) + (GHC.IO.Exception.IOError Nothing GHC.IO.Exception.UserError ....) +_exception = SomeException (GHC.Exception.D:Exception _ + (GHC.Show.D:Show _ _ _) _ _) + (GHC.IO.Exception.IOError Nothing GHC.IO.Exception.UserError [] + ['e','r','r','o','r'] Nothing Nothing) +Left user error (error) diff --git a/testsuite/tests/ghci.debugger/scripts/break025.script b/testsuite/tests/ghci.debugger/scripts/break025.script new file mode 100644 index 0000000000..2fe0bfcae6 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break025.script @@ -0,0 +1,4 @@ +-- :abandon in an exception breakpoint can lead to ghci freezing +:set -fbreak-on-exception +error "an error" +() diff --git a/testsuite/tests/ghci.debugger/scripts/break025.stdout b/testsuite/tests/ghci.debugger/scripts/break025.stdout new file mode 100644 index 0000000000..e38f173aff --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break025.stdout @@ -0,0 +1,3 @@ +Stopped at <exception thrown> +_exception :: e = _ +() diff --git a/testsuite/tests/ghci.debugger/scripts/break026.hs b/testsuite/tests/ghci.debugger/scripts/break026.hs new file mode 100644 index 0000000000..e88b9e96d7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break026.hs @@ -0,0 +1,7 @@ +module Test where + +import Prelude hiding (foldl) + +foldl f c xs = go c xs + where go c [] = c + go c (x:xs) = go (f c x) xs diff --git a/testsuite/tests/ghci.debugger/scripts/break026.script b/testsuite/tests/ghci.debugger/scripts/break026.script new file mode 100644 index 0000000000..98c6624751 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break026.script @@ -0,0 +1,23 @@ +:load break026 +:step foldl (+) 0 [1..5] +:step +:step +:step +:step +:step +:force c + -- answer should be 1 + +:load break026 +:step foldl (+) 0 [1..5] +:step +:step +:step +:step +:step +-- a diversion to single-step the evaluation of c: +:step c `seq` () +:step +-- end diversion +c + -- answer should be 1 again (not 0) diff --git a/testsuite/tests/ghci.debugger/scripts/break026.stdout b/testsuite/tests/ghci.debugger/scripts/break026.stdout new file mode 100644 index 0000000000..311c1e6bd2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break026.stdout @@ -0,0 +1,58 @@ +Stopped at break026.hs:(5,1)-(7,35) +_result :: t1 = _ +Stopped at break026.hs:5:16-22 +_result :: t1 = _ +c :: t1 = _ +go :: t1 -> [t] -> t1 = _ +xs :: [t] = _ +Stopped at break026.hs:(6,9)-(7,35) +_result :: t1 = _ +f :: t1 -> t -> t1 = _ +Stopped at break026.hs:7:23-35 +_result :: t1 = _ +c :: t1 = _ +f :: t1 -> Integer -> t1 = _ +x :: Integer = 1 +xs :: [Integer] = _ +Stopped at break026.hs:(6,9)-(7,35) +_result :: t1 = _ +f :: t1 -> t -> t1 = _ +Stopped at break026.hs:7:23-35 +_result :: t1 = _ +c :: t1 = _ +f :: t1 -> Integer -> t1 = _ +x :: Integer = 2 +xs :: [Integer] = _ +c = 1 +Stopped at break026.hs:(5,1)-(7,35) +_result :: t1 = _ +Stopped at break026.hs:5:16-22 +_result :: t1 = _ +c :: t1 = _ +go :: t1 -> [t] -> t1 = _ +xs :: [t] = _ +Stopped at break026.hs:(6,9)-(7,35) +_result :: t1 = _ +f :: t1 -> t -> t1 = _ +Stopped at break026.hs:7:23-35 +_result :: t1 = _ +c :: t1 = _ +f :: t1 -> Integer -> t1 = _ +x :: Integer = 1 +xs :: [Integer] = _ +Stopped at break026.hs:(6,9)-(7,35) +_result :: t1 = _ +f :: t1 -> t -> t1 = _ +Stopped at break026.hs:7:23-35 +_result :: t1 = _ +c :: t1 = _ +f :: t1 -> Integer -> t1 = _ +x :: Integer = 2 +xs :: [Integer] = _ +Stopped at break026.hs:7:27-31 +_result :: t1 = _ +c :: t1 = _ +f :: t1 -> Integer -> t1 = _ +x :: Integer = 1 +() +1 diff --git a/testsuite/tests/ghci.debugger/scripts/break027.script b/testsuite/tests/ghci.debugger/scripts/break027.script new file mode 100644 index 0000000000..198b259c78 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break027.script @@ -0,0 +1,5 @@ +:l ../QSort +:break qsort +qsort [3,2,1] +:step +:i a diff --git a/testsuite/tests/ghci.debugger/scripts/break027.stdout b/testsuite/tests/ghci.debugger/scripts/break027.stdout new file mode 100644 index 0000000000..818111a9e1 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break027.stdout @@ -0,0 +1,9 @@ +Breakpoint 0 activated at ../QSort.hs:(4,1)-(6,55) +Stopped at ../QSort.hs:(4,1)-(6,55) +_result :: [a] = _ +Stopped at ../QSort.hs:5:16-51 +_result :: [a] = _ +a :: a = _ +left :: [a] = _ +right :: [a] = _ +a :: a -- <no location info> diff --git a/testsuite/tests/ghci.debugger/scripts/break028.hs b/testsuite/tests/ghci.debugger/scripts/break028.hs new file mode 100644 index 0000000000..8e4ef2a3b5 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break028.hs @@ -0,0 +1,15 @@ +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-} + +type family Id x +type instance Id Int = Int +type instance Id Bool = Bool + +class Convert x y where convert :: x -> y +instance Convert x x where convert = id + +f :: Convert a (Id a) => a -> Id a +f x = convert x + +g :: Convert a (Id a) => a -> Id a +g x = let x' = f x in x'
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/break028.script b/testsuite/tests/ghci.debugger/scripts/break028.script new file mode 100644 index 0000000000..26793f1459 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break028.script @@ -0,0 +1,4 @@ +:l break028 +:step g False +:step +:q diff --git a/testsuite/tests/ghci.debugger/scripts/break028.stdout b/testsuite/tests/ghci.debugger/scripts/break028.stdout new file mode 100644 index 0000000000..2438d73a14 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/break028.stdout @@ -0,0 +1,5 @@ +Stopped at break028.hs:15:1-24 +_result :: Id a = _ +Stopped at break028.hs:15:23-24 +_result :: Id a = _ +x' :: Id a = _ diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk001.script b/testsuite/tests/ghci.debugger/scripts/dynbrk001.script new file mode 100644 index 0000000000..95c1ab6118 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk001.script @@ -0,0 +1,22 @@ + +:set -fprint-explicit-foralls + +:l ../QSort + +:delete 1 +-- Illegal: empty breakpoint list + +:break NonModule 1 +-- Illegal: I don't know this module + +:break QSort 1 1 +-- Error: No breakpoint here + +:show breaks +-- Show an empty list + +qsort [8, 4, 42, 16, 15, 23] +-- Should run normally + +-- Testing that ghci commands work normally +:i map diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk001.stderr b/testsuite/tests/ghci.debugger/scripts/dynbrk001.stderr new file mode 100644 index 0000000000..adb8dca658 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk001.stderr @@ -0,0 +1,4 @@ + +<no location info>: + Could not find module `NonModule' + It is not a module in the current program, or in any known package. diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk001.stdout b/testsuite/tests/ghci.debugger/scripts/dynbrk001.stdout new file mode 100644 index 0000000000..3ce4969682 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk001.stdout @@ -0,0 +1,5 @@ +Breakpoint 1 does not exist +No breakpoints found at that location. +No active breakpoints. +[4,8,15,16,23,42] +map :: forall a b. (a -> b) -> [a] -> [b] -- Defined in GHC.Base diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk002.script b/testsuite/tests/ghci.debugger/scripts/dynbrk002.script new file mode 100644 index 0000000000..043e02328b --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk002.script @@ -0,0 +1,7 @@ +-- :abandon stops a debugging session + +:l ../QSort +:break QSort 5 +run +:abandon +:q diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk002.stdout b/testsuite/tests/ghci.debugger/scripts/dynbrk002.stdout new file mode 100644 index 0000000000..b67ced36a6 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk002.stdout @@ -0,0 +1,6 @@ +Breakpoint 0 activated at ../QSort.hs:5:16-51 +Stopped at ../QSort.hs:5:16-51 +_result :: [a] = _ +a :: a = _ +left :: [a] = _ +right :: [a] = _ diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk003.script b/testsuite/tests/ghci.debugger/scripts/dynbrk003.script new file mode 100644 index 0000000000..dfd00b69ab --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk003.script @@ -0,0 +1,2 @@ +-- :abandon in the top level should be a no-op +:abandon diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk003.stdout b/testsuite/tests/ghci.debugger/scripts/dynbrk003.stdout new file mode 100644 index 0000000000..be3e67e656 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk003.stdout @@ -0,0 +1 @@ +There is no computation running. diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk004.script b/testsuite/tests/ghci.debugger/scripts/dynbrk004.script new file mode 100644 index 0000000000..eb0bad6940 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk004.script @@ -0,0 +1,8 @@ +-- Instrumentation of mdo notation + +:set -XRecursiveDo +:l ../mdo.hs +:break Main 13 +:break Main 12 +:break Main 11 +:break Main 14 diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk004.stderr b/testsuite/tests/ghci.debugger/scripts/dynbrk004.stderr new file mode 100644 index 0000000000..0107b5880f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk004.stderr @@ -0,0 +1,3 @@ +
+<no location info>:
+ Warning: -XRecursiveDo is deprecated: use -XDoRec or pragma {-# LANGUAGE DoRec #-} instead
diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk004.stdout b/testsuite/tests/ghci.debugger/scripts/dynbrk004.stdout new file mode 100644 index 0000000000..ed7fb990a4 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk004.stdout @@ -0,0 +1,4 @@ +Breakpoint 0 activated at ../mdo.hs:13:16-30 +Breakpoint 1 activated at ../mdo.hs:12:16-30 +Breakpoint 2 activated at ../mdo.hs:11:16-30 +Breakpoint 3 activated at ../mdo.hs:14:10-18 diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk005.hs b/testsuite/tests/ghci.debugger/scripts/dynbrk005.hs new file mode 100644 index 0000000000..5b228d2ab4 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk005.hs @@ -0,0 +1,5 @@ +import TupleN + +tuple3 x = $(tuple 3) x + +normal_fn x = tuple3 x
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk005.script b/testsuite/tests/ghci.debugger/scripts/dynbrk005.script new file mode 100644 index 0000000000..6ac65d8096 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk005.script @@ -0,0 +1,13 @@ +-- TH generated code does not get instrumented + +:set -XTemplateHaskell +:l dynbrk005 +:st normal_fn [1,2,3] +:st +:st +:st +:st +:st +:st +:st +:st
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk005.stdout b/testsuite/tests/ghci.debugger/scripts/dynbrk005.stdout new file mode 100644 index 0000000000..3eff707e6c --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk005.stdout @@ -0,0 +1,11 @@ +Stopped at dynbrk005.hs:5:0-21 +_result :: (a, a, a) = _ +Stopped at dynbrk005.hs:5:14-21 +_result :: (a, a, a) = _ +x :: [a] = [_,_,_] +Stopped at dynbrk005.hs:3:0-22 +_result :: (a, a, a) = _ +Stopped at dynbrk005.hs:3:11-22 +_result :: (a, a, a) = _ +x :: [a] = [_,_,_] +(1,2,3) diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk007.hs b/testsuite/tests/ghci.debugger/scripts/dynbrk007.hs new file mode 100644 index 0000000000..dc02170216 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk007.hs @@ -0,0 +1,6 @@ +f :: Maybe Int +f = do + i <- return 1 + j <- return 2 + k <- return 3 + return i
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk007.script b/testsuite/tests/ghci.debugger/scripts/dynbrk007.script new file mode 100644 index 0000000000..1f40a2255f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk007.script @@ -0,0 +1,7 @@ +-- Breakpoints in do statements +:l dynbrk007.hs +:st f +:st +:st +:st +:st diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk007.stdout b/testsuite/tests/ghci.debugger/scripts/dynbrk007.stdout new file mode 100644 index 0000000000..22adee0db2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk007.stdout @@ -0,0 +1,11 @@ +Stopped at dynbrk007.hs:(2,5)-(6,11) +_result :: Maybe Int = _ +Stopped at dynbrk007.hs:3:9-16 +_result :: Maybe Int = _ +Stopped at dynbrk007.hs:4:9-16 +_result :: Maybe Integer = _ +Stopped at dynbrk007.hs:5:9-16 +_result :: Maybe Integer = _ +Stopped at dynbrk007.hs:6:4-11 +_result :: Maybe Int = _ +i :: Int = 1 diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk008.hs b/testsuite/tests/ghci.debugger/scripts/dynbrk008.hs new file mode 100644 index 0000000000..8fbde66d21 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk008.hs @@ -0,0 +1,4 @@ +f :: Int -> [Int] +f i = [ j | j <- [i], h <- [j], k <- [h]] + +g i = i
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk008.script b/testsuite/tests/ghci.debugger/scripts/dynbrk008.script new file mode 100644 index 0000000000..e99ee6076e --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk008.script @@ -0,0 +1,9 @@ +-- Breakpoints on binding sites that start with a List Comprehension are being coalesced, since list comp. are desugared to Lets and we coalesce bkpts for Lets (since there will be a breakpoint at body of the Let anyway) + +:l dynbrk008.hs +:st f 42 +:st +:st +:st +:st +:st diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk008.stdout b/testsuite/tests/ghci.debugger/scripts/dynbrk008.stdout new file mode 100644 index 0000000000..722f2991f3 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk008.stdout @@ -0,0 +1,15 @@ +Stopped at dynbrk008.hs:2:1-41 +_result :: [Int] = _ +Stopped at dynbrk008.hs:2:7-41 +_result :: [Int] = _ +i :: Int = 42 +Stopped at dynbrk008.hs:2:18-20 +_result :: [Int] = _ +i :: Int = 42 +Stopped at dynbrk008.hs:2:28-30 +_result :: [Int] = _ +j :: Int = 42 +Stopped at dynbrk008.hs:2:38-40 +_result :: [Int] = _ +h :: Int = 42 +[42] diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk009.hs b/testsuite/tests/ghci.debugger/scripts/dynbrk009.hs new file mode 100644 index 0000000000..f0e0bfee16 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk009.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE MagicHash, BangPatterns #-} + +import GHC.Base + +f :: Int -> Int# -> Int# +f x i = i + +test = let !(I# i) = 3 in I# (f 2 i)
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk009.script b/testsuite/tests/ghci.debugger/scripts/dynbrk009.script new file mode 100644 index 0000000000..7d00f193a5 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk009.script @@ -0,0 +1,10 @@ +-- Instrumentation should not set breakpoints around unlifted values. +-- Also unlifted types are not bound at a breakpoint currently. + +:l dynbrk009.hs +:st test +:st +:st +:st +:st +:st diff --git a/testsuite/tests/ghci.debugger/scripts/dynbrk009.stdout b/testsuite/tests/ghci.debugger/scripts/dynbrk009.stdout new file mode 100644 index 0000000000..e7e107448c --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/dynbrk009.stdout @@ -0,0 +1,11 @@ +Stopped at dynbrk009.hs:8:22 +_result :: Int = _ +Stopped at dynbrk009.hs:8:27-36 +_result :: Int = _ +Stopped at dynbrk009.hs:8:31-35 +_result :: Int = _ +Stopped at dynbrk009.hs:6:1-9 +_result :: Int = _ +Stopped at dynbrk009.hs:6:9 +_result :: Int = _ +3 diff --git a/testsuite/tests/ghci.debugger/scripts/getargs.script b/testsuite/tests/ghci.debugger/scripts/getargs.script new file mode 100644 index 0000000000..4574386df3 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/getargs.script @@ -0,0 +1,4 @@ +:l ../getargs.hs +:set args 42 +:step main +:step diff --git a/testsuite/tests/ghci.debugger/scripts/getargs.stdout b/testsuite/tests/ghci.debugger/scripts/getargs.stdout new file mode 100644 index 0000000000..659308cd77 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/getargs.stdout @@ -0,0 +1,3 @@ +Stopped at ..\getargs.hs:3:8-24 +_result :: IO () = _ +["42"] diff --git a/testsuite/tests/ghci.debugger/scripts/hist001.script b/testsuite/tests/ghci.debugger/scripts/hist001.script new file mode 100644 index 0000000000..5f8eab637e --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/hist001.script @@ -0,0 +1,15 @@ +:l ../Test3.hs +-- set a break on the [] case in map +:b 1 +-- trace an execution +:tr mymap (+1) [1,2] +:hist +:back +:show bindings +:back +:show bindings +:force _result +:back +:forward +-- at this point, we can't retrieve the bindings because _result (the AP_STACK) +-- was evaluated previously. GHCi should not crash, preferably. diff --git a/testsuite/tests/ghci.debugger/scripts/hist001.stdout b/testsuite/tests/ghci.debugger/scripts/hist001.stdout new file mode 100644 index 0000000000..68e05cc076 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/hist001.stdout @@ -0,0 +1,31 @@ +Breakpoint 0 activated at ../Test3.hs:1:14-15 +[2,3Stopped at ../Test3.hs:1:14-15 +_result :: [a] = _ +-1 : mymap (../Test3.hs:(1,1)-(2,31)) +-2 : mymap (../Test3.hs:2:22-31) +-3 : mymap (../Test3.hs:2:18-20) +-4 : mymap (../Test3.hs:2:18-31) +-5 : mymap (../Test3.hs:(1,1)-(2,31)) +-6 : mymap (../Test3.hs:2:22-31) +-7 : mymap (../Test3.hs:2:18-20) +-8 : mymap (../Test3.hs:2:18-31) +-9 : mymap (../Test3.hs:(1,1)-(2,31)) +<end of history> +Logged breakpoint at ../Test3.hs:(1,1)-(2,31) +_result :: [a] +_result :: [a] = _ +Logged breakpoint at ../Test3.hs:2:22-31 +_result :: [a] +f :: t -> a +xs :: [t] +_result :: [a] = _ +f :: t -> a = _ +xs :: [t] = [] +*** Ignoring breakpoint +_result = [] +Logged breakpoint at ../Test3.hs:2:18-20 +_result :: a +f :: Integer -> a +x :: Integer +Logged breakpoint at ../Test3.hs:2:22-31 +_result :: [a] diff --git a/testsuite/tests/ghci.debugger/scripts/listCommand001.script b/testsuite/tests/ghci.debugger/scripts/listCommand001.script new file mode 100644 index 0000000000..767b27c47f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/listCommand001.script @@ -0,0 +1,13 @@ +:list +-- should fail, nothing to list +:list Data.List 20 +-- can't list a compiled module +:list Data.List.map +-- can't list a compiled module +:l ../Test3.hs +:list mymap +:list main +:list 4 +-- wrong syntax: +:list a b c +:list 10 20 diff --git a/testsuite/tests/ghci.debugger/scripts/listCommand001.stdout b/testsuite/tests/ghci.debugger/scripts/listCommand001.stdout new file mode 100644 index 0000000000..26a27ac5a5 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/listCommand001.stdout @@ -0,0 +1,15 @@ +Not stopped at a breakpoint; nothing to list +module 'Data.List' is from another package; +this command requires an interpreted module +cannot list source code for map: module GHC.Base is not interpreted +1 mymap f [] = [] +2 mymap f (x:xs) = f x:mymap f xs +3 +3 +4 main = mapM_ putStrLn $ mymap ('a':) ["hello","bye"] +5 +3 +4 main = mapM_ putStrLn $ mymap ('a':) ["hello","bye"] +5 +syntax: :list [<line> | <module> <line> | <identifier>] +syntax: :list [<line> | <module> <line> | <identifier>] diff --git a/testsuite/tests/ghci.debugger/scripts/listCommand002.hs b/testsuite/tests/ghci.debugger/scripts/listCommand002.hs new file mode 100644 index 0000000000..71f3f5482c --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/listCommand002.hs @@ -0,0 +1,5 @@ +import System.Directory + +main = do + setCurrentDirectory ".." + putStrLn "Hello World"
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/listCommand002.script b/testsuite/tests/ghci.debugger/scripts/listCommand002.script new file mode 100644 index 0000000000..72abf5291d --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/listCommand002.script @@ -0,0 +1,4 @@ +:l listCommand002 +:step main +:step +:step
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/listCommand002.stdout b/testsuite/tests/ghci.debugger/scripts/listCommand002.stdout new file mode 100644 index 0000000000..95854884b2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/listCommand002.stdout @@ -0,0 +1,6 @@ +Stopped at listCommand002.hs:(3,8)-(5,24) +_result :: IO () = _ +Stopped at listCommand002.hs:4:3-26 +_result :: IO () = _ +Stopped at listCommand002.hs:5:3-24 +_result :: IO () = _ diff --git a/testsuite/tests/ghci.debugger/scripts/print001.script b/testsuite/tests/ghci.debugger/scripts/print001.script new file mode 100644 index 0000000000..f2111c0cc5 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print001.script @@ -0,0 +1,12 @@ +-- Printing of lists + +let li = map Just [0..5] +:p li +head li +:p li +length li +:p li +:sp li +li +:p li +:sp li
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print001.stdout b/testsuite/tests/ghci.debugger/scripts/print001.stdout new file mode 100644 index 0000000000..c55ed941cb --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print001.stdout @@ -0,0 +1,10 @@ +li = (_t1::[Maybe Integer]) +Just 0 +li = Just 0 : (_t2::[Maybe Integer]) +6 +li = [Just 0,(_t3::Maybe Integer),(_t4::Maybe Integer), + (_t5::Maybe Integer),(_t6::Maybe Integer),(_t7::Maybe Integer)] +li = [Just 0,_,_,_,_,_] +[Just 0,Just 1,Just 2,Just 3,Just 4,Just 5] +li = [Just 0,Just 1,Just 2,Just 3,Just 4,Just 5] +li = [Just 0,Just 1,Just 2,Just 3,Just 4,Just 5] diff --git a/testsuite/tests/ghci.debugger/scripts/print002.script b/testsuite/tests/ghci.debugger/scripts/print002.script new file mode 100644 index 0000000000..629bb92e74 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print002.script @@ -0,0 +1,19 @@ +-- printing of Showables + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +let f = Just (1.2::Float) +f +:p f + +let i = Just (10::Integer) +:p i + +case i of Just j -> Control.Exception.evaluate j +:p i + +:l ../Test.hs + +let s = S1 'a' 'b' 'c' +s +:p s +:sp s
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print002.stdout b/testsuite/tests/ghci.debugger/scripts/print002.stdout new file mode 100644 index 0000000000..ab0e6f2fdb --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print002.stdout @@ -0,0 +1,8 @@ +Just 1.2 +f = Just 1.2 +i = Just (_t1::Integer) +10 +i = Just 10 +'a' +s = S1 'a' 'b' 'c' +s = S1 'a' 'b' 'c' diff --git a/testsuite/tests/ghci.debugger/scripts/print003.script b/testsuite/tests/ghci.debugger/scripts/print003.script new file mode 100644 index 0000000000..8544f46231 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print003.script @@ -0,0 +1,15 @@ +-- Simple Recovery of types - opaque types +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test +let t = O (map Just [[1,1],[2,2]]) +:p t +-- should have bound _t1 now +:show bindings +seq _t1 () +:p t +:show bindings +seq _t2 () +:p t +seq _t4 () +:p t +:t _t7 diff --git a/testsuite/tests/ghci.debugger/scripts/print003.stdout b/testsuite/tests/ghci.debugger/scripts/print003.stdout new file mode 100644 index 0000000000..99a66e4bdc --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print003.stdout @@ -0,0 +1,15 @@ +t = O (_t1::a) +_t1 :: a = _ +t :: Opaque = O _ +() +t = O ((_t2::a1) : (_t3::[a1])) +_t1 :: [a] = _ : _ +_t2 :: a1 = _ +_t3 :: [a1] = _ +it :: () = () +t :: Opaque = O (_ : _) +() +t = O (Just [(_t4::a1),(_t5::a1)] : (_t6::[Maybe [a1]])) +() +t = O (Just [1,(_t7::Integer)] : (_t8::[Maybe [Integer]])) +_t7 :: Integer diff --git a/testsuite/tests/ghci.debugger/scripts/print004.script b/testsuite/tests/ghci.debugger/scripts/print004.script new file mode 100644 index 0000000000..b82929a600 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print004.script @@ -0,0 +1,28 @@ +-- simple :print tests + +let a = False +:sp a +:p a + +let b = map Just [1..4] +:p b +head b +:p b +length b +:p b +:sp b +b +:p b + +-- Force loading of a external package and keep pushing +:m +Language.Haskell.TH +let c = ListT +:p c +let d = map TupleT [1..4] +:p d +head d +:p d +length d +:p d +d +:p d diff --git a/testsuite/tests/ghci.debugger/scripts/print004.stdout b/testsuite/tests/ghci.debugger/scripts/print004.stdout new file mode 100644 index 0000000000..ee7bbacefa --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print004.stdout @@ -0,0 +1,19 @@ +a = False +a = False +b = (_t1::[Maybe Integer]) +Just 1 +b = Just 1 : (_t2::[Maybe Integer]) +4 +b = [Just 1,(_t3::Maybe Integer),(_t4::Maybe Integer), + (_t5::Maybe Integer)] +b = [Just 1,_,_,_] +[Just 1,Just 2,Just 3,Just 4] +b = [Just 1,Just 2,Just 3,Just 4] +c = ListT +d = (_t6::[Type]) +TupleT 1 +d = TupleT 1 : (_t7::[Type]) +4 +d = [TupleT 1,(_t8::Type),(_t9::Type),(_t10::Type)] +[TupleT 1,TupleT 2,TupleT 3,TupleT 4] +d = [TupleT 1,TupleT 2,TupleT 3,TupleT 4] diff --git a/testsuite/tests/ghci.debugger/scripts/print005.script b/testsuite/tests/ghci.debugger/scripts/print005.script new file mode 100644 index 0000000000..0d26508703 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print005.script @@ -0,0 +1,15 @@ +-- Recovery of types, polymorphic bindings inside a bkpt + +:l ../QSort +:break 5 +qsort [8, 4] + +:p right +seq right () +:p right +:p left +seq left () +:p left +length left +:p left +:continue
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print005.stdout b/testsuite/tests/ghci.debugger/scripts/print005.stdout new file mode 100644 index 0000000000..f2c930a356 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print005.stdout @@ -0,0 +1,19 @@ +Breakpoint 0 activated at ../QSort.hs:5:16-51 +Stopped at ../QSort.hs:5:16-51 +_result :: [a] = _ +a :: a = _ +left :: [a] = _ +right :: [a] = _ +right = (_t1::[a]) +() +right = [] +left = (_t2::[Integer]) +() +left = 4 : (_t3::[Integer]) +1 +left = [4] +Stopped at ../QSort.hs:5:16-51 +_result :: [Integer] = _ +a :: Integer = 4 +left :: [Integer] = _ +right :: [Integer] = _ diff --git a/testsuite/tests/ghci.debugger/scripts/print006.script b/testsuite/tests/ghci.debugger/scripts/print006.script new file mode 100644 index 0000000000..d4c60d56a6 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print006.script @@ -0,0 +1,19 @@ +-- Recovery of types, opaque types +-- This scenario demands propagation of types up in the tree of terms + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test +let t = O (map Just [[1,1],[2,2]]) +:p t +seq _t1 () -- The contents of the opaque +:p t +seq _t3 () -- The tail of the list +:p t +seq _t5 () -- The 2nd element of the list +:p t +seq _t8 () -- The 1st element of the list inside the Just +:p t +seq _t11 () -- The 1st element of the outer list + +:p t + -- The 1st Just must be completely typed, as we know the type of the list
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print006.stdout b/testsuite/tests/ghci.debugger/scripts/print006.stdout new file mode 100644 index 0000000000..0a91ca724b --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print006.stdout @@ -0,0 +1,14 @@ +t = O (_t1::a) +() +t = O ((_t2::a1) : (_t3::[a1])) +() +t = O ((_t4::a2) : (_t5::a2) : (_t6::[a2])) +() +t = O ((_t7::Maybe [a1]) : Just [(_t8::a1),(_t9::a1)] : + (_t10::[Maybe [a1]])) +() +t = O ((_t11::Maybe [Integer]) : Just [2,(_t12::Integer)] : + (_t13::[Maybe [Integer]])) +() +t = O (Just [(_t14::Integer),(_t15::Integer)] : + Just [2,(_t16::Integer)] : (_t17::[Maybe [Integer]])) diff --git a/testsuite/tests/ghci.debugger/scripts/print007.script b/testsuite/tests/ghci.debugger/scripts/print007.script new file mode 100644 index 0000000000..69fbb4d2dd --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print007.script @@ -0,0 +1,30 @@ +-- Handling of unboxed fields +-- There seems to be a problem with -funbox-strict-fields +-- and interpreted code. +-- dataConRepArgTys says they are unboxed, +-- but they seem to be not. +-- So this test fails with wrong output +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test + +let s = S2 'a' 'b' +seq s () +:p s + +:set -funbox-strict-fields +:l +:l ../Test + +let s = S2 'a' 'b' +seq s () +:p s + + +:set -funbox-strict-fields -O +:l +:l ../Test + +let s = S2 'a' 'b' +seq s () +:p s + diff --git a/testsuite/tests/ghci.debugger/scripts/print007.stderr b/testsuite/tests/ghci.debugger/scripts/print007.stderr new file mode 100644 index 0000000000..713c629818 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print007.stderr @@ -0,0 +1,3 @@ + +<no location info>: + Warning: -O conflicts with --interactive; -O ignored. diff --git a/testsuite/tests/ghci.debugger/scripts/print007.stdout b/testsuite/tests/ghci.debugger/scripts/print007.stdout new file mode 100644 index 0000000000..1498fe1ae1 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print007.stdout @@ -0,0 +1,6 @@ +() +s = S2 'a' 'b' +() +s = S2 'a' 'b' +() +s = S2 'a' 'b' diff --git a/testsuite/tests/ghci.debugger/scripts/print008.script b/testsuite/tests/ghci.debugger/scripts/print008.script new file mode 100644 index 0000000000..52ca7dc857 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print008.script @@ -0,0 +1,14 @@ +--Handling of polymorphic types: +-- testing that tyvars are instantiated to unknown + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test +let t = O (map Just [[1,1],[2,2]]) + +:p t +:t _t1 +seq _t1 () +:p t +seq _t2 () +:p t +:t _t4
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print008.stdout b/testsuite/tests/ghci.debugger/scripts/print008.stdout new file mode 100644 index 0000000000..1b42a99ed4 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print008.stdout @@ -0,0 +1,7 @@ +t = O (_t1::a) +_t1 :: a +() +t = O ((_t2::a1) : (_t3::[a1])) +() +t = O (Just [(_t4::a1),(_t5::a1)] : (_t6::[Maybe [a1]])) +_t4 :: a1 diff --git a/testsuite/tests/ghci.debugger/scripts/print009.script b/testsuite/tests/ghci.debugger/scripts/print009.script new file mode 100644 index 0000000000..9c36e8c403 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print009.script @@ -0,0 +1,8 @@ +-- Name generation +-- Testing collisions + +let _t1 = "user value" +let li = map Just [1..4] +:p li +_t1 +_t2
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print009.stdout b/testsuite/tests/ghci.debugger/scripts/print009.stdout new file mode 100644 index 0000000000..de29287d57 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print009.stdout @@ -0,0 +1,3 @@ +li = (_t2::[Maybe Integer]) +"user value" +[Just 1,Just 2,Just 3,Just 4] diff --git a/testsuite/tests/ghci.debugger/scripts/print010.script b/testsuite/tests/ghci.debugger/scripts/print010.script new file mode 100644 index 0000000000..4b488fa867 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print010.script @@ -0,0 +1,12 @@ +-- Another tricky type reconstruction case + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test + +let o = O (map id [0..3]) +:p o +seq _t1 () +:p o +seq _t2 () +length _t3 +:p o
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print010.stdout b/testsuite/tests/ghci.debugger/scripts/print010.stdout new file mode 100644 index 0000000000..b390d255c8 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print010.stdout @@ -0,0 +1,6 @@ +o = O (_t1::a) +() +o = O ((_t2::a1) : (_t3::[a1])) +() +3 +o = O [0,(_t4::Integer),(_t5::Integer),(_t6::Integer)] diff --git a/testsuite/tests/ghci.debugger/scripts/print011.script b/testsuite/tests/ghci.debugger/scripts/print011.script new file mode 100644 index 0000000000..9d200dcaa2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print011.script @@ -0,0 +1,13 @@ +-- Type reconstruction with newtypes involved + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test + +let i = map (Just . Just) [My 1 .. My 3] +:p i +seq _t1 () +:p i +seq _t2 () +:p i +seq _t4 () +:p i
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print011.stdout b/testsuite/tests/ghci.debugger/scripts/print011.stdout new file mode 100644 index 0000000000..852312f15f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print011.stdout @@ -0,0 +1,7 @@ +i = (_t1::[Maybe (Maybe MyInt)]) +() +i = (_t2::Maybe (Maybe MyInt)) : (_t3::[Maybe (Maybe MyInt)]) +() +i = Just (_t4::Maybe MyInt) : (_t5::[Maybe (Maybe MyInt)]) +() +i = Just (Just (My 1)) : (_t6::[Maybe (Maybe MyInt)]) diff --git a/testsuite/tests/ghci.debugger/scripts/print012.script b/testsuite/tests/ghci.debugger/scripts/print012.script new file mode 100644 index 0000000000..bda9a8fbe7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print012.script @@ -0,0 +1,11 @@ +:set -XGADTs -XRank2Types -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../GADT +:a ../Test +:m +Main +let o = O (id foo) +:p o +seq _t1 () +:t _t1 +:p o +seq _t4 () +:p o
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print012.stdout b/testsuite/tests/ghci.debugger/scripts/print012.stdout new file mode 100644 index 0000000000..c717acc069 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print012.stdout @@ -0,0 +1,6 @@ +o = O (_t1::a) +() +_t1 :: SafeList x NonEmpty +o = O (Cons (_t4::x1) (_t5::SafeList x1 y)) +() +o = O (Cons 3 (_t8::SafeList Integer y1)) diff --git a/testsuite/tests/ghci.debugger/scripts/print013.script b/testsuite/tests/ghci.debugger/scripts/print013.script new file mode 100644 index 0000000000..154c1b328f --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print013.script @@ -0,0 +1,10 @@ +-- Test handling of extra fields in the representation due to dictionaries + +:set -XGADTs -XRank2Types +:l ../GADT + +let d = DictN 1 +:p d +seq _t1 () +:p d +:q diff --git a/testsuite/tests/ghci.debugger/scripts/print013.stdout b/testsuite/tests/ghci.debugger/scripts/print013.stdout new file mode 100644 index 0000000000..8ccfef5376 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print013.stdout @@ -0,0 +1,3 @@ +d = DictN (_t13::Integer) +() +d = DictN (_t26::Integer) diff --git a/testsuite/tests/ghci.debugger/scripts/print014.script b/testsuite/tests/ghci.debugger/scripts/print014.script new file mode 100644 index 0000000000..88fce78418 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print014.script @@ -0,0 +1,9 @@ +-- Test handling of extra fields in the representation due to existentials. + +:set -XGADTs -XRank2Types +:l ../GADT + +let e = Exist 1 +:p e +seq _t1 () +:p e diff --git a/testsuite/tests/ghci.debugger/scripts/print014.stdout b/testsuite/tests/ghci.debugger/scripts/print014.stdout new file mode 100644 index 0000000000..e6d9a01bd8 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print014.stdout @@ -0,0 +1,3 @@ +e = Exist (_t1::a) +() +e = Exist 1 diff --git a/testsuite/tests/ghci.debugger/scripts/print015.script b/testsuite/tests/ghci.debugger/scripts/print015.script new file mode 100644 index 0000000000..6fdcca9b56 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print015.script @@ -0,0 +1,8 @@ +-- + +let li = map Just (1 : undefined) +:p li +head li +:p li +:force li +:p li diff --git a/testsuite/tests/ghci.debugger/scripts/print015.stdout b/testsuite/tests/ghci.debugger/scripts/print015.stdout new file mode 100644 index 0000000000..cc037e9ba7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print015.stdout @@ -0,0 +1,5 @@ +li = (_t1::[Maybe Integer]) +Just 1 +li = Just 1 : (_t2::[Maybe Integer]) +*** Exception: Prelude.undefined +*** Exception: Prelude.undefined diff --git a/testsuite/tests/ghci.debugger/scripts/print016.script b/testsuite/tests/ghci.debugger/scripts/print016.script new file mode 100644 index 0000000000..1f5f153892 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print016.script @@ -0,0 +1,10 @@ +-- Type reconstruction with newtypes involved, more gruesome. + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test +let a = map MkT [1..2] +:p a +seq _t1 () +:p a +seq _t2 () +:p a
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print016.stdout b/testsuite/tests/ghci.debugger/scripts/print016.stdout new file mode 100644 index 0000000000..ec894b5162 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print016.stdout @@ -0,0 +1,5 @@ +a = (_t1::[MkT Integer]) +() +a = (_t2::MkT Integer) : (_t3::[MkT Integer]) +() +a = MkT 1 : (_t4::[MkT Integer]) diff --git a/testsuite/tests/ghci.debugger/scripts/print017.script b/testsuite/tests/ghci.debugger/scripts/print017.script new file mode 100644 index 0000000000..7a8371a2c1 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print017.script @@ -0,0 +1,12 @@ +-- More newtypes goodness + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test +let a = map (MkT2 . MkT) [1..2] +:p a +seq _t1 () +:p a +seq _t2 () +:p a +seq _t4 () +:p a diff --git a/testsuite/tests/ghci.debugger/scripts/print017.stdout b/testsuite/tests/ghci.debugger/scripts/print017.stdout new file mode 100644 index 0000000000..4d38a041c4 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print017.stdout @@ -0,0 +1,7 @@ +a = (_t1::[MkT2 Integer]) +() +a = (_t2::MkT2 Integer) : (_t3::[MkT2 Integer]) +() +a = MkT2 (MkT 1) : (_t4::[MkT2 Integer]) +() +a = MkT2 (MkT 1) : (_t5::MkT2 Integer) : (_t6::[MkT2 Integer]) diff --git a/testsuite/tests/ghci.debugger/scripts/print018.script b/testsuite/tests/ghci.debugger/scripts/print018.script new file mode 100644 index 0000000000..695dfca291 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print018.script @@ -0,0 +1,15 @@ +-- Test type reconstruction of Constants +-- Found by Bernie Pope + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test + +:break poly +poly Unary +:step +:p x +:t x +seq x () +:p x +:t x +x diff --git a/testsuite/tests/ghci.debugger/scripts/print018.stderr b/testsuite/tests/ghci.debugger/scripts/print018.stderr new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print018.stderr diff --git a/testsuite/tests/ghci.debugger/scripts/print018.stdout b/testsuite/tests/ghci.debugger/scripts/print018.stdout new file mode 100644 index 0000000000..26861305f3 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print018.stdout @@ -0,0 +1,12 @@ +Breakpoint 0 activated at ../Test.hs:40:1-17 +Stopped at ../Test.hs:40:1-17 +_result :: () = _ +Stopped at ../Test.hs:40:10-17 +_result :: () = _ +x :: a = _ +x = (_t1::a) +x :: a +() +x = Unary +x :: Unary +Unary diff --git a/testsuite/tests/ghci.debugger/scripts/print019.script b/testsuite/tests/ghci.debugger/scripts/print019.script new file mode 100644 index 0000000000..a7653720d6 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print019.script @@ -0,0 +1,11 @@ +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test +let a = O (id 'a') +let b = O (id "abc") +:p a +:p b +seq _t1 () +:p _t1 +:show bindings +_t2 +-- bogus!! _t2 has been resolved to type Char diff --git a/testsuite/tests/ghci.debugger/scripts/print019.stderr b/testsuite/tests/ghci.debugger/scripts/print019.stderr new file mode 100644 index 0000000000..dcf63dd07e --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print019.stderr @@ -0,0 +1,7 @@ + +<interactive>:1:1: + Ambiguous type variable `a1' in the constraint: + (Show a1) arising from a use of `print' + Cannot resolve unknown runtime types: a1 + Use :print or :force to determine these types + In a stmt of an interactive GHCi command: print it diff --git a/testsuite/tests/ghci.debugger/scripts/print019.stdout b/testsuite/tests/ghci.debugger/scripts/print019.stdout new file mode 100644 index 0000000000..9c48d11d8d --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print019.stdout @@ -0,0 +1,9 @@ +a = O (_t1::a) +b = O (_t2::a1) +() +_t1 = 'a' +_t1 :: Char = 'a' +_t2 :: a1 = _ +a :: Opaque = O 'a' +b :: Opaque = O _ +it :: () = () diff --git a/testsuite/tests/ghci.debugger/scripts/print020.script b/testsuite/tests/ghci.debugger/scripts/print020.script new file mode 100644 index 0000000000..e0101955cb --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print020.script @@ -0,0 +1,5 @@ +:set -fno-warn-overlapping-patterns +:l ../HappyTest.hs +:break lexer +main +:force _result diff --git a/testsuite/tests/ghci.debugger/scripts/print020.stdout b/testsuite/tests/ghci.debugger/scripts/print020.stdout new file mode 100644 index 0000000000..ee10c3a575 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print020.stdout @@ -0,0 +1,14 @@ +Breakpoint 0 activated at ../HappyTest.hs:(229,0)-(240,34) +Stopped at ../HappyTest.hs:(229,0)-(240,34) +_result :: [Token] = _ +*** Ignoring breakpoint +*** Ignoring breakpoint +*** Ignoring breakpoint +*** Ignoring breakpoint +*** Ignoring breakpoint +*** Ignoring breakpoint +*** Ignoring breakpoint +*** Ignoring breakpoint +*** Ignoring breakpoint +*** Ignoring breakpoint +_result = [TokenInt 1,TokenPlus,TokenInt 2,TokenPlus,TokenInt 3] diff --git a/testsuite/tests/ghci.debugger/scripts/print021.hs b/testsuite/tests/ghci.debugger/scripts/print021.hs new file mode 100644 index 0000000000..7c3962d803 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print021.hs @@ -0,0 +1,18 @@ +-- Test that we can recover unicode DataCons in :print +data T + = À -- latin + | Α -- greek + | Ⴀ -- georgian + | Ϣ -- coptic + | А -- cyrillic + | Ա -- armenian + deriving Show + +test = + [ À -- latin + , Α -- greek + , Ⴀ -- georgian + , Ϣ -- coptic + , А -- cyrillic + , Ա -- armenian + ] diff --git a/testsuite/tests/ghci.debugger/scripts/print021.script b/testsuite/tests/ghci.debugger/scripts/print021.script new file mode 100644 index 0000000000..58846cb64a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print021.script @@ -0,0 +1,3 @@ +:l print021.hs +:print test +:force test diff --git a/testsuite/tests/ghci.debugger/scripts/print021.stdout b/testsuite/tests/ghci.debugger/scripts/print021.stdout new file mode 100644 index 0000000000..4ebd63ee4a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print021.stdout @@ -0,0 +1,2 @@ +test = (_t1::[T]) +test = [À,Α,Ⴀ,Ϣ,А,Ա] diff --git a/testsuite/tests/ghci.debugger/scripts/print022.hs b/testsuite/tests/ghci.debugger/scripts/print022.hs new file mode 100644 index 0000000000..f83873e5ea --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print022.hs @@ -0,0 +1,11 @@ +{-# LANGUAGE MagicHash #-} +import GHC.Exts +data T = C Int# Word# Float# Double# Char# Int Float Double +test = C 1# 32## 1.2# 1.23## 'x'# 1 1.2 1.23 + +data TwoFields = TwoFields Char Int deriving Show + +data T2 = C2 {-# UNPACK #-} !Int {-#UNPACK#-} !Word {-# UNPACK #-} !TwoFields deriving Show +test2 = C2 1 32 (TwoFields 'a' 3) + +f x = x
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print022.script b/testsuite/tests/ghci.debugger/scripts/print022.script new file mode 100644 index 0000000000..cfed80380e --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print022.script @@ -0,0 +1,9 @@ +-- test for unboxed fields in datatypes +:l print022.hs +seq test () +:print test +:break f +f test2 +:step +:fo x +:t x
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print022.stdout b/testsuite/tests/ghci.debugger/scripts/print022.stdout new file mode 100644 index 0000000000..8aa539418a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print022.stdout @@ -0,0 +1,10 @@ +() +test = C 1 32 1.2 1.23 'x' 1 1.2 1.23 +Breakpoint 0 activated at print022.hs:11:1-7 +Stopped at print022.hs:11:1-7 +_result :: t = _ +Stopped at print022.hs:11:7 +_result :: t = _ +x :: t = _ +x = C2 1 (W# 32) (TwoFields 'a' 3) +x :: T2 diff --git a/testsuite/tests/ghci.debugger/scripts/print023.script b/testsuite/tests/ghci.debugger/scripts/print023.script new file mode 100644 index 0000000000..434b8df4af --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print023.script @@ -0,0 +1,8 @@ +-- Another type reconstruction with newtypes test + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test + +let a = MkT [1..2] +seq a () +:p a diff --git a/testsuite/tests/ghci.debugger/scripts/print023.stdout b/testsuite/tests/ghci.debugger/scripts/print023.stdout new file mode 100644 index 0000000000..ef8d3c18fa --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print023.stdout @@ -0,0 +1,2 @@ +() +a = MkT (1 : (_t1::[Integer])) diff --git a/testsuite/tests/ghci.debugger/scripts/print024.script b/testsuite/tests/ghci.debugger/scripts/print024.script new file mode 100644 index 0000000000..d617ecaaa0 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print024.script @@ -0,0 +1,10 @@ +-- stg_ap_rep exception after using :print with newtypes + +:set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../Test + +let a = MkT 1 +seq a () +:p a +a +-- Bang! "internal error: stg_ap_p_ret", triggered by the evaluation of a diff --git a/testsuite/tests/ghci.debugger/scripts/print024.stdout b/testsuite/tests/ghci.debugger/scripts/print024.stdout new file mode 100644 index 0000000000..021fa5c98a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print024.stdout @@ -0,0 +1,3 @@ +() +a = MkT 1 +MkT 1 diff --git a/testsuite/tests/ghci.debugger/scripts/print025.hs b/testsuite/tests/ghci.debugger/scripts/print025.hs new file mode 100644 index 0000000000..c2898bfa8e --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print025.hs @@ -0,0 +1,2 @@ +data T a s = T a deriving Show +f x = x diff --git a/testsuite/tests/ghci.debugger/scripts/print025.script b/testsuite/tests/ghci.debugger/scripts/print025.script new file mode 100644 index 0000000000..926890f4bc --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print025.script @@ -0,0 +1,8 @@ +:l print025 +let i = T (1::Int) +i +:break f +f i +-- RTTI happens implicitly when the bindings at f come into context +:step +:step
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print025.stdout b/testsuite/tests/ghci.debugger/scripts/print025.stdout new file mode 100644 index 0000000000..b2fcf65b1b --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print025.stdout @@ -0,0 +1,8 @@ +T 1 +Breakpoint 0 activated at print025.hs:2:1-7 +Stopped at print025.hs:2:1-7 +_result :: t = _ +Stopped at print025.hs:2:7 +_result :: T Int s = _ +x :: T Int s = T 1 +T 1 diff --git a/testsuite/tests/ghci.debugger/scripts/print026.script b/testsuite/tests/ghci.debugger/scripts/print026.script new file mode 100644 index 0000000000..de31983f1d --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print026.script @@ -0,0 +1,8 @@ +-- test -fno-debug-with-show + +:m +Data.Sequence +let l = fromList "abc" +l +:p l +:set -fprint-evld-with-show +:p l
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print026.stdout b/testsuite/tests/ghci.debugger/scripts/print026.stdout new file mode 100644 index 0000000000..decc3dfb6d --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print026.stdout @@ -0,0 +1,6 @@ +fromList "abc" +l = Data.Sequence.Seq (Data.Sequence.Deep + 3 (Data.Sequence.One (Data.Sequence.Elem 'a')) Data.Sequence.Empty + (Data.Sequence.Two + (Data.Sequence.Elem 'b') (Data.Sequence.Elem 'c'))) +l = fromList "abc" diff --git a/testsuite/tests/ghci.debugger/scripts/print027.script b/testsuite/tests/ghci.debugger/scripts/print027.script new file mode 100644 index 0000000000..b8c7238148 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print027.script @@ -0,0 +1,8 @@ +-- #1827 - Printing overloaded values + +:print (+) +:print print +:print log +:print head +:print tail +:print fst
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print027.stdout b/testsuite/tests/ghci.debugger/scripts/print027.stdout new file mode 100644 index 0000000000..38c46a9118 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print027.stdout @@ -0,0 +1,6 @@ ++ = (_t1::forall a. Num a => a -> a -> a) +print = (_t2::forall a. Show a => a -> IO ()) +log = (_t3::forall a. Floating a => a -> a) +head = (_t4::forall a. [a] -> a) +tail = (_t5::forall a. [a] -> [a]) +fst = (_t6::forall a b. (a, b) -> a) diff --git a/testsuite/tests/ghci.debugger/scripts/print028.script b/testsuite/tests/ghci.debugger/scripts/print028.script new file mode 100644 index 0000000000..0beb8bf725 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print028.script @@ -0,0 +1,8 @@ +:m + Data.IORef + +let l = map Just [1..10] +:p l +head l +r <- newIORef l +:p r +:sp r
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print028.stdout b/testsuite/tests/ghci.debugger/scripts/print028.stdout new file mode 100644 index 0000000000..93a80bc69d --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print028.stdout @@ -0,0 +1,6 @@ +l = (_t1::[Maybe Integer]) +Just 1 +r = GHC.IORef.IORef (GHC.STRef.STRef + (GHC.Prim.MutVar# (Just 1 : (_t2::[Maybe Integer])))) +r = GHC.IORef.IORef (GHC.STRef.STRef + (GHC.Prim.MutVar# (Just 1 : _))) diff --git a/testsuite/tests/ghci.debugger/scripts/print029.hs b/testsuite/tests/ghci.debugger/scripts/print029.hs new file mode 100644 index 0000000000..23eb61bb5b --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print029.hs @@ -0,0 +1,7 @@ +newtype MkT2 a = MkT2 [Maybe a] deriving Show + +f :: t Int -> t Int +f x = x + +f2 :: t Int -> t Int -> (t Int, t Int) +f2 x y = (x,y)
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print029.script b/testsuite/tests/ghci.debugger/scripts/print029.script new file mode 100644 index 0000000000..b320153d17 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print029.script @@ -0,0 +1,10 @@ +:l print029.hs +let a = MkT2 [Just (1::Int)] +a +:break f +f a +:step +-- Unsound! A false type is assigned to x +-- reconstructType decides to stop too soon because +-- its BFS has recovered a monomorphic type +:p x
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print029.stdout b/testsuite/tests/ghci.debugger/scripts/print029.stdout new file mode 100644 index 0000000000..366d1d480a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print029.stdout @@ -0,0 +1,8 @@ +MkT2 [Just 1] +Breakpoint 0 activated at print029.hs:4:1-7 +MkT2 Stopped at print029.hs:4:1-7 +_result :: t Int = _ +Stopped at print029.hs:4:7 +_result :: t Int = _ +x :: t Int = [Just 1] +x = [Just 1] diff --git a/testsuite/tests/ghci.debugger/scripts/print030.script b/testsuite/tests/ghci.debugger/scripts/print030.script new file mode 100644 index 0000000000..9296c90163 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print030.script @@ -0,0 +1,10 @@ +:l print029.hs +let a = MkT2 (map Just [(1::Int)]) +:break f +seq a () +f a +:step +-- Unsound! A false type is assigned to x +-- reconstructType is forced to stop too soon +-- because the elements of the list in x are not evaluated yet +:q diff --git a/testsuite/tests/ghci.debugger/scripts/print030.stdout b/testsuite/tests/ghci.debugger/scripts/print030.stdout new file mode 100644 index 0000000000..a67d0492d2 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print030.stdout @@ -0,0 +1,7 @@ +Breakpoint 0 activated at print029.hs:4:1-7 +() +MkT2 Stopped at print029.hs:4:1-7 +_result :: t Int = _ +Stopped at print029.hs:4:7 +_result :: t Int = _ +x :: t Int = _ : _ diff --git a/testsuite/tests/ghci.debugger/scripts/print031.hs b/testsuite/tests/ghci.debugger/scripts/print031.hs new file mode 100644 index 0000000000..c64c786b89 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print031.hs @@ -0,0 +1,7 @@ +module Print031 where + +newtype MkT2 a = MkT2 [Maybe a] deriving Show +data Phantom a = Phantom Int deriving Show + +f :: t (Phantom a) -> Bool +f x = const False x -- const just to bring x into scope
\ No newline at end of file diff --git a/testsuite/tests/ghci.debugger/scripts/print031.script b/testsuite/tests/ghci.debugger/scripts/print031.script new file mode 100644 index 0000000000..fb6308ffcf --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print031.script @@ -0,0 +1,10 @@ +:l print031.hs +let a = MkT2 [Just (Phantom 1)] +:break f +a +f a +:step +-- ghc crashes now when the type for x is recovered +-- and unifyRTTI fails to compute a substitution +:p x +:q diff --git a/testsuite/tests/ghci.debugger/scripts/print031.stdout b/testsuite/tests/ghci.debugger/scripts/print031.stdout new file mode 100644 index 0000000000..529b6987b5 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print031.stdout @@ -0,0 +1,8 @@ +Breakpoint 0 activated at print031.hs:7:1-19 +MkT2 [Just (Phantom 1)] +Stopped at print031.hs:7:1-19 +_result :: Bool = _ +Stopped at print031.hs:7:7-19 +_result :: Bool = _ +x :: t (Phantom a) = [Just (Phantom 1)] +x = [Just (Phantom 1)] diff --git a/testsuite/tests/ghci.debugger/scripts/print032.script b/testsuite/tests/ghci.debugger/scripts/print032.script new file mode 100644 index 0000000000..fa872af5d3 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print032.script @@ -0,0 +1,8 @@ +:l print029.hs +let a = MkT2 [Just (1::Int)] +a +let b = MkT2 (map Just [2::Int]) -- Want to obtain a thunk +:break f2 +f2 a b +:step + diff --git a/testsuite/tests/ghci.debugger/scripts/print032.stdout b/testsuite/tests/ghci.debugger/scripts/print032.stdout new file mode 100644 index 0000000000..5b84fd7c6d --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print032.stdout @@ -0,0 +1,8 @@ +MkT2 [Just 1] +Breakpoint 0 activated at print029.hs:7:0-13 +Stopped at print029.hs:7:0-13 +_result :: (t Int, t Int) = _ +Stopped at print029.hs:7:9-13 +_result :: (t Int, t Int) = _ +x :: [Maybe Int] = [Just 1] +y :: [Maybe Int] = _ diff --git a/testsuite/tests/ghci.debugger/scripts/print033.script b/testsuite/tests/ghci.debugger/scripts/print033.script new file mode 100644 index 0000000000..fed81fe3de --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print033.script @@ -0,0 +1,5 @@ +-- Resolving an impredicative type +:set -XImpredicativeTypes -fno-warn-deprecated-flags +:m + Control.Monad.ST +let u = undefined :: ST s (forall s'. ST s' a) +:p u diff --git a/testsuite/tests/ghci.debugger/scripts/print033.stdout b/testsuite/tests/ghci.debugger/scripts/print033.stdout new file mode 100644 index 0000000000..e60df0905a --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print033.stdout @@ -0,0 +1 @@ +u = (_t1::forall s a. ST s (forall s'. ST s' a)) diff --git a/testsuite/tests/ghci.debugger/scripts/print034.script b/testsuite/tests/ghci.debugger/scripts/print034.script new file mode 100644 index 0000000000..95bcfde0a6 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print034.script @@ -0,0 +1,11 @@ +-- More GADT goodness + +:set -XGADTs -XRank2Types -XDeriveDataTypeable -XGeneralizedNewtypeDeriving +:l ../GADT +:a ../Test +:m +Main +let o = O (One False Main.Nil) +:p o +seq _t1 () +:t _t1 +:p o diff --git a/testsuite/tests/ghci.debugger/scripts/print034.stdout b/testsuite/tests/ghci.debugger/scripts/print034.stdout new file mode 100644 index 0000000000..5d83c8c9b7 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/print034.stdout @@ -0,0 +1,4 @@ +o = O (_t1::a) +() +_t1 :: SafeList Bool NonEmpty +o = O (One False (_t4::SafeList Bool Empty)) diff --git a/testsuite/tests/ghci.debugger/scripts/result001.hs b/testsuite/tests/ghci.debugger/scripts/result001.hs new file mode 100644 index 0000000000..a32e2c10fa --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/result001.hs @@ -0,0 +1,3 @@ +f xs = case map id xs of + [] -> True + x:xs -> False diff --git a/testsuite/tests/ghci.debugger/scripts/result001.script b/testsuite/tests/ghci.debugger/scripts/result001.script new file mode 100644 index 0000000000..c5714fe781 --- /dev/null +++ b/testsuite/tests/ghci.debugger/scripts/result001.script @@ -0,0 +1,5 @@ +-- demonstrates that _result has the wrong type sometimes +:l result001 +:b 1 20 +f "abc" +-- _result :: Bool is wrong, should be [a] |