mirror of
https://github.com/cc65/cc65.git
synced 2025-01-10 19:29:45 +00:00
Added a new feature "underline_in_numbers" requested by thefox. Using
underlines it is possible to group the digits for easier reading. git-svn-id: svn://svn.cc65.org/cc65/trunk@5963 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
ee5216f69b
commit
9fce84c722
@ -2719,6 +2719,17 @@ Here's a list of all control commands and a description, what they do:
|
||||
same name. This does also make it possible to introduce hard to find errors
|
||||
in your code, so be careful!
|
||||
|
||||
<tag><tt>underline_in_numbers</tt><label id="underline_in_numbers"></tag>
|
||||
|
||||
Allow underlines within numeric constants. These may be used for grouping
|
||||
the digits of numbers for easier reading.
|
||||
Example:
|
||||
<tscreen><verb>
|
||||
.feature underline_in_numbers
|
||||
.word %1100001110100101
|
||||
.word %1100_0011_1010_0101 ; Identical but easier to read
|
||||
</verb></tscreen>
|
||||
|
||||
</descrip>
|
||||
|
||||
It is also possible to specify features on the command line using the
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 2000-2012, Ullrich von Bassewitz */
|
||||
/* (C) 2000-2013, Ullrich von Bassewitz */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
@ -62,6 +62,7 @@ static const char* FeatureKeys[FEAT_COUNT] = {
|
||||
"ubiquitous_idents",
|
||||
"c_comments",
|
||||
"force_range",
|
||||
"underline_in_numbers",
|
||||
};
|
||||
|
||||
|
||||
@ -117,6 +118,7 @@ feature_t SetFeature (const StrBuf* Key)
|
||||
case FEAT_UBIQUITOUS_IDENTS: UbiquitousIdents = 1; break;
|
||||
case FEAT_C_COMMENTS: CComments = 1; break;
|
||||
case FEAT_FORCE_RANGE: ForceRange = 1; break;
|
||||
case FEAT_UNDERLINE_IN_NUMBERS: UnderlineInNumbers= 1; break;
|
||||
default: /* Keep gcc silent */ break;
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 2000-2012, Ullrich von Bassewitz */
|
||||
/* (C) 2000-2013, Ullrich von Bassewitz */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
@ -64,6 +64,7 @@ typedef enum {
|
||||
FEAT_UBIQUITOUS_IDENTS,
|
||||
FEAT_C_COMMENTS,
|
||||
FEAT_FORCE_RANGE,
|
||||
FEAT_UNDERLINE_IN_NUMBERS,
|
||||
|
||||
/* Special value: Number of features available */
|
||||
FEAT_COUNT
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 1998-2012, Ullrich von Bassewitz */
|
||||
/* (C) 1998-2013, Ullrich von Bassewitz */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
@ -81,7 +81,8 @@ unsigned char UbiquitousIdents = 0; /* Allow ubiquitous identifiers */
|
||||
unsigned char OrgPerSeg = 0; /* Make .org local to current seg */
|
||||
unsigned char CComments = 0; /* Allow C like comments */
|
||||
unsigned char ForceRange = 0; /* Force values into expected range */
|
||||
|
||||
unsigned char UnderlineInNumbers = 0; /* Allow underlines in numbers */
|
||||
|
||||
/* Misc stuff */
|
||||
const char Copyright[] = "(C) Copyright 1998-2011 Ullrich von Bassewitz";
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 1998-2012, Ullrich von Bassewitz */
|
||||
/* (C) 1998-2013, Ullrich von Bassewitz */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
@ -83,6 +83,7 @@ extern unsigned char UbiquitousIdents; /* Allow ubiquitous identifiers */
|
||||
extern unsigned char OrgPerSeg; /* Make .org local to current seg */
|
||||
extern unsigned char CComments; /* Allow C like comments */
|
||||
extern unsigned char ForceRange; /* Force values into expected range */
|
||||
extern unsigned char UnderlineInNumbers; /* Allow underlines in numbers */
|
||||
|
||||
/* Misc stuff */
|
||||
extern const char Copyright[]; /* Copyright string */
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 1998-2012, Ullrich von Bassewitz */
|
||||
/* (C) 1998-2013, Ullrich von Bassewitz */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
@ -862,7 +862,7 @@ Again:
|
||||
if (!IsXDigit (C)) {
|
||||
if (DollarIsPC) {
|
||||
CurTok.Tok = TOK_PC;
|
||||
return;
|
||||
return;
|
||||
} else {
|
||||
Error ("Hexadecimal digit expected");
|
||||
}
|
||||
@ -870,14 +870,26 @@ Again:
|
||||
|
||||
/* Read the number */
|
||||
CurTok.IVal = 0;
|
||||
while (IsXDigit (C)) {
|
||||
if (CurTok.IVal & 0xF0000000) {
|
||||
Error ("Overflow in hexadecimal number");
|
||||
CurTok.IVal = 0;
|
||||
}
|
||||
CurTok.IVal = (CurTok.IVal << 4) + DigitVal (C);
|
||||
NextChar ();
|
||||
}
|
||||
while (1) {
|
||||
if (UnderlineInNumbers && C == '_') {
|
||||
while (C == '_') {
|
||||
NextChar ();
|
||||
}
|
||||
if (!IsXDigit (C)) {
|
||||
Error ("Number may not end with underline");
|
||||
}
|
||||
}
|
||||
if (IsXDigit (C)) {
|
||||
if (CurTok.IVal & 0xF0000000) {
|
||||
Error ("Overflow in hexadecimal number");
|
||||
CurTok.IVal = 0;
|
||||
}
|
||||
CurTok.IVal = (CurTok.IVal << 4) + DigitVal (C);
|
||||
NextChar ();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* This is an integer constant */
|
||||
CurTok.Tok = TOK_INTCON;
|
||||
@ -895,14 +907,26 @@ Again:
|
||||
|
||||
/* Read the number */
|
||||
CurTok.IVal = 0;
|
||||
while (IsBDigit (C)) {
|
||||
if (CurTok.IVal & 0x80000000) {
|
||||
Error ("Overflow in binary number");
|
||||
CurTok.IVal = 0;
|
||||
}
|
||||
CurTok.IVal = (CurTok.IVal << 1) + DigitVal (C);
|
||||
NextChar ();
|
||||
}
|
||||
while (1) {
|
||||
if (UnderlineInNumbers && C == '_') {
|
||||
while (C == '_') {
|
||||
NextChar ();
|
||||
}
|
||||
if (!IsBDigit (C)) {
|
||||
Error ("Number may not end with underline");
|
||||
}
|
||||
}
|
||||
if (IsBDigit (C)) {
|
||||
if (CurTok.IVal & 0x80000000) {
|
||||
Error ("Overflow in binary number");
|
||||
CurTok.IVal = 0;
|
||||
}
|
||||
CurTok.IVal = (CurTok.IVal << 1) + DigitVal (C);
|
||||
NextChar ();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* This is an integer constant */
|
||||
CurTok.Tok = TOK_INTCON;
|
||||
@ -926,17 +950,27 @@ Again:
|
||||
|
||||
/* Read the number into Buf counting the digits */
|
||||
Digits = 0;
|
||||
while (IsXDigit (C)) {
|
||||
|
||||
/* Buf is big enough to allow any decimal and hex number to
|
||||
* overflow, so ignore excess digits here, they will be detected
|
||||
* when we convert the value.
|
||||
*/
|
||||
if (Digits < sizeof (Buf)) {
|
||||
Buf[Digits++] = C;
|
||||
while (1) {
|
||||
if (UnderlineInNumbers && C == '_') {
|
||||
while (C == '_') {
|
||||
NextChar ();
|
||||
}
|
||||
if (!IsXDigit (C)) {
|
||||
Error ("Number may not end with underline");
|
||||
}
|
||||
}
|
||||
if (IsXDigit (C)) {
|
||||
/* Buf is big enough to allow any decimal and hex number to
|
||||
* overflow, so ignore excess digits here, they will be detected
|
||||
* when we convert the value.
|
||||
*/
|
||||
if (Digits < sizeof (Buf)) {
|
||||
Buf[Digits++] = C;
|
||||
}
|
||||
NextChar ();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
NextChar ();
|
||||
}
|
||||
|
||||
/* Allow zilog/intel style hex numbers with a 'h' suffix */
|
||||
|
Loading…
x
Reference in New Issue
Block a user