Home | History | Annotate | Line # | Download | only in indent
      1  1.13  rillig /* $NetBSD: lsym_unary_op.c,v 1.13 2023/10/22 21:03:08 rillig Exp $ */
      2   1.1  rillig 
      3   1.1  rillig /*
      4   1.1  rillig  * Tests for the token lsym_unary_op, which represents a unary operator.
      5   1.1  rillig  *
      6   1.1  rillig  * In an expression, a unary operator is written without blank next to its
      7   1.1  rillig  * argument.
      8   1.1  rillig  *
      9   1.1  rillig  * In a type name, the "unary operator" '*' represents the derivation of a
     10   1.1  rillig  * pointer type.
     11   1.6  rillig  *
     12   1.6  rillig  * See also:
     13   1.6  rillig  *	lsym_binary_op.c
     14   1.6  rillig  *	lsym_postfix_op.c
     15   1.6  rillig  *	C11 6.4.6 "Punctuators"
     16   1.6  rillig  *	C11 6.5 "Expressions"
     17   1.1  rillig  */
     18   1.1  rillig 
     19   1.4  rillig //indent input
     20   1.3  rillig void
     21   1.3  rillig unary_operators(void)
     22   1.3  rillig {
     23   1.3  rillig 	/* In the order of appearance in C11 6.5. */
     24   1.3  rillig 	function(a++, a--, ++a, --a, &a, *a, +a, -a, ~a, !a);
     25   1.3  rillig }
     26   1.4  rillig //indent end
     27   1.1  rillig 
     28   1.4  rillig //indent run-equals-input
     29   1.5  rillig 
     30   1.5  rillig 
     31   1.5  rillig /*
     32   1.5  rillig  * The unary operators '+' and '-' can occur in long chains.  In these chains,
     33   1.5  rillig  * adjacent '+' must not be merged to '++' since that would be a different
     34   1.5  rillig  * token.  The same applies to '&', but that case is irrelevant in practice
     35   1.5  rillig  * since the address of an address cannot be taken.
     36   1.5  rillig  */
     37   1.5  rillig //indent input
     38   1.5  rillig int var=+3;
     39   1.5  rillig int mixed=+-+-+-+-+-+-+-+-+-+-+-+-+-3;
     40   1.5  rillig int count=~-~-~-~-~-~-~-~-~-~-~-~-~-3;
     41   1.5  rillig int same = + + + + + - - - - - 3;
     42   1.5  rillig //indent end
     43   1.5  rillig 
     44   1.5  rillig //indent run -di0
     45   1.5  rillig int var = +3;
     46   1.5  rillig int mixed = +-+-+-+-+-+-+-+-+-+-+-+-+-3;
     47   1.5  rillig int count = ~-~-~-~-~-~-~-~-~-~-~-~-~-3;
     48   1.5  rillig int same = + + + + +- - - - -3;
     49   1.5  rillig //indent end
     50   1.5  rillig 
     51   1.5  rillig 
     52   1.5  rillig /*
     53  1.13  rillig  * The operator '->' is special as it additionally suppresses the space between
     54  1.13  rillig  * the operator and its right operand.
     55   1.5  rillig  */
     56   1.5  rillig //indent input
     57   1.5  rillig int var = p -> member;
     58   1.5  rillig //indent end
     59   1.5  rillig 
     60   1.5  rillig //indent run -di0
     61   1.5  rillig int var = p->member;
     62   1.5  rillig //indent end
     63   1.6  rillig 
     64   1.6  rillig 
     65   1.6  rillig //indent input
     66   1.6  rillig void
     67   1.6  rillig unary_operators(void)
     68   1.6  rillig {
     69   1.6  rillig 	++prefix_increment;
     70   1.6  rillig 	--prefix_decrement;
     71   1.6  rillig 	int *address = &lvalue;
     72   1.6  rillig 	int dereferenced = *address;
     73   1.6  rillig 	int positive = +number;
     74   1.6  rillig 	int negative = -number;
     75   1.6  rillig 	bool negated = !condition;
     76   1.6  rillig }
     77   1.6  rillig //indent end
     78   1.6  rillig 
     79   1.6  rillig //indent run-equals-input -di0
     80   1.7  rillig 
     81   1.7  rillig 
     82  1.10  rillig /*
     83  1.10  rillig  * Ensure that a '*' is not interpreted as unary operator in situations that
     84  1.10  rillig  * may look like a cast expression.
     85  1.10  rillig  */
     86   1.7  rillig //indent input
     87   1.7  rillig {
     88  1.11  rillig 	sbuf_t *sb = *(sbuf_t **)sp;
     89  1.10  rillig 	return (int)(a * (float)b);
     90  1.10  rillig 	a = (2 * b == c);
     91   1.7  rillig }
     92   1.7  rillig //indent end
     93  1.11  rillig 
     94  1.11  rillig //indent run-equals-input -di0
     95  1.12  rillig 
     96  1.12  rillig 
     97  1.12  rillig /* All asterisks from a pointer type are merged into a single token. */
     98  1.12  rillig //indent input
     99  1.12  rillig {
    100  1.12  rillig char*
    101  1.12  rillig *
    102  1.12  rillig *
    103  1.12  rillig *x;
    104  1.12  rillig char
    105  1.12  rillig *
    106  1.12  rillig *
    107  1.12  rillig *
    108  1.12  rillig *x;
    109  1.12  rillig }
    110  1.12  rillig //indent end
    111  1.12  rillig 
    112  1.12  rillig //indent run
    113  1.12  rillig {
    114  1.12  rillig 	char	    ****x;
    115  1.12  rillig 	char
    116  1.12  rillig 		    ****x;
    117  1.12  rillig }
    118  1.12  rillig //indent end
    119