[GHC] #9573: Add warning for invalid digits in integer literals
GHC
ghc-devs at haskell.org
Fri Sep 12 11:36:34 UTC 2014
#9573: Add warning for invalid digits in integer literals
-------------------------------------+-------------------------------------
Reporter: vlopez | Owner: vlopez
Type: bug | Status: new
Priority: normal | Milestone: 7.10.1
Component: Compiler | Version: 7.9
(Parser) | Keywords: parsing, integer,
Resolution: | octal, binary, hexadecimal,
Operating System: | Architecture: Unknown/Multiple
Unknown/Multiple | Difficulty: Difficult (2-5
Type of failure: | days)
None/Unknown | Blocked By:
Test Case: | Related Tickets:
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Changes (by vlopez):
* owner: => vlopez
Old description:
> In its latest version, GHC can parse binary (with `-XBinaryLiterals`),
> octal and hexadecimal literals:
>
> {{{#!hs
> > 0b101010
> > 0o52
> > 0x2A
> }}}
>
> Currently, the parser/lexer reads digits from the input as long as they
> are valid for the specified radix. All subsequent digits are interpreted
> as a new, separate token.
>
> If the user uses a digit which isn't valid for the radix, it may be
> reported with a non-obvious error message, or interpreted in surprising
> ways:
>
> {{{#!hs
> > :t 0o567
> 0o576 :: Num a => a
> > :t 0o5678
> 0o5678 :: (Num (a -> t), Num a) => t
> Prelude> :t 0x1bfah
>
> <interactive>:1:7: Not in scope: ‘h’
> > replicate 0o5678
> [8,8,8,8,8,8,8...
> }}}
>
> We suggest warning the user when a literal of this sort is written, while
> respecting any other error messages and the original behaviour.
>
> More specifically, the parser or lexer would give a warning if a token
> starting with an alphanumeric character is found immediately after a
> numeric literal, without a blank between them.
New description:
In its latest version, GHC can parse binary (with `-XBinaryLiterals`),
octal and hexadecimal literals:
{{{#!hs
> 0b101010
> 0o52
> 0x2A
}}}
Currently, the parser/lexer reads digits from the input as long as they
are valid for the specified radix. All subsequent digits are interpreted
as a new, separate token.
If the user uses a digit which isn't valid for the radix, it may be
reported with a non-obvious error message, or interpreted in surprising
ways:
{{{#!hs
> :t 0o567
0o576 :: Num a => a
> :t 0o5678
0o5678 :: (Num (a -> t), Num a) => t
> :t 0x1bfah
<interactive>:1:7: Not in scope: ‘h’
> replicate 0o5678
[8,8,8,8,8,8,8...
}}}
We suggest warning the user when a literal of this sort is written, while
respecting any other error messages and the original behaviour.
More specifically, the parser or lexer would give a warning if a token
starting with an alphanumeric character is found immediately after a
numeric literal, without a blank between them.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9573#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list