diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-11-16 00:05:08 +0000 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2013-11-16 00:05:08 +0000 |
commit | d3f4ff8b51b8875a7862fae1fb574735db4bfd36 (patch) | |
tree | ddce12237d1c0fb641f1d74daf972657ec50caca /libcpp/internal.h | |
parent | 3d053a5f72d60cc868defb5108ac0b28bdd9ef4c (diff) | |
download | gcc-d3f4ff8b51b8875a7862fae1fb574735db4bfd36.zip gcc-d3f4ff8b51b8875a7862fae1fb574735db4bfd36.tar.gz gcc-d3f4ff8b51b8875a7862fae1fb574735db4bfd36.tar.bz2 |
ucnid-2011-1.c: New test.
gcc/testsuite:
* c-c++-common/cpp/ucnid-2011-1.c: New test.
libcpp:
* ucnid.tab: Add C11 and C11NOSTART data.
* makeucnid.c (digit): Rename enum value to N99.
(C11, N11, all_languages): New enum values.
(NUM_CODE_POINTS, MAX_CODE_POINT): New macros.
(flags, decomp, combining_value): Use NUM_CODE_POINTS as array
size.
(decomp): Use unsigned int as element type.
(all_decomp): New array.
(read_ucnid): Handle C11 and C11NOSTART. Use MAX_CODE_POINT.
(read_table): Use MAX_CODE_POINT. Store all decompositions in
all_decomp.
(read_derived): Use MAX_CODE_POINT.
(write_table): Use NUM_CODE_POINTS. Print N99, C11 and N11
flags. Print whole array variable declaration rather than just
array contents.
(char_id_valid, write_context_switch): New functions.
(main): Call write_context_switch.
* ucnid.h: Regenerate.
* include/cpplib.h (struct cpp_options): Add c11_identifiers.
* init.c (struct lang_flags): Add c11_identifiers.
(cpp_set_lang): Set c11_identifiers option from selected language.
* internal.h (struct normalize_state): Document "previous" as
previous starter character.
(NORMALIZE_STATE_UPDATE_IDNUM): Take character as argument.
* charset.c (DIG): Rename enum value to N99.
(C11, N11): New enum values.
(struct ucnrange): Give name to struct. Use short for flags and
unsigned int for end of range. Include ucnid.h for whole variable
declaration.
(ucn_valid_in_identifier): Allow for characters up to 0x10FFFF.
Allow for C11 in determining valid characters and valid start
characters. Use check_nfc for non-Hangul context-dependent
checks. Only store starter characters in nst->previous.
(_cpp_valid_ucn): Pass new argument to
NORMALIZE_STATE_UPDATE_IDNUM.
* lex.c (lex_identifier): Pass new argument to
NORMALIZE_STATE_UPDATE_IDNUM. Call NORMALIZE_STATE_UPDATE_IDNUM
after initial non-UCN part of identifier.
(lex_number): Pass new argument to NORMALIZE_STATE_UPDATE_IDNUM.
From-SVN: r204886
Diffstat (limited to 'libcpp/internal.h')
-rw-r--r-- | libcpp/internal.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libcpp/internal.h b/libcpp/internal.h index 6de44ed..5321458 100644 --- a/libcpp/internal.h +++ b/libcpp/internal.h @@ -713,9 +713,10 @@ extern size_t _cpp_replacement_text_len (const cpp_macro *); struct normalize_state { - /* The previous character. */ + /* The previous starter character. */ cppchar_t previous; - /* The combining class of the previous character. */ + /* The combining class of the previous character (whether or not a + starter). */ unsigned char prev_class; /* The lowest normalization level so far. */ enum cpp_normalize_level level; @@ -723,10 +724,10 @@ struct normalize_state #define INITIAL_NORMALIZE_STATE { 0, 0, normalized_KC } #define NORMALIZE_STATE_RESULT(st) ((st)->level) -/* We saw a character that matches ISIDNUM(), update a +/* We saw a character C that matches ISIDNUM(), update a normalize_state appropriately. */ -#define NORMALIZE_STATE_UPDATE_IDNUM(st) \ - ((st)->previous = 0, (st)->prev_class = 0) +#define NORMALIZE_STATE_UPDATE_IDNUM(st, c) \ + ((st)->previous = (c), (st)->prev_class = 0) extern cppchar_t _cpp_valid_ucn (cpp_reader *, const unsigned char **, const unsigned char *, int, |