PROPOSAL Narrow Hexadecimal and Binary Integer Literals. (original) (raw)

Bruce Chapman brucechapman at paradise.net.nz
Wed Mar 25 01:57:24 PDT 2009


Title Auto Typing Hexadecimal and Binary Integer Literals.

latest html version at http://docs.google.com/Doc?id=dcvp3mkv_125ww5tct

AUTHOR(S): Bruce Chapman

OVERVIEW

FEATURE SUMMARY: Introduce two new forms of integer literals, for hexadecimal and binary that are typed as the minimum width integer that can accomodate the value.

MAJOR ADVANTAGE:

Allows for binary literals and allows for byte size and short size hex literals with a concise syntax.

byte[] stuff = { 0x00, 0x7F, (byte)0x80,  (byte)0xFF};

can be recoded as

byte[] ufum7 = { 0h00, 0h7F, 0h80, 0hFF };

MAJOR DISADVANTAGE:

Introduces a second form of hexadecimal literal with overlapping functionality.

ALTERNATIVES:

Introduce a new new integer type literal suffix for byte and short, and a new syntax for binary integers.

EXAMPLES SIMPLE EXAMPLE:

byte[] utf8bom7 = { 0hEF, 0hBB, 0b10111111 };

ADVANCED EXAMPLE:

byte[] buffer = ...;

if(buffer[i] == 0hBB) {

   ...
}

DETAILS SPECIFICATION:

JSL Section 3.10.1 needs considerable rewrite

An integer literal may be expressed in decimal (base 10), hexadecimal (base 16)(two ways), or octal (base 8), or binary (base 2):

IntegerLiteral:
 FixedIntegerLiteral
 NarrowIntegerLiteral

FixedIntegerLiteral:
 DecimalIntegerLiteral
 HexIntegerLiteral
 OctalIntegerLiteral

NarrowIntegerLiteral:
        NarrowHexIntegerLiteral
        NarrowBinaryIntegerLiteral

DecimalIntegerLiteral:
 DecimalNumeral IntegerTypeSuffixopt

HexIntegerLiteral:
 HexNumeral IntegerTypeSuffixopt

OctalIntegerLiteral:
 OctalNumeral IntegerTypeSuffixopt

IntegerTypeSuffix: one of
 l L

NarrowHexIntegerLiteral:
        0 h HexDigits
        0 H HexDigits

NarrowBinaryIntegerLiteral:
        0 b BinaryDigits
        0 B BinaryDigits

BinaryDigits:
        BinaryDigit
        BinaryDigit BinaryDigits

BinaryDigit: one of
        0 1

An fixed integer literal is of type long if it is suffixed with an ASCII letter L or l (ell); otherwise it is of type int (ยง4.2.1). The suffix L is preferred, because the letter l (ell) is often hard to distinguish from the digit 1 (one).

A narrow integer literal has the smallest integer type able to accomodate the number of HexDigits or BinaryDigits specified, including leading zeros. For 1 or 2 HexDigits and for 1 through 8 binary digits the type is byte. For 3 or 4 Hex digits or from 9 through 16 binary digits the type is short. For 5 through 8 hex digits and for 17 through 32 binary digits the type is integer and for 9 through 16 hex digits and 33 through 64 binary digits the type is long. A compile time error occurs if more than 16 hex digits or 64 binary digits are specified. Narrow integer literals may not use an Integer type suffix, their type is determined by the number of digits.

A decimal numeral is either the single ASCII character 0, representing the integer zero, or consists of an ASCII digit from 1 to 9, optionally followed by one or more ASCII digits from 0 to 9, representing a positive integer:

DecimalNumeral:
 0
 NonZeroDigit Digitsopt

Digits:
 Digit
 Digits Digit

Digit:
 0
 NonZeroDigit

NonZeroDigit: one of
 1 2 3 4 5 6 7 8 9

A hexadecimal numeral consists of the leading ASCII characters 0x or 0X followed by one or more ASCII hexadecimal digits and can represent a positive, zero, or negative integer. Hexadecimal digits with values 10 through 15 are represented by the ASCII letters a through f or A through F, respectively; each letter used as a hexadecimal digit may be uppercase or lowercase.

HexNumeral:
 0 x HexDigits
 0 X HexDigits

HexDigits:
 HexDigit
 HexDigit HexDigits

COMPILATION:

Two new forms of Integer literal need to be processed in scanner, and the sizing algorithm applied.

TESTING:

Exercise and check types and values of various narrow integer literals.

LIBRARY SUPPORT:

No library support required.

REFLECTIVE APIS:

None

OTHER CHANGES:

None - but it might be nice if the javadoc tool remembered the number base of Integer constants for constant fields and displayed them in that same base in the Constant Field Values list.

MIGRATION:

COMPATIBILITY BREAKING CHANGES:

None

EXISTING PROGRAMS:

None

REFERENCES EXISTING BUGS:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5025288

http://forums.sun.com/thread.jspa?forumID=316&messageID=2239381&threadID=480508

URL FOR PROTOTYPE (optional): None



More information about the coin-dev mailing list