[GHC] #7351: showRichTokenStream has an off-by one error on starting col

GHC cvs-ghc at haskell.org
Wed Oct 24 14:14:32 CEST 2012


#7351: showRichTokenStream has an off-by one error on starting col
---------------------------------+------------------------------------------
    Reporter:  alanz             |       Owner:                  
        Type:  bug               |      Status:  new             
    Priority:  normal            |   Milestone:                  
   Component:  GHC API           |     Version:  7.6.1           
    Keywords:                    |          Os:  Unknown/Multiple
Architecture:  Unknown/Multiple  |     Failure:  None/Unknown    
  Difficulty:  Unknown           |    Testcase:                  
   Blockedby:                    |    Blocking:                  
     Related:                    |  
---------------------------------+------------------------------------------
Changes (by simonmar):

  * difficulty:  => Unknown


Old description:

> When using showRichTokenStream to re-create a source file, all lines
> after the first one start one column from the left.
>
> The code for advancing to a new line has an off-by one bug where it
> assumes zero based columns.
>
> I have marked what I assume to be a fix in the pasted code below.
>
> -------
> showRichTokenStream ts = go startLoc ts ""
>     where sourceFile = getFile $ map (getLoc . fst) ts
>           getFile [] = panic "showRichTokenStream: No source file found"
>           getFile (UnhelpfulSpan _ : xs) = getFile xs
>           getFile (RealSrcSpan s : _) = srcSpanFile s
>           startLoc = mkRealSrcLoc sourceFile 1 1
>           go _ [] = id
>           go loc ((L span _, str):ts)
>               = case span of
>                 UnhelpfulSpan _ -> go loc ts
>                 RealSrcSpan s
>                  | locLine == tokLine -> ((replicate (tokCol - locCol) '
> ') ++)
>                                        . (str ++)
>                                        . go tokEnd ts
>                  | otherwise -> ((replicate (tokLine - locLine) '\n') ++)
>                               . ((replicate (tokCol - 1) ' ') ++) -- AZ:
> updated line
>                               . (str ++)
>                               . go tokEnd ts
>                   where (locLine, locCol) = (srcLocLine loc, srcLocCol
> loc)
>                         (tokLine, tokCol) = (srcSpanStartLine s,
> srcSpanStartCol s)
>                         tokEnd = realSrcSpanEnd s
> ----------

New description:

 When using showRichTokenStream to re-create a source file, all lines after
 the first one start one column from the left.

 The code for advancing to a new line has an off-by one bug where it
 assumes zero based columns.

 I have marked what I assume to be a fix in the pasted code below.

 {{{
 showRichTokenStream ts = go startLoc ts ""
     where sourceFile = getFile $ map (getLoc . fst) ts
           getFile [] = panic "showRichTokenStream: No source file found"
           getFile (UnhelpfulSpan _ : xs) = getFile xs
           getFile (RealSrcSpan s : _) = srcSpanFile s
           startLoc = mkRealSrcLoc sourceFile 1 1
           go _ [] = id
           go loc ((L span _, str):ts)
               = case span of
                 UnhelpfulSpan _ -> go loc ts
                 RealSrcSpan s
                  | locLine == tokLine -> ((replicate (tokCol - locCol) '
 ') ++)
                                        . (str ++)
                                        . go tokEnd ts
                  | otherwise -> ((replicate (tokLine - locLine) '\n') ++)
                               . ((replicate (tokCol - 1) ' ') ++) -- AZ:
 updated line
                               . (str ++)
                               . go tokEnd ts
                   where (locLine, locCol) = (srcLocLine loc, srcLocCol
 loc)
                         (tokLine, tokCol) = (srcSpanStartLine s,
 srcSpanStartCol s)
                         tokEnd = realSrcSpanEnd s
 }}}

--

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



More information about the Glasgow-haskell-bugs mailing list