1 /* Parse C expressions for cpplib.
2 Copyright (C) 1987, 92, 94, 95, 97, 98, 1999, 2000 Free Software Foundation.
3 Contributed by Per Bothner, 1994.
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 2, or (at your option) any
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. */
20 /* Parse a C expression from text in a string */
28 #ifndef MAX_CHAR_TYPE_SIZE
29 #define MAX_CHAR_TYPE_SIZE CHAR_TYPE_SIZE
32 #ifndef MAX_INT_TYPE_SIZE
33 #define MAX_INT_TYPE_SIZE INT_TYPE_SIZE
36 #ifndef MAX_LONG_TYPE_SIZE
37 #define MAX_LONG_TYPE_SIZE LONG_TYPE_SIZE
40 #ifndef MAX_WCHAR_TYPE_SIZE
41 #define MAX_WCHAR_TYPE_SIZE WCHAR_TYPE_SIZE
44 #define MAX_CHAR_TYPE_MASK (MAX_CHAR_TYPE_SIZE < HOST_BITS_PER_WIDEST_INT \
45 ? (~(~(HOST_WIDEST_INT) 0 << MAX_CHAR_TYPE_SIZE)) \
46 : ~ (HOST_WIDEST_INT) 0)
48 #define MAX_WCHAR_TYPE_MASK (MAX_WCHAR_TYPE_SIZE < HOST_BITS_PER_WIDEST_INT \
49 ? ~(~(HOST_WIDEST_INT) 0 << MAX_WCHAR_TYPE_SIZE) \
50 : ~ (HOST_WIDEST_INT) 0)
52 /* Yield nonzero if adding two numbers with A's and B's signs can yield a
53 number with SUM's sign, where A, B, and SUM are all C integers. */
54 #define possible_sum_sign(a, b, sum) ((((a) ^ (b)) | ~ ((a) ^ (sum))) < 0)
56 static void integer_overflow PARAMS ((cpp_reader *));
57 static HOST_WIDEST_INT left_shift PARAMS ((cpp_reader *, HOST_WIDEST_INT,
59 unsigned HOST_WIDEST_INT));
60 static HOST_WIDEST_INT right_shift PARAMS ((cpp_reader *, HOST_WIDEST_INT,
62 unsigned HOST_WIDEST_INT));
63 static struct op parse_number PARAMS ((cpp_reader *, const cpp_token *));
64 static struct op parse_charconst PARAMS ((cpp_reader *, const cpp_token *));
65 static struct op parse_defined PARAMS ((cpp_reader *));
66 static HOST_WIDEST_INT parse_escape PARAMS ((cpp_reader *, const U_CHAR **,
67 const U_CHAR *, HOST_WIDEST_INT));
68 static struct op lex PARAMS ((cpp_reader *, int, cpp_token *));
69 static const unsigned char *op_as_text PARAMS ((cpp_reader *, enum cpp_ttype));
74 U_CHAR prio; /* Priority of op. */
76 U_CHAR unsignedp; /* True if value should be treated as unsigned. */
77 HOST_WIDEST_INT value; /* The value logically "right" of op. */
80 /* There is no "error" token, but we can't get comments in #if, so we can
81 abuse that token type. */
82 #define CPP_ERROR CPP_COMMENT
84 /* With -O2, gcc appears to produce nice code, moving the error
85 message load and subsequent jump completely out of the main path. */
86 #define CPP_ICE(msgid) \
87 do { cpp_ice (pfile, msgid); goto syntax_error; } while(0)
88 #define SYNTAX_ERROR(msgid) \
89 do { cpp_error (pfile, msgid); goto syntax_error; } while(0)
90 #define SYNTAX_ERROR2(msgid, arg) \
91 do { cpp_error (pfile, msgid, arg); goto syntax_error; } while(0)
93 /* Parse and convert an integer for #if. Accepts decimal, hex, or octal
94 with or without size suffixes. */
102 const struct suffix vsuf_1[] = {
103 { "u", 1, 0 }, { "U", 1, 0 },
104 { "l", 0, 1 }, { "L", 0, 1 }
107 const struct suffix vsuf_2[] = {
108 { "ul", 1, 1 }, { "UL", 1, 1 }, { "uL", 1, 1 }, { "Ul", 1, 1 },
109 { "lu", 1, 1 }, { "LU", 1, 1 }, { "Lu", 1, 1 }, { "lU", 1, 1 },
110 { "ll", 0, 2 }, { "LL", 0, 2 }
113 const struct suffix vsuf_3[] = {
114 { "ull", 1, 2 }, { "ULL", 1, 2 }, { "uLL", 1, 2 }, { "Ull", 1, 2 },
115 { "llu", 1, 2 }, { "LLU", 1, 2 }, { "LLu", 1, 2 }, { "llU", 1, 2 }
117 #define Nsuff(tab) (sizeof tab / sizeof (struct suffix))
120 parse_number (pfile, tok)
122 const cpp_token *tok;
125 const U_CHAR *start = tok->val.str.text;
126 const U_CHAR *end = start + tok->val.str.len;
127 const U_CHAR *p = start;
129 unsigned HOST_WIDEST_INT n = 0, nd, MAX_over_base;
132 int digit, largest_digit = 0;
133 const struct suffix *sufftab;
139 if (end - start >= 3 && (p[1] == 'x' || p[1] == 'X'))
151 /* Some buggy compilers (e.g. MPW C) seem to need both casts. */
152 MAX_over_base = (((unsigned HOST_WIDEST_INT) -1)
153 / ((unsigned HOST_WIDEST_INT) base));
159 if (c >= '0' && c <= '9')
161 /* We believe that in all live character sets, a-f are
162 consecutive, and so are A-F. */
163 else if (base == 16 && c >= 'a' && c <= 'f')
164 digit = c - 'a' + 10;
165 else if (base == 16 && c >= 'A' && c <= 'F')
166 digit = c - 'A' + 10;
170 if (largest_digit < digit)
171 largest_digit = digit;
172 nd = n * base + digit;
173 overflow |= MAX_over_base < n || nd < n;
179 /* Check for a floating point constant. Note that float constants
180 with an exponent or suffix but no decimal point are technically
181 invalid (C99 6.4.4.2) but accepted elsewhere. */
182 if ((c == '.' || c == 'F' || c == 'f')
183 || (base == 10 && (c == 'E' || c == 'e')
184 && p+1 < end && (p[1] == '+' || p[1] == '-'))
185 || (base == 16 && (c == 'P' || c == 'p')
186 && p+1 < end && (p[1] == '+' || p[1] == '-')))
187 SYNTAX_ERROR ("floating point numbers are not valid in #if");
189 /* Determine the suffix. l means long, and u means unsigned.
190 See the suffix tables, above. */
193 case 1: sufftab = vsuf_1; nsuff = Nsuff(vsuf_1); break;
194 case 2: sufftab = vsuf_2; nsuff = Nsuff(vsuf_2); break;
195 case 3: sufftab = vsuf_3; nsuff = Nsuff(vsuf_3); break;
196 default: goto invalid_suffix;
199 for (i = 0; i < nsuff; i++)
200 if (memcmp (p, sufftab[i].s, end - p) == 0)
204 op.unsignedp = sufftab[i].u;
206 if (CPP_WTRADITIONAL (pfile) && sufftab[i].u)
207 cpp_warning (pfile, "traditional C rejects the `U' suffix");
208 if (sufftab[i].l == 2 && !CPP_OPTION (pfile, extended_numbers))
209 SYNTAX_ERROR ("too many 'l' suffixes in integer constant");
212 if (base <= largest_digit)
213 cpp_pedwarn (pfile, "integer constant contains digits beyond the radix");
216 cpp_pedwarn (pfile, "integer constant out of range");
218 /* If too big to be signed, consider it unsigned. */
219 else if ((HOST_WIDEST_INT) n < 0 && ! op.unsignedp)
222 cpp_warning (pfile, "integer constant is so large that it is unsigned");
231 cpp_error (pfile, "invalid suffix '%.*s' on integer constant",
238 /* Parse and convert a character constant for #if. Understands backslash
239 escapes (\n, \031) and multibyte characters (if so configured). */
241 parse_charconst (pfile, tok)
243 const cpp_token *tok;
246 HOST_WIDEST_INT result = 0;
249 unsigned int width = MAX_CHAR_TYPE_SIZE, mask = MAX_CHAR_TYPE_MASK;
251 const U_CHAR *ptr = tok->val.str.text;
252 const U_CHAR *end = ptr + tok->val.str.len;
256 if (tok->type == CPP_WCHAR)
257 width = MAX_WCHAR_TYPE_SIZE, mask = MAX_WCHAR_TYPE_MASK;
258 max_chars = MAX_LONG_TYPE_SIZE / width;
264 CPP_ICE ("unescaped ' in character constant");
267 c = parse_escape (pfile, &ptr, end, mask);
268 if (width < HOST_BITS_PER_INT
269 && (unsigned int) c >= (unsigned int)(1 << width))
271 "escape sequence out of range for character");
274 /* Merge character into result; ignore excess chars. */
275 if (++num_chars <= max_chars)
277 if (width < HOST_BITS_PER_INT)
278 result = (result << width) | (c & ((1 << width) - 1));
285 SYNTAX_ERROR ("empty character constant");
286 else if (num_chars > max_chars)
287 SYNTAX_ERROR ("character constant too long");
288 else if (num_chars != 1)
289 cpp_warning (pfile, "multi-character character constant");
291 /* If char type is signed, sign-extend the constant. */
292 num_bits = num_chars * width;
294 if (pfile->spec_nodes.n__CHAR_UNSIGNED__->type == NT_MACRO
295 || ((result >> (num_bits - 1)) & 1) == 0)
296 op.value = result & ((unsigned HOST_WIDEST_INT) ~0
297 >> (HOST_BITS_PER_WIDEST_INT - num_bits));
299 op.value = result | ~((unsigned HOST_WIDEST_INT) ~0
300 >> (HOST_BITS_PER_WIDEST_INT - num_bits));
302 /* This is always a signed type. */
313 parse_defined (pfile)
317 cpp_hashnode *node = 0;
321 /* Don't expand macros. */
322 pfile->state.prevent_expansion++;
324 cpp_get_token (pfile, &token);
325 if (token.type == CPP_OPEN_PAREN)
328 cpp_get_token (pfile, &token);
331 if (token.type == CPP_NAME)
333 node = token.val.node;
336 cpp_get_token (pfile, &token);
337 if (token.type != CPP_CLOSE_PAREN)
339 cpp_error (pfile, "missing ')' after \"defined\"");
345 cpp_error (pfile, "\"defined\" without an identifier");
351 op.value = node->type == NT_MACRO;
355 /* No macros? At top of file? */
356 if (pfile->mi_state == MI_OUTSIDE && pfile->mi_cmacro == 0
357 && pfile->mi_if_not_defined == MI_IND_NOT && pfile->mi_lexed == 1)
359 cpp_start_lookahead (pfile);
360 cpp_get_token (pfile, &token);
361 if (token.type == CPP_EOF)
362 pfile->mi_ind_cmacro = node;
363 cpp_stop_lookahead (pfile, 0);
367 pfile->state.prevent_expansion--;
371 /* Read one token. */
374 lex (pfile, skip_evaluation, token)
381 cpp_get_token (pfile, token);
387 return parse_number (pfile, token);
391 return parse_charconst (pfile, token);
395 SYNTAX_ERROR ("string constants are not valid in #if");
398 SYNTAX_ERROR ("floating point numbers are not valid in #if");
401 if (ISGRAPH (token->val.c))
402 SYNTAX_ERROR2 ("invalid character '%c' in #if", token->val.c);
404 SYNTAX_ERROR2 ("invalid character '\\%03o' in #if", token->val.c);
407 if (token->val.node == pfile->spec_nodes.n_defined)
409 if (pfile->context->prev && CPP_PEDANTIC (pfile))
410 cpp_pedwarn (pfile, "\"defined\" operator appears during macro expansion");
412 return parse_defined (pfile);
414 /* Controlling #if expressions cannot contain identifiers (they
415 could become macros in the future). */
416 pfile->mi_state = MI_FAILED;
422 if (CPP_OPTION (pfile, warn_undef) && !skip_evaluation)
423 cpp_warning (pfile, "\"%s\" is not defined", token->val.node->name);
432 if (_cpp_test_assertion (pfile, &temp))
440 /* We don't worry about its position here. */
441 pfile->mi_if_not_defined = MI_IND_NOT;
445 if ((token->type > CPP_EQ && token->type < CPP_PLUS_EQ)
446 || token->type == CPP_EOF)
452 SYNTAX_ERROR2 ("\"%s\" is not valid in #if expressions",
453 cpp_token_as_text (pfile, token));
461 /* Parse a C escape sequence. STRING_PTR points to a variable
462 containing a pointer to the string to parse. That pointer
463 is updated past the characters we use. The value of the
464 escape sequence is returned.
466 If \ is followed by 000, we return 0 and leave the string pointer
467 after the zeros. A value of 0 does not mean end of string. */
469 static HOST_WIDEST_INT
470 parse_escape (pfile, string_ptr, limit, result_mask)
472 const U_CHAR **string_ptr;
474 HOST_WIDEST_INT result_mask;
476 const U_CHAR *ptr = *string_ptr;
477 /* We know we have at least one following character. */
481 case 'a': c = TARGET_BELL; break;
482 case 'b': c = TARGET_BS; break;
483 case 'f': c = TARGET_FF; break;
484 case 'n': c = TARGET_NEWLINE; break;
485 case 'r': c = TARGET_CR; break;
486 case 't': c = TARGET_TAB; break;
487 case 'v': c = TARGET_VT; break;
490 if (CPP_PEDANTIC (pfile))
491 cpp_pedwarn (pfile, "non-ISO-standard escape sequence, '\\%c'", c);
495 case '0': case '1': case '2': case '3':
496 case '4': case '5': case '6': case '7':
498 unsigned int i = c - '0';
506 if (c < '0' || c > '7')
509 i = (i << 3) + c - '0';
511 if (i != (i & result_mask))
514 cpp_pedwarn (pfile, "octal escape sequence out of range");
522 unsigned int i = 0, overflow = 0;
523 int digits_found = 0, digit;
529 if (c >= '0' && c <= '9')
531 else if (c >= 'a' && c <= 'f')
532 digit = c - 'a' + 10;
533 else if (c >= 'A' && c <= 'F')
534 digit = c - 'A' + 10;
538 overflow |= i ^ (i << 4 >> 4);
539 i = (i << 4) + digit;
543 cpp_error (pfile, "\\x used with no following hex digits");
544 if (overflow | (i != (i & result_mask)))
547 cpp_pedwarn (pfile, "hex escape sequence out of range");
558 integer_overflow (pfile)
561 if (CPP_PEDANTIC (pfile))
562 cpp_pedwarn (pfile, "integer overflow in preprocessor expression");
565 static HOST_WIDEST_INT
566 left_shift (pfile, a, unsignedp, b)
569 unsigned int unsignedp;
570 unsigned HOST_WIDEST_INT b;
572 if (b >= HOST_BITS_PER_WIDEST_INT)
574 if (! unsignedp && a != 0)
575 integer_overflow (pfile);
579 return (unsigned HOST_WIDEST_INT) a << b;
582 HOST_WIDEST_INT l = a << b;
584 integer_overflow (pfile);
589 static HOST_WIDEST_INT
590 right_shift (pfile, a, unsignedp, b)
591 cpp_reader *pfile ATTRIBUTE_UNUSED;
593 unsigned int unsignedp;
594 unsigned HOST_WIDEST_INT b;
596 if (b >= HOST_BITS_PER_WIDEST_INT)
597 return unsignedp ? 0 : a >> (HOST_BITS_PER_WIDEST_INT - 1);
599 return (unsigned HOST_WIDEST_INT) a >> b;
604 /* Operator precedence and flags table.
606 After an operator is returned from the lexer, if it has priority less
607 than or equal to the operator on the top of the stack, we reduce the
608 stack by one operator and repeat the test. Since equal priorities
609 reduce, this is naturally left-associative.
611 We handle right-associative operators by clearing the lower bit of all
612 left-associative operators, and setting it for right-associative ones.
613 After the reduction phase of a new operator, just before it is pushed
614 onto the stack, its RIGHT_ASSOC bit is cleared. The effect is that
615 during the reduction phase, the current right-associative operator has
616 a priority one greater than any other operator of otherwise equal
617 precedence that has been pushed on the top of the stack. This avoids
618 a reduction pass, and effectively makes the logic right-associative.
620 The remaining cases are '(' and ')'. We handle '(' by skipping the
621 reduction phase completely. ')' is given lower priority than
622 everything else, including '(', effectively forcing a reduction of the
623 parenthesised expression. If there is no matching '(', the stack will
624 be reduced all the way to the beginning, exiting the parser in the
625 same way as the ultra-low priority end-of-expression dummy operator.
626 The exit code checks to see if the operator that caused it is ')', and
627 if so outputs an appropriate error message.
629 The parser assumes all shifted operators require a right operand
630 unless the flag NO_R_OPERAND is set, and similarly for NO_L_OPERAND.
631 These semantics are automatically checked, any extra semantics need to
632 be handled with operator-specific code. */
635 #define FLAG_MASK ((1 << FLAG_BITS) - 1)
636 #define PRIO_SHIFT (FLAG_BITS + 1)
637 #define EXTRACT_PRIO(cnst) (cnst >> FLAG_BITS)
638 #define EXTRACT_FLAGS(cnst) (cnst & FLAG_MASK)
641 #define HAVE_VALUE (1 << 0)
642 #define NO_L_OPERAND (1 << 1)
643 #define NO_R_OPERAND (1 << 2)
644 #define SHORT_CIRCUIT (1 << 3)
646 /* Priority and flag combinations. */
647 #define RIGHT_ASSOC (1 << FLAG_BITS)
648 #define FORCE_REDUCE_PRIO (0 << PRIO_SHIFT)
649 #define CLOSE_PAREN_PRIO (1 << PRIO_SHIFT)
650 #define OPEN_PAREN_PRIO ((2 << PRIO_SHIFT) | NO_L_OPERAND)
651 #define COMMA_PRIO (3 << PRIO_SHIFT)
652 #define COND_PRIO ((4 << PRIO_SHIFT) | RIGHT_ASSOC | SHORT_CIRCUIT)
653 #define COLON_PRIO ((5 << PRIO_SHIFT) | SHORT_CIRCUIT)
654 #define OROR_PRIO ((6 << PRIO_SHIFT) | SHORT_CIRCUIT)
655 #define ANDAND_PRIO ((7 << PRIO_SHIFT) | SHORT_CIRCUIT)
656 #define OR_PRIO (8 << PRIO_SHIFT)
657 #define XOR_PRIO (9 << PRIO_SHIFT)
658 #define AND_PRIO (10 << PRIO_SHIFT)
659 #define MINMAX_PRIO (11 << PRIO_SHIFT)
660 #define EQUAL_PRIO (12 << PRIO_SHIFT)
661 #define LESS_PRIO (13 << PRIO_SHIFT)
662 #define SHIFT_PRIO (14 << PRIO_SHIFT)
663 #define PLUS_PRIO (15 << PRIO_SHIFT)
664 #define MUL_PRIO (16 << PRIO_SHIFT)
665 #define UNARY_PRIO ((17 << PRIO_SHIFT) | RIGHT_ASSOC | NO_L_OPERAND)
667 /* Operator to priority map. Must be in the same order as the first
668 N entries of enum cpp_ttype. */
672 /* EQ */ 0, /* dummy entry - can't happen */
673 /* NOT */ UNARY_PRIO,
674 /* GREATER */ LESS_PRIO,
675 /* LESS */ LESS_PRIO,
676 /* PLUS */ UNARY_PRIO, /* note these two can be unary */
677 /* MINUS */ UNARY_PRIO, /* or binary */
684 /* RSHIFT */ SHIFT_PRIO,
685 /* LSHIFT */ SHIFT_PRIO,
686 /* MIN */ MINMAX_PRIO, /* C++ specific */
687 /* MAX */ MINMAX_PRIO, /* extensions */
689 /* COMPL */ UNARY_PRIO,
690 /* AND_AND */ ANDAND_PRIO,
691 /* OR_OR */ OROR_PRIO,
692 /* QUERY */ COND_PRIO,
693 /* COLON */ COLON_PRIO,
694 /* COMMA */ COMMA_PRIO,
695 /* OPEN_PAREN */ OPEN_PAREN_PRIO,
696 /* CLOSE_PAREN */ CLOSE_PAREN_PRIO,
697 /* EQ_EQ */ EQUAL_PRIO,
698 /* NOT_EQ */ EQUAL_PRIO,
699 /* GREATER_EQ */ LESS_PRIO,
700 /* LESS_EQ */ LESS_PRIO
703 #define COMPARE(OP) \
704 top->unsignedp = 0; \
705 top->value = (unsigned1 | unsigned2) \
706 ? (unsigned HOST_WIDEST_INT) v1 OP (unsigned HOST_WIDEST_INT) v2 \
708 #define EQUALITY(OP) \
709 top->value = v1 OP v2; \
711 #define BITWISE(OP) \
712 top->value = v1 OP v2; \
713 top->unsignedp = unsigned1 | unsigned2;
715 top->value = (v1 OP v2) ? v1 : v2; \
716 top->unsignedp = unsigned1 | unsigned2;
718 top->value = OP v2; \
719 top->unsignedp = unsigned2; \
720 top->flags |= HAVE_VALUE;
721 #define SHIFT(PSH, MSH) \
722 if (skip_evaluation) \
724 top->unsignedp = unsigned1; \
725 if (v2 < 0 && ! unsigned2) \
726 top->value = MSH (pfile, v1, unsigned1, -v2); \
728 top->value = PSH (pfile, v1, unsigned1, v2);
730 /* Parse and evaluate a C expression, reading from PFILE.
731 Returns the truth value of the expression. */
734 _cpp_parse_expr (pfile)
737 /* The implementation is an operator precedence parser, i.e. a
738 bottom-up parser, using a stack for not-yet-reduced tokens.
740 The stack base is 'stack', and the current stack pointer is 'top'.
741 There is a stack element for each operator (only),
742 and the most recently pushed operator is 'top->op'.
743 An operand (value) is stored in the 'value' field of the stack
744 element of the operator that precedes it.
745 In that case the 'flags' field has the HAVE_VALUE flag set. */
747 #define INIT_STACK_SIZE 20
748 struct op init_stack[INIT_STACK_SIZE];
749 struct op *stack = init_stack;
750 struct op *limit = stack + INIT_STACK_SIZE;
752 register struct op *top = stack + 1;
753 int skip_evaluation = 0;
756 /* Set up detection of #if ! defined(). */
758 pfile->mi_if_not_defined = MI_IND_NONE;
760 /* We've finished when we try to reduce this. */
762 /* Nifty way to catch missing '('. */
763 top->prio = EXTRACT_PRIO(CLOSE_PAREN_PRIO);
764 /* Avoid missing right operand checks. */
765 top->flags = NO_R_OPERAND;
774 op = lex (pfile, skip_evaluation, &token);
777 /* If the token is an operand, push its value and get next
778 token. If it is an operator, get its priority and flags, and
779 try to reduce the expression on the stack. */
786 /* Push a value onto the stack. */
787 if (top->flags & HAVE_VALUE)
788 SYNTAX_ERROR ("missing binary operator");
789 top->value = op.value;
790 top->unsignedp = op.unsignedp;
791 top->flags |= HAVE_VALUE;
794 case CPP_EOF: prio = FORCE_REDUCE_PRIO; break;
796 case CPP_MINUS: prio = PLUS_PRIO; if (top->flags & HAVE_VALUE) break;
797 /* else unary; fall through */
798 default: prio = op_to_prio[op.op]; break;
801 /* Separate the operator's code into priority and flags. */
802 flags = EXTRACT_FLAGS(prio);
803 prio = EXTRACT_PRIO(prio);
804 if (prio == EXTRACT_PRIO(OPEN_PAREN_PRIO))
807 /* Check for reductions. Then push the operator. */
808 while (prio <= top->prio)
810 HOST_WIDEST_INT v1, v2;
811 unsigned int unsigned1, unsigned2;
813 /* Most operators that can appear on the stack require a
814 right operand. Check this before trying to reduce. */
815 if ((top->flags & (HAVE_VALUE | NO_R_OPERAND)) == 0)
817 if (top->op == CPP_OPEN_PAREN)
818 SYNTAX_ERROR ("void expression between '(' and ')'");
820 SYNTAX_ERROR2 ("operator '%s' has no right operand",
821 op_as_text (pfile, top->op));
824 unsigned2 = top->unsignedp, v2 = top->value;
826 unsigned1 = top->unsignedp, v1 = top->value;
828 /* Now set top->value = (top[1].op)(v1, v2); */
832 cpp_ice (pfile, "impossible operator '%s'",
833 op_as_text (pfile, top[1].op));
836 case CPP_NOT: UNARY(!); break;
837 case CPP_COMPL: UNARY(~); break;
838 case CPP_LESS: COMPARE(<); break;
839 case CPP_GREATER: COMPARE(>); break;
840 case CPP_LESS_EQ: COMPARE(<=); break;
841 case CPP_GREATER_EQ: COMPARE(>=); break;
842 case CPP_EQ_EQ: EQUALITY(==); break;
843 case CPP_NOT_EQ: EQUALITY(!=); break;
844 case CPP_AND: BITWISE(&); break;
845 case CPP_XOR: BITWISE(^); break;
846 case CPP_OR: BITWISE(|); break;
847 case CPP_LSHIFT: SHIFT(left_shift, right_shift); break;
848 case CPP_RSHIFT: SHIFT(right_shift, left_shift); break;
849 case CPP_MIN: MINMAX(<); break;
850 case CPP_MAX: MINMAX(>); break;
853 if (!(top->flags & HAVE_VALUE))
855 /* Can't use UNARY(+) because K+R C did not have unary
856 plus. Can't use UNARY() because some compilers object
857 to the empty argument. */
859 top->unsignedp = unsigned2;
860 top->flags |= HAVE_VALUE;
862 if (CPP_WTRADITIONAL (pfile))
864 "traditional C rejects the unary plus operator");
868 top->value = v1 + v2;
869 top->unsignedp = unsigned1 | unsigned2;
870 if (! top->unsignedp && ! skip_evaluation
871 && ! possible_sum_sign (v1, v2, top->value))
872 integer_overflow (pfile);
876 if (!(top->flags & HAVE_VALUE))
879 if (!skip_evaluation && (top->value & v2) < 0 && !unsigned2)
880 integer_overflow (pfile);
884 top->value = v1 - v2;
885 top->unsignedp = unsigned1 | unsigned2;
886 if (! top->unsignedp && ! skip_evaluation
887 && ! possible_sum_sign (top->value, v2, v1))
888 integer_overflow (pfile);
892 top->unsignedp = unsigned1 | unsigned2;
894 top->value = (unsigned HOST_WIDEST_INT) v1 * v2;
895 else if (!skip_evaluation)
897 top->value = v1 * v2;
898 if (v1 && (top->value / v1 != v2
899 || (top->value & v1 & v2) < 0))
900 integer_overflow (pfile);
908 SYNTAX_ERROR ("division by zero in #if");
909 top->unsignedp = unsigned1 | unsigned2;
910 if (top[1].op == CPP_DIV)
913 top->value = (unsigned HOST_WIDEST_INT) v1 / v2;
916 top->value = v1 / v2;
917 if ((top->value & v1 & v2) < 0)
918 integer_overflow (pfile);
924 top->value = (unsigned HOST_WIDEST_INT) v1 % v2;
926 top->value = v1 % v2;
931 top->value = v1 || v2;
933 if (v1) skip_evaluation--;
936 top->value = v1 && v2;
938 if (!v1) skip_evaluation--;
941 if (CPP_PEDANTIC (pfile))
942 cpp_pedwarn (pfile, "comma operator in operand of #if");
944 top->unsignedp = unsigned2;
947 SYNTAX_ERROR ("syntax error '?' without following ':'");
949 if (top[0].op != CPP_QUERY)
950 SYNTAX_ERROR ("syntax error ':' without preceding '?'");
952 if (top->value) skip_evaluation--;
953 top->value = top->value ? v1 : v2;
954 top->unsignedp = unsigned1 | unsigned2;
957 if (op.op != CPP_CLOSE_PAREN)
958 SYNTAX_ERROR ("missing ')' in expression");
960 op.unsignedp = unsigned2;
963 /* Reducing this dummy operator indicates we've finished. */
964 if (op.op == CPP_CLOSE_PAREN)
965 SYNTAX_ERROR ("missing '(' in expression");
970 /* Handle short-circuit evaluations. */
971 if (flags & SHORT_CIRCUIT)
974 case CPP_OR_OR: if (top->value) skip_evaluation++; break;
976 case CPP_QUERY: if (!top->value) skip_evaluation++; break;
978 if (top[-1].value) /* Was '?' condition true? */
987 /* Check we have a left operand iff we need one. */
988 if (flags & NO_L_OPERAND)
990 if (top->flags & HAVE_VALUE)
991 SYNTAX_ERROR2 ("missing binary operator before '%s'",
992 op_as_text (pfile, top->op));
996 if (!(top->flags & HAVE_VALUE))
997 SYNTAX_ERROR2 ("operator '%s' has no left operand",
998 op_as_text (pfile, top->op));
1001 /* Check for and handle stack overflow. */
1005 struct op *new_stack;
1006 int old_size = (char *) limit - (char *) stack;
1007 int new_size = 2 * old_size;
1008 if (stack != init_stack)
1009 new_stack = (struct op *) xrealloc (stack, new_size);
1012 new_stack = (struct op *) xmalloc (new_size);
1013 memcpy (new_stack, stack, old_size);
1016 top = (struct op *) ((char *) new_stack + old_size);
1017 limit = (struct op *) ((char *) new_stack + new_size);
1021 top->prio = prio & ~EXTRACT_PRIO(RIGHT_ASSOC);
1026 result = (top[1].value != 0);
1028 CPP_ICE ("unbalanced stack in #if");
1029 else if (!(top[1].flags & HAVE_VALUE))
1031 SYNTAX_ERROR ("#if with no expression");
1033 result = 0; /* Return 0 on syntax error. */
1036 /* Free dynamic stack if we allocated one. */
1037 if (stack != init_stack)
1042 static const unsigned char *
1043 op_as_text (pfile, op)
1051 return cpp_token_as_text (pfile, &token);