[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