Hello,
I've got the pypy compiler working! see the function at the bottom. But now
i'm having some
problems when importing the module and testing some of its functions.
here's the commands i typed to make the module:
pypy/tool/pyrexc myModule.pyx
gcc -c -fPIC -I/usr/include/python2.3/ myModule.c
gcc -shared myModule.o -o myModule.so
when i import the module and try isFloatingPoint(None, '0.001') it returns the
error below, looks
like it can not find 'contains' where does contain come from, should i have
linked to another
library when making the .so file?
>>> mod.isFloatingPoint(None, '0.001')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "b11a3ad330bf84c9dabf6b4e40ba4baa.pyx", line 806, in
b11a3ad330bf84c9dabf6b4e40ba4baa.isFloatingPoint
return isFloatingPoint__2dbc1614(self_3077, s_3078)
File "b11a3ad330bf84c9dabf6b4e40ba4baa.pyx", line 833, in
b11a3ad330bf84c9dabf6b4e40ba4baa.isFloatingPoint__2dbc1614
v3119 = contains('0123456789.', char_3145)
NameError: contains
def isFloatingPoint(self, s):
r = True
chars = '0123456789.'
for char in s:
if char not in chars:
return False
return r
def isFloatingPoint(self_3077, s_3078):
return isFloatingPoint__2dbc1614(self_3077, s_3078)
cdef object isFloatingPoint__2dbc1614(object self_3077, object s_3078):
# untyped variables: char_3109 char_3113 char_3115 char_3124 char_3127
char_3143 char_3145
char_3148 char_3150 char_3155 char_3157 char_3162 etype_3080 evalue_3081 s_3087
s_3108 s_3112
s_3123 s_3126 s_3139 s_3142 s_3147 s_3154 s_3161 s_3167 self_3086 self_3107
self_3111 self_3122
self_3125 self_3138 self_3141 self_3146 self_3153 self_3160 self_3166 v3079
v3082 v3088 v3110
v3114 v3119 v3120 v3140 v3144 v3149 v3151 v3152 v3156 v3158 v3159 v3163 v3164
v3165 v3168 v3169
try:
v3082 = iter(s_3078)
except TypeError, last_exc_value:
last_exception = last_exc_value.__class__
self_3166, s_3167, v3168, v3169 = self_3077, s_3078, last_exception,
last_exc_value
etype_3080, evalue_3081 = TypeError, v3169
raise etype_3080, evalue_3081
else:
self_3138, s_3139, v3140 = self_3077, s_3078, v3082
self_3086, s_3087, v3088 = self_3138, s_3139, v3140
self_3111, s_3112, v3114 = self_3086, s_3087, v3088
cinline "Label5:"
try:
char_3115 = v3114.next()
except StopIteration, last_exc_value:
last_exception = last_exc_value.__class__
self_3160, s_3161, char_3162, v3163, v3164, v3165 = self_3111, s_3112,
char_3113, v3114,
last_exception, last_exc_value
self_3122, s_3123, char_3124 = self_3160, s_3161, char_3162
self_3125, s_3126, char_3127 = self_3122, s_3123, char_3124
v3079 = 1
cinline "Label9:"
return v3079
else:
self_3141, s_3142, char_3143, v3144, char_3145 = self_3111, s_3112,
char_3113, v3114,
char_3115
v3119 = contains('0123456789.', char_3145)
v3120 = not not v3119
if v3120 == 1:
self_3153, s_3154, char_3155, v3156, char_3157, v3158, v3159 =
self_3141, s_3142,
char_3143, v3144, char_3145, v3119, v3120
self_3107, s_3108, char_3109, v3110 = self_3153, s_3154, char_3157,
v3156
self_3111, s_3112, char_3113, v3114 = self_3107, s_3108, char_3109,
v3110
cinline "goto Label5;"
else: # v3120 == 0
self_3146, s_3147, char_3148, v3149, char_3150, v3151, v3152 =
self_3141, s_3142,
char_3143, v3144, char_3145, v3119, v3120
v3079 = 0
cinline "goto Label9;"
def pypyCompile(txt):
import md5
from pypy.translator.translator import Translator
txt = txt.replace('print ', '#print ')
hashed = md5.new( txt ).hexdigest()
# before compiling, check if there is a cached .so file
if os.path.exists('%s.so'%hashed):
cmd = 'import %s as module' %hashed
exec cmd
return module
mod = {}
code = compile(txt, 'pypy translator', 'exec')
exec code in mod
pyx = ""
for a in mod:
func = mod[a]
#if func and func != '__builtins__':
if type(func) == types.FunctionType:
print 'converting python to pyrex for function', func
t = Translator(func)
d = t.pyrex()
if 0: #for debugging
name = 'tmp/%s.pyx' %a
f = open(name, 'wb')
f.write(d)
f.close()
os.system('pypy/tool/pyrexc %s' %name)
if os.path.exists(name):
os.system('gcc -c -fPIC
-I/usr/include/python2.3/ %s.c' %name)
else: raise 'stop'
pyx += d + '\n'
url = hashed + '.pyx'
f = open(url, 'wb')
f.write(pyx)
f.close()
print 'saved .pyx file', url
os.system('pypy/tool/pyrexc %s' %url)
if os.path.exists(url):
print 'pyrex translated to c'
os.system('gcc -c -fPIC -I/usr/include/python2.3/ %s.c' %hashed)
print 'compiled c file to o'
os.system('gcc -shared %s.o -o %s.so' %(hashed,hashed))
print 'compiled o file to so file'
else: raise 'stop'
cmd = 'import %s as module' %hashed
exec cmd
return module
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
_______________________________________________
[email protected]
http://codespeak.net/mailman/listinfo/pypy-dev