On 11/05/14 08:48, David Malcolm wrote:
On Tue, 2014-11-04 at 14:39 -0700, Jeff Law wrote:
On 11/04/14 09:57, David Malcolm wrote:
+#define IS_ASCII_DIGIT(CHAR) \
+  ((CHAR) >= '0' && (CHAR) <='9')
+
+#define IS_ASCII_ALNUM(CHAR) \
+  (IS_ASCII_ALPHA (CHAR) || IS_ASCII_DIGIT (CHAR))
Can't we rely on the C library to give us equivalents?

I've been burned in the past by the C library using locales, in
particular the two lowercase "i" variants in Turkish.

These macros are used by gcc_jit_context_new_function to enforce C's
naming restrictions, to avoid errors from the assembler.  The comment I
put there was:

    /* The assembler can only handle certain names, so for now, enforce
       C's rules for identifiers upon the name.
       Eventually we'll need some way to interact with e.g. C++ name mangling.  
*/

Am I right in thinking that for the assembler we need to enforce the C
naming rules specifically on *ASCII*.

(clearly another comment is needed here).
I guess you've got to do it somewhere.  Presumably there isn't something
already in GCC that enforces an input character set?  I guess I just
dislike seeing something that feels like it ought to already be available.

It turns out that locale-independent tests for this did already exist in
libiberty, in safe-ctype.h, so I've committed this to the jit branch:

gcc/jit/ChangeLog.jit:
        * libgccjit.c: Include safe-ctype.h from libiberty.
        (IS_ASCII_ALPHA): Delete.
        (IS_ASCII_DIGIT): Delete.
        (IS_ASCII_ALNUM): Delete.
        (gcc_jit_context_new_function): Replace use of IS_ASCII_ALPHA and
        IS_ASCII_ALNUM with ISALPHA and ISALNUM respectively, from
        libiberty.
Excellent.  Thanks for the cleanup.

Jeff

Reply via email to