[commit: ghc] master: Hide derived OccNames from user (d2ea7f9)

git at git.haskell.org git at git.haskell.org
Tue Jan 19 08:00:30 UTC 2016


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/d2ea7f94cb21662857cd50c95ff41943e5911a9b/ghc

>---------------------------------------------------------------

commit d2ea7f94cb21662857cd50c95ff41943e5911a9b
Author: Ben Gamari <bgamari.foss at gmail.com>
Date:   Mon Jan 18 23:12:51 2016 +0100

    Hide derived OccNames from user
    
    This hides derived OccNames from the Names returned from
    runDeclsWithLocation and clarifies the documentation. This is done to
    ensure that these names (originating from, e.g., derived Generic
    instances and type representation bindings) don't show up in ghci output
    when run with `:set +t`. This fixes #11051.
    
    Test Plan: Validate with included tests
    
    Reviewers: austin
    
    Reviewed By: austin
    
    Subscribers: thomie, hvr
    
    Differential Revision: https://phabricator.haskell.org/D1794
    
    GHC Trac Issues: #11051


>---------------------------------------------------------------

d2ea7f94cb21662857cd50c95ff41943e5911a9b
 compiler/main/InteractiveEval.hs            | 8 +++++---
 testsuite/tests/ghci/scripts/T11051a.script | 3 +++
 testsuite/tests/ghci/scripts/T11051a.stdout | 1 +
 testsuite/tests/ghci/scripts/T11051b.script | 5 +++++
 testsuite/tests/ghci/scripts/T11051b.stdout | 1 +
 testsuite/tests/ghci/scripts/all.T          | 2 ++
 6 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/compiler/main/InteractiveEval.hs b/compiler/main/InteractiveEval.hs
index 47d282e..6356928 100644
--- a/compiler/main/InteractiveEval.hs
+++ b/compiler/main/InteractiveEval.hs
@@ -235,8 +235,9 @@ runStmtWithLocation source linenumber expr step = do
 runDecls :: GhcMonad m => String -> m [Name]
 runDecls = runDeclsWithLocation "<interactive>" 1
 
-runDeclsWithLocation
- :: GhcMonad m => String -> Int -> String -> m [Name]
+-- | Run some declarations and return any user-visible names that were brought
+-- into scope.
+runDeclsWithLocation :: GhcMonad m => String -> Int -> String -> m [Name]
 runDeclsWithLocation source linenumber expr =
   do
     hsc_env <- getSession
@@ -246,7 +247,8 @@ runDeclsWithLocation source linenumber expr =
     hsc_env <- getSession
     hsc_env' <- liftIO $ rttiEnvironment hsc_env
     modifySession (\_ -> hsc_env')
-    return (map getName tyThings)
+    return $ filter (not . isDerivedOccName . nameOccName)
+           $ map getName tyThings
 
 
 withVirtualCWD :: GhcMonad m => m a -> m a
diff --git a/testsuite/tests/ghci/scripts/T11051a.script b/testsuite/tests/ghci/scripts/T11051a.script
new file mode 100644
index 0000000..96fadeb
--- /dev/null
+++ b/testsuite/tests/ghci/scripts/T11051a.script
@@ -0,0 +1,3 @@
+-- Ensure that type representation bindings aren't visible to user
+:set +t
+data Hi
diff --git a/testsuite/tests/ghci/scripts/T11051a.stdout b/testsuite/tests/ghci/scripts/T11051a.stdout
new file mode 100644
index 0000000..44fb93ca
--- /dev/null
+++ b/testsuite/tests/ghci/scripts/T11051a.stdout
@@ -0,0 +1 @@
+data Hi
diff --git a/testsuite/tests/ghci/scripts/T11051b.script b/testsuite/tests/ghci/scripts/T11051b.script
new file mode 100644
index 0000000..dd42074
--- /dev/null
+++ b/testsuite/tests/ghci/scripts/T11051b.script
@@ -0,0 +1,5 @@
+-- ensure that derived Generics types aren't visible to user
+:set +t
+:set -XDeriveGeneric
+import GHC.Generics
+data Hello = Hello Int deriving (Eq, Generic)
diff --git a/testsuite/tests/ghci/scripts/T11051b.stdout b/testsuite/tests/ghci/scripts/T11051b.stdout
new file mode 100644
index 0000000..7eb3f08
--- /dev/null
+++ b/testsuite/tests/ghci/scripts/T11051b.stdout
@@ -0,0 +1 @@
+data Hello = Hello Int
diff --git a/testsuite/tests/ghci/scripts/all.T b/testsuite/tests/ghci/scripts/all.T
index c1bda85..7a6225c 100755
--- a/testsuite/tests/ghci/scripts/all.T
+++ b/testsuite/tests/ghci/scripts/all.T
@@ -237,3 +237,5 @@ test('T11252', normal, ghci_script, ['T11252.script'])
 
 test('T10576a', expect_broken(10576), ghci_script, ['T10576a.script'])
 test('T10576b', expect_broken(10576), ghci_script, ['T10576b.script'])
+test('T11051a', normal, ghci_script, ['T11051a.script'])
+test('T11051b', normal, ghci_script, ['T11051b.script'])



More information about the ghc-commits mailing list