Home | History | Annotate | Line # | Download | only in indent
lsym_word.c revision 1.6
      1  1.6  rillig /* $NetBSD: lsym_word.c,v 1.6 2022/04/24 10:36:37 rillig Exp $ */
      2  1.1  rillig 
      3  1.1  rillig /*
      4  1.1  rillig  * Tests for the token lsym_word, which represents a constant, a string
      5  1.1  rillig  * literal or an identifier.
      6  1.1  rillig  *
      7  1.1  rillig  * See also:
      8  1.1  rillig  *	lsym_funcname.c		for an identifier followed by '('
      9  1.1  rillig  */
     10  1.1  rillig 
     11  1.1  rillig // TODO: Is '"string"(' syntactically valid in any context?
     12  1.1  rillig // TODO: Is '123(' syntactically valid in any context?
     13  1.1  rillig // TODO: Would the output of the above depend on -pcs/-npcs?
     14  1.6  rillig // TODO: Add more systematic tests.
     15  1.6  rillig // TODO: Completely cover each state transition in lex_number_state.
     16  1.1  rillig 
     17  1.5  rillig //indent input
     18  1.1  rillig // TODO: add input
     19  1.5  rillig //indent end
     20  1.1  rillig 
     21  1.5  rillig //indent run-equals-input
     22  1.2  rillig 
     23  1.2  rillig 
     24  1.2  rillig /*
     25  1.2  rillig  * Since 2019-04-04 and before NetBSD lexi.c 1.149 from 2021-11-20, the first
     26  1.2  rillig  * character after a backslash continuation was always considered part of a
     27  1.2  rillig  * word, no matter whether it was a word character or not.
     28  1.2  rillig  */
     29  1.5  rillig //indent input
     30  1.2  rillig int var\
     31  1.2  rillig +name = 4;
     32  1.5  rillig //indent end
     33  1.2  rillig 
     34  1.5  rillig //indent run
     35  1.3  rillig int		var + name = 4;
     36  1.5  rillig //indent end
     37  1.6  rillig 
     38  1.6  rillig 
     39  1.6  rillig //indent input
     40  1.6  rillig wchar_t wide_string[] = L"wide string";
     41  1.6  rillig //indent end
     42  1.6  rillig 
     43  1.6  rillig /*
     44  1.6  rillig  * Regardless of the line length, the 'L' must never be separated from the
     45  1.6  rillig  * string literal.  Before lexi.c 1.167 from 2021-11-28, the 'L' was a
     46  1.6  rillig  * separate token, which could have resulted in accidental spacing between the
     47  1.6  rillig  * 'L' and the following "".
     48  1.6  rillig  */
     49  1.6  rillig //indent run-equals-input -di0
     50  1.6  rillig 
     51  1.6  rillig //indent run-equals-input -di0 -l25
     52  1.6  rillig 
     53  1.6  rillig //indent run-equals-input -di0 -l1
     54  1.6  rillig 
     55  1.6  rillig 
     56  1.6  rillig //indent input
     57  1.6  rillig wchar_t wide_char[] = L'w';
     58  1.6  rillig //indent end
     59  1.6  rillig 
     60  1.6  rillig //indent run-equals-input -di0
     61  1.6  rillig 
     62  1.6  rillig 
     63  1.6  rillig /* Binary number literals, a GCC extension that was added in C11. */
     64  1.6  rillig //indent input
     65  1.6  rillig #define b00101010 -1
     66  1.6  rillig void t(void) {
     67  1.6  rillig 	unsigned a[] = {0b00101010, 0x00005678, 02, 17U};
     68  1.6  rillig 	float x[] = {.7f, 0.7f};
     69  1.6  rillig 	unsigned long ul[] = {0b00001111UL, 0x01010101UL, 02UL, 17UL};
     70  1.6  rillig 
     71  1.6  rillig 	if (0 b00101010)
     72  1.6  rillig 		return;
     73  1.6  rillig 	/* $ '0r' is not a number base prefix, so the tokens are split. */
     74  1.6  rillig 	if (0r12345)
     75  1.6  rillig 		return;
     76  1.6  rillig }
     77  1.6  rillig //indent end
     78  1.6  rillig 
     79  1.6  rillig //indent run
     80  1.6  rillig #define b00101010 -1
     81  1.6  rillig void
     82  1.6  rillig t(void)
     83  1.6  rillig {
     84  1.6  rillig 	unsigned	a[] = {0b00101010, 0x00005678, 02, 17U};
     85  1.6  rillig 	float		x[] = {.7f, 0.7f};
     86  1.6  rillig 	unsigned long	ul[] = {0b00001111UL, 0x01010101UL, 02UL, 17UL};
     87  1.6  rillig 
     88  1.6  rillig 	if (0 b00101010)
     89  1.6  rillig 		return;
     90  1.6  rillig 	if (0 r12345)
     91  1.6  rillig 		return;
     92  1.6  rillig }
     93  1.6  rillig //indent end
     94  1.6  rillig 
     95  1.6  rillig 
     96  1.6  rillig /* Floating point numbers. */
     97  1.6  rillig //indent input
     98  1.6  rillig void t(void) {
     99  1.6  rillig 	unsigned long x = 314UL;
    100  1.6  rillig 	double y[] = {0x1P+9F, 0.3, .1, 1.2f, 0xa.p01f, 3.14f, 2.L};
    101  1.6  rillig 	int z = 0b0101;
    102  1.6  rillig 	DO_NOTHING;
    103  1.6  rillig 	x._y = 5;
    104  1.6  rillig }
    105  1.6  rillig //indent end
    106  1.6  rillig 
    107  1.6  rillig //indent run
    108  1.6  rillig void
    109  1.6  rillig t(void)
    110  1.6  rillig {
    111  1.6  rillig 	unsigned long	x = 314UL;
    112  1.6  rillig 	double		y[] = {0x1P+9F, 0.3, .1, 1.2f, 0xa.p01f, 3.14f, 2.L};
    113  1.6  rillig 	int		z = 0b0101;
    114  1.6  rillig 	DO_NOTHING;
    115  1.6  rillig 	x._y = 5;
    116  1.6  rillig }
    117  1.6  rillig //indent end
    118  1.6  rillig 
    119  1.6  rillig 
    120  1.6  rillig /*
    121  1.6  rillig  * Test identifiers containing '$', which some compilers support as an
    122  1.6  rillig  * extension to the C standard.
    123  1.6  rillig  */
    124  1.6  rillig //indent input
    125  1.6  rillig int $		= jQuery;			// just kidding
    126  1.6  rillig const char SYS$LOGIN[]="$HOME";
    127  1.6  rillig //indent end
    128  1.6  rillig 
    129  1.6  rillig //indent run
    130  1.6  rillig int		$ = jQuery;	// just kidding
    131  1.6  rillig const char	SYS$LOGIN[] = "$HOME";
    132  1.6  rillig //indent end
    133  1.6  rillig 
    134  1.6  rillig 
    135  1.6  rillig /*
    136  1.6  rillig  * Test the tokenizer for number constants.
    137  1.6  rillig  *
    138  1.6  rillig  * When the tokenizer reads a character that makes a token invalid (such as
    139  1.6  rillig  * '0x') but may later be extended to form a valid token (such as '0x123'),
    140  1.6  rillig  * indent does not care about this invalid prefix and returns it nevertheless.
    141  1.6  rillig  */
    142  1.6  rillig //indent input
    143  1.6  rillig int unfinished_hex_prefix = 0x;
    144  1.6  rillig double unfinished_hex_float = 0x123p;
    145  1.6  rillig //indent end
    146  1.6  rillig 
    147  1.6  rillig //indent run-equals-input -di0
    148