[pypy-svn] r7692 - pypy/trunk/src/pypy/translator
arigo at codespeak.net
arigo at codespeak.net
Sat Nov 27 23:48:57 CET 2004
Author: arigo
Date: Sat Nov 27 23:48:57 2004
New Revision: 7692
Modified:
pypy/trunk/src/pypy/translator/genc.py
Log:
Generic handling of characters forbidden in C identifiers.
Triggered by the bug that "gfunc_<lambda>" isn't a valid C identifier :-)
Modified: pypy/trunk/src/pypy/translator/genc.py
==============================================================================
--- pypy/trunk/src/pypy/translator/genc.py (original)
+++ pypy/trunk/src/pypy/translator/genc.py Sat Nov 27 23:48:57 2004
@@ -93,6 +93,7 @@
return name
def uniquename(self, basename):
+ basename = basename.translate(C_IDENTIFIER)
n = self.seennames.get(basename, 0)
self.seennames[basename] = n+1
if n == 0:
@@ -145,22 +146,13 @@
name = 'gfloat_%s' % value
name = (name.replace('-', 'minus')
.replace('.', 'dot'))
- chrs = [c for c in name if ('a' <= c <='z' or
- 'A' <= c <='Z' or
- '0' <= c <='9' or
- '_' == c )]
- name = ''.join(chrs)
name = self.uniquename(name)
self.initcode.append('INITCHK(%s = '
'PyFloat_FromDouble(%r))' % (name, value))
return name
def nameof_str(self, value):
- chrs = [c for c in value[:32] if ('a' <= c <='z' or
- 'A' <= c <='Z' or
- '0' <= c <='9' or
- '_' == c )]
- name = self.uniquename('gstr_' + ''.join(chrs))
+ name = self.uniquename('gstr_' + value[:32])
if [c for c in value if c<' ' or c>'~' or c=='"' or c=='\\']:
# non-printable string
s = 'chr_%s' % name
@@ -837,3 +829,10 @@
return type.replace('@', name)
else:
return ('%s %s' % (type, name)).rstrip()
+
+# a translation table suitable for str.translate() to remove
+# non-C characters from an identifier
+C_IDENTIFIER = ''.join([(('0' <= chr(i) <= '9' or
+ 'a' <= chr(i) <= 'z' or
+ 'A' <= chr(i) <= 'Z') and chr(i) or '_')
+ for i in range(256)])
More information about the Pypy-commit
mailing list