#1363: Sourcing multi-line scripts in GHCi: track line numbers, and bail out 
after
first error
---------------------------------+------------------------------------------
    Reporter:  Frederik          |        Owner:  vivian                    
        Type:  feature request   |       Status:  patch                     
    Priority:  normal            |    Milestone:  _|_                       
   Component:  GHCi              |      Version:  6.6                       
    Keywords:  multiline script  |     Testcase:                            
   Blockedby:                    |   Difficulty:  Moderate (less than a day)
          Os:  Unknown/Multiple  |     Blocking:                            
Architecture:  Unknown/Multiple  |      Failure:  None/Unknown              
---------------------------------+------------------------------------------

Comment(by igloo):

 Sorry for the delay in looking at this patch. I just had a look at it (or
 rather, the one in http://www.haskell.org/pipermail/cvs-
 ghc/2011-January/059156.html) and I've got a few comments; first a few
 small things, then a couple of larger issues.

 It would be good to have a test or two for `:script`, and also for the
 filenames and line numbers in errors.

 `sourceConfigFile` ought to set `progname` too.

 Rather than using `all isDigit first` and `read first`, I think it'd be a
 little nicer to use `reads`.

 This looks like a typo (missing ">"):
 {{{
 +hscStmt hsc_env stmt = hscStmtWithLocation hsc_env stmt "<interactive" 1
 }}}
 but I couldn't work out when that string is printed. The fast testsuite
 doesn't seem to break if I change it, so perhaps there is another codepath
 we should be testing?

 Rather than the
 {{{
 fileLoop script >>= incrementLines
 }}}
 idiom I think it would be better to make `fileLoop` always increment the
 line number.

 Code like this worries me:
 {{{
 +      st <- lift $ getGHCiState
 +      let prog = progname st
 +          line = line_number st
 +      lift $ setGHCiState st{progname=filename,line_number=0}
 +      scriptLoop script
 +      liftIO $ hClose script
 +      lift $ setGHCiState st{progname=prog,line_number=line}
 }}}
 What if `scriptLoop` alters other components of the state? Even if that
 can't happen now, I still think it would be better to to get the state
 again at the end.

 I don't think the right line numbers are printed for errors inside
 multiline commands. In fact, if everything was working nicely then I think
 this would set the initial line_number to 0:
 {{{
 +      lift $ setGHCiState st{progname=filename,line_number=0}
 }}}

 I tried to fix this all up, but it was a deeper hole than I expected; I
 wonder if the code might benefit from a little refactoring. It might also
 be better to split the patch into two: the first bit just adding the
 `:script` command, and the second improving the error message locations.

 Are you interested in working more on this?

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1363#comment:17>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to