[pypy-svn] r47179 - pypy/dist/pypy/module/readline

fijal at codespeak.net fijal at codespeak.net
Fri Oct 5 11:10:53 CEST 2007


Author: fijal
Date: Fri Oct  5 11:10:52 2007
New Revision: 47179

Modified:
   pypy/dist/pypy/module/readline/c_readline.py
   pypy/dist/pypy/module/readline/interp_readline.py
Log:
Move readline from rctypes to rffi


Modified: pypy/dist/pypy/module/readline/c_readline.py
==============================================================================
--- pypy/dist/pypy/module/readline/c_readline.py	(original)
+++ pypy/dist/pypy/module/readline/c_readline.py	Fri Oct  5 11:10:52 2007
@@ -1,42 +1,27 @@
-from ctypes import *
-from pypy.rpython.rctypes.tool.ctypes_platform import configure, Library
+from pypy.rpython.tool import rffi_platform as platform
+from pypy.rpython.lltypesystem import lltype, rffi
 from pypy.interpreter.error import OperationError
 from pypy.interpreter.gateway import ObjSpace, interp2app
 
-#------------------------------------------------------------
-# configuration for binding to external readline library 
-# through rctypes
-#
-class CConfig:
-    _header_ = ""
-    _includes_ = ["readline/readline.h", "readline/history.h"]
-    readline = Library('readline')
-
-cconfig = configure(CConfig)
-libreadline = cconfig['readline']
+includes = ["readline/readline.h", "readline/history.h"]
+libs = ['readline']
 
+def external(name, args, result):
+    return rffi.llexternal(name, args, result, includes=includes,
+                           libraries=libs)
 
 # get a binding to  c library functions and define their args and return types
 # char *readline(char *)
-c_readline = libreadline.readline
-c_readline.argtypes = [c_char_p]
-c_readline.restype = c_char_p
+c_readline = external('readline', [rffi.CCHARP], rffi.CCHARP)
 
 # void rl_initiliaze(void)
-c_rl_initialize = libreadline.rl_initialize
-c_rl_initialize.argtypes = []
-c_rl_initialize.restype = None
+c_rl_initialize = external('rl_initialize', [], lltype.Void)
 
 # void using_history(void)
-c_using_history = libreadline.using_history
-c_using_history.argtypes = []
-c_using_history.restype = None
+c_using_history = external('using_history', [], lltype.Void)
 
 # void add_history(const char *)
-c_add_history = libreadline.add_history
-c_add_history.argtypes = [c_char_p]
-c_add_history.restype = None
-
+c_add_history = external('add_history', [rffi.CCHARP], lltype.Void)
 
 #------------------------------------------------------------
 # special initialization of readline 
@@ -54,9 +39,10 @@
                   space.wrap(app_readline_func))
 
 def readline_func(space, prompt):
-    res = c_readline(prompt)
-    if res is None:
+    ll_res = c_readline(prompt)
+    if not ll_res:
         raise OperationError(space.w_EOFError, space.w_None)
+    res = rffi.charp2str(ll_res)
     if res and res != readlinestate.lastline:
         readlinestate.lastline = res
         c_add_history(res)

Modified: pypy/dist/pypy/module/readline/interp_readline.py
==============================================================================
--- pypy/dist/pypy/module/readline/interp_readline.py	(original)
+++ pypy/dist/pypy/module/readline/interp_readline.py	Fri Oct  5 11:10:52 2007
@@ -3,13 +3,14 @@
 
 from pypy.interpreter.baseobjspace import ObjSpace
 
-from pypy.module.readline import c_readline 
+from pypy.module.readline import c_readline
+from pypy.rpython.lltypesystem import rffi
 
 #------------------------------------------------------------
 # exported API  (see interpleveldefs in __init__.py) 
 #
 def readline(space, prompt):
-    return space.wrap(c_readline.c_readline(prompt))
+    return space.wrap(rffi.charp2str(c_readline.c_readline(prompt)))
 readline.unwrap_spec = [ObjSpace, str]
 
 def setcompleter(space, w_callback):



More information about the Pypy-commit mailing list