lsym_unary_op.c revision 1.6 1 1.6 rillig /* $NetBSD: lsym_unary_op.c,v 1.6 2023/05/13 06:52:48 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.5 rillig * A special kind of unary operator is '->', which additionally suppresses the
54 1.5 rillig * next space.
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