diff --git a/common/pattern_p.y b/common/pattern_p.y index 34864cbb1f9981e531a1caf1066420394a437b21..37a6673d754737e642e5aa482ede9a5183206388 100644 --- a/common/pattern_p.y +++ b/common/pattern_p.y @@ -71,11 +71,11 @@ static void pattern_yyerror(const char *error_str); /** Creates the POSIX equivalent of literal character \a c using the * appropriate escape sequence when needed. */ - static char *translate_character(char c); + static char *translate_character(unsigned char c); /** Returns the printable equivalent of character \a c */ - static char *print_character(char c); + static char *print_character(unsigned char c); /** Returns the printable equivalent of range \a lower .. \a upper */ - static char *print_range(char lower, char upper); + static char *print_range(unsigned char lower, unsigned char upper); /** structure for manipulating character sets */ struct character_set; /** allocates, initializes and returns a new empty set */ @@ -89,16 +89,16 @@ /** returns whether set \a set contains all characters in range 1..127 */ static int set_is_full(const character_set *set); /** returns whether set \a set contains the character \a c */ - static int set_has_char(const character_set *set, char c); + static int set_has_char(const character_set *set, unsigned char c); /** adds character \a c to set \a set */ - static void set_add_char(character_set *set, char c); + static void set_add_char(character_set *set, unsigned char c); /** removes character \a c to set \a set */ - static void set_remove_char(character_set *set, char c); + static void set_remove_char(character_set *set, unsigned char c); /** returns whether set \a set contains at least one character in the range * \a lower .. \a upper */ - static int set_has_range(const character_set *set, char lower, char upper); + static int set_has_range(const character_set *set, unsigned char lower, unsigned char upper); /** adds range \a lower .. \a upper to set \a set */ - static void set_add_range(character_set *set, char lower, char upper); + static void set_add_range(character_set *set, unsigned char lower, unsigned char upper); /** returns whether set \a set1 and \a set2 has non-empty intersect */ static int set_has_intersect(const character_set *set1, const character_set *set2); @@ -139,7 +139,7 @@ static void yyprint(FILE *file, int type, const YYSTYPE& value); %union { int b; /* boolean */ - char c; /* single character */ + unsigned char c; /* single character */ char *s; /* character string */ unsigned long int u; /* unsigned integer */ struct character_set *set; // used by nonterminals in pattern_p.y @@ -686,7 +686,7 @@ void pattern_yyerror(const char *error_str) * @param c plain character * @return a newly allocated string which must be Free() 'd */ -char *translate_character(char c) +char *translate_character(unsigned char c) { int escape_needed = 0; switch (c) { @@ -710,7 +710,7 @@ char *translate_character(char c) else return mputc(NULL, c); } -char *print_character(char c) +char *print_character(unsigned char c) { switch (c) { case '\t': @@ -723,7 +723,7 @@ char *print_character(char c) } } -char *print_range(char lower, char upper) +char *print_range(unsigned char lower, unsigned char upper) { char *range_str = print_character(lower); range_str = mputc(range_str, '-'); @@ -775,24 +775,24 @@ int set_is_full(const character_set *set) return 1; } -int set_has_char(const character_set *set, char c) +int set_has_char(const character_set *set, unsigned char c) { if (set->set_members[c / CS_BITS_PER_ELEM] & 1UL << c % CS_BITS_PER_ELEM) return 1; else return 0; } -void set_add_char(character_set *set, char c) +void set_add_char(character_set *set, unsigned char c) { set->set_members[c / CS_BITS_PER_ELEM] |= 1UL << c % CS_BITS_PER_ELEM; } -void set_remove_char(character_set *set, char c) +void set_remove_char(character_set *set, unsigned char c) { set->set_members[c / CS_BITS_PER_ELEM] &= ~(1UL << c % CS_BITS_PER_ELEM); } -int set_has_range(const character_set *set, char lower, char upper) +int set_has_range(const character_set *set, unsigned char lower, unsigned char upper) { for (size_t i = lower; i <= static_cast<unsigned char>(upper); i++) if (set->set_members[i / CS_BITS_PER_ELEM] & 1UL << i % CS_BITS_PER_ELEM) @@ -800,7 +800,7 @@ int set_has_range(const character_set *set, char lower, char upper) return 0; } -void set_add_range(character_set *set, char lower, char upper) +void set_add_range(character_set *set, unsigned char lower, unsigned char upper) { for (size_t i = lower; i <= static_cast<unsigned char>(upper); i++) set->set_members[i / CS_BITS_PER_ELEM] |= 1UL << i % CS_BITS_PER_ELEM; @@ -832,10 +832,10 @@ void set_report_duplicates(const character_set *set1, for (i++; i <= 127; i++) if (set_has_char(set2, i) && set_has_char(set1, i)) break; if (i > 127) break; - char lower = i; + unsigned char lower = i; for (i++; i <= 127; i++) if (!set_has_char(set2, i) || !set_has_char(set1, i)) break; - char upper = i - 1; + unsigned char upper = static_cast<unsigned char>(i - 1); if (lower < upper) { char *range_str = print_range(lower, upper); TTCN_pattern_warning("Duplicate range `%s' in the character set.", diff --git a/common/pattern_uni.y b/common/pattern_uni.y index aa860dd7511e3b03bc0174d62f4ad5e0130f07c4..a7929b7ac2dc6ce73c9133c15a9833b56bd714da 100644 --- a/common/pattern_uni.y +++ b/common/pattern_uni.y @@ -95,7 +95,7 @@ static void yyprint(FILE *file, int type, const YYSTYPE& value); %union { int b; /* boolean */ - char c; /* single character */ + unsigned char c; /* single character */ char *s; /* character string */ unsigned long int u; /* unsigned integer */ struct character_set *set; // used by nonterminals in pattern_p.y