1
from pypy.rpython.lltypesystem import lltype
2
from pypy.rpython.ootypesystem import ootype
3
from pypy.rpython import extfunctable
4
from pypy.rpython.lltypesystem.lltype import \
5
GcStruct, Signed, Array, Char, Ptr, malloc, GcArray
6
from pypy.rpython.rlist import ll_append
7
from pypy.rpython.lltypesystem.rlist import ll_newlist, ListRepr,\
9
from pypy.rpython.lltypesystem.rstr import string_repr
10
from pypy.rpython.lltypesystem.rdict import ll_newdict, DictRepr, dum_items,\
11
ll_kvi, dum_keys, ll_dict_getitem, ll_dict_setitem
12
from pypy.rpython.lltypesystem.rstr import StringRepr
13
from pypy.rpython.lltypesystem.rtuple import TupleRepr
14
from pypy.annotation.dictdef import DictKey, DictValue
15
from pypy.annotation.model import SomeString
18
# utility conversion functions
23
from pypy.rpython.lltypesystem.rstr import STR, mallocstr
25
return lltype.nullptr(STR)
27
for i in range(len(s)):
30
to_rstr = staticmethod(to_rstr)
33
if not rs: # null pointer
36
return ''.join([rs.chars[i] for i in range(len(rs.chars))])
37
from_rstr = staticmethod(from_rstr)
39
def from_rstr_nonnull(rs):
41
return ''.join([rs.chars[i] for i in range(len(rs.chars))])
42
from_rstr_nonnull = staticmethod(from_rstr_nonnull)
48
return ootype.oostring(s, -1)
49
to_rstr = staticmethod(to_rstr)
52
if not rs: # null pointer
55
return "".join([rs.ll_stritem_nonneg(i) for i in range(rs.ll_strlen())])
56
from_rstr = staticmethod(from_rstr)
58
def from_rstr_nonnull(rs):
60
return "".join([rs.ll_stritem_nonneg(i) for i in range(rs.ll_strlen())])
61
from_rstr_nonnull = staticmethod(from_rstr_nonnull)
64
def ll_strcpy(dst_s, src_s, n):
65
dstchars = dst_s.chars
66
srcchars = src_s.chars
69
dstchars[i] = srcchars[i]
72
def _ll_strfill(dst_s, srcchars, n):
73
dstchars = dst_s.chars
76
dstchars[i] = srcchars[i]
79
def init_opaque_object(opaqueptr, value):
81
opaqueptr._obj.externalobj = value
82
init_opaque_object._annspecialcase_ = "override:init_opaque_object"
84
def from_opaque_object(opaqueptr):
86
return opaqueptr._obj.externalobj
87
from_opaque_object._annspecialcase_ = "override:from_opaque_object"
89
def to_opaque_object(value):
91
exttypeinfo = extfunctable.typetable[value.__class__]
92
return lltype.opaqueptr(exttypeinfo.get_lltype(), 'opaque',
94
to_opaque_object._annspecialcase_ = "override:to_opaque_object"