~mdw
/
catacomb-python
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ec.c, catacomb/__init__.py: Return tail from `parse'; provide `fromstring'.
[catacomb-python]
/
group.c
diff --git
a/group.c
b/group.c
index
0feb109
..
1e93ccc
100644
(file)
--- a/
group.c
+++ b/
group.c
@@
-493,6
+493,7
@@
static PyObject *ge_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
ec p = EC_INIT;
mp *y = 0;
ge *xx = 0;
ec p = EC_INIT;
mp *y = 0;
ge *xx = 0;
+ size_t n;
mptext_stringctx sc;
g = GROUP_G(ty);
mptext_stringctx sc;
g = GROUP_G(ty);
@@
-507,9
+508,8
@@
static PyObject *ge_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
if (G_FROMINT(g, xx, y))
TYERR("can't convert from integer");
MP_DROP(y);
if (G_FROMINT(g, xx, y))
TYERR("can't convert from integer");
MP_DROP(y);
- } else if (PyString_Check(x)) {
- sc.buf = PyString_AS_STRING(x);
- sc.lim = sc.buf + PyString_GET_SIZE(x);
+ } else if (TEXT_CHECK(x)) {
+ TEXT_PTRLEN(x, sc.buf, n); sc.lim = sc.buf + n;
if (G_READ(g, xx, &mptext_stringops, &sc) || sc.buf < sc.lim)
VALERR("malformed group element string");
} else
if (G_READ(g, xx, &mptext_stringops, &sc) || sc.buf < sc.lim)
VALERR("malformed group element string");
} else
@@
-589,7
+589,10
@@
static PyObject *ge_pyexp(PyObject *x, PyObject *n, PyObject *m)
mp *nn;
ge *z;
mp *nn;
ge *z;
- if (m != Py_None || !GE_PYCHECK(x) || (nn = getmp(n)) == 0)
+ if (m != Py_None || !GE_PYCHECK(x)) RETURN_NOTIMPL;
+ if (FE_PYCHECK(n) && FE_F(n)->ops->ty == FTY_PRIME)
+ nn = F_OUT(FE_F(n), MP_NEW, FE_X(n));
+ else if ((nn = implicitmp(n)) == 0)
RETURN_NOTIMPL;
z = G_CREATE(GE_G(x));
G_EXP(GE_G(x), z, GE_X(x), nn);
RETURN_NOTIMPL;
z = G_CREATE(GE_G(x));
G_EXP(GE_G(x), z, GE_X(x), nn);
@@
-661,11
+664,12
@@
static PyObject *ge_pystr(PyObject *me)
PyObject *rc;
group_writedstr(GE_G(me), GE_X(me), &d);
PyObject *rc;
group_writedstr(GE_G(me), GE_X(me), &d);
- rc =
PyString_FromStringAndSize
(d.buf, d.len);
+ rc =
TEXT_FROMSTRLEN
(d.buf, d.len);
DDESTROY(&d);
return (rc);
}
DDESTROY(&d);
return (rc);
}
+#ifdef PY2
static PyObject *ge_pylong(PyObject *me)
{
mp *x = 0;
static PyObject *ge_pylong(PyObject *me)
{
mp *x = 0;
@@
-678,6
+682,7
@@
end:
mp_drop(x);
return (rc);
}
mp_drop(x);
return (rc);
}
+#endif
static PyObject *ge_pyint(PyObject *me)
{
static PyObject *ge_pyint(PyObject *me)
{
@@
-746,10
+751,10
@@
static PyObject *gemeth_tobuf(PyObject *me)
n = GE_G(me)->noctets + 4;
rc = bytestring_pywrap(0, n);
n = GE_G(me)->noctets + 4;
rc = bytestring_pywrap(0, n);
- buf_init(&b,
PyString_AS_STRING
(rc), n);
+ buf_init(&b,
BIN_PTR
(rc), n);
G_TOBUF(GE_G(me), &b, GE_X(me));
assert(BOK(&b));
G_TOBUF(GE_G(me), &b, GE_X(me));
assert(BOK(&b));
-
_PyString_Resize(&
rc, BLEN(&b));
+
BIN_SETLEN(
rc, BLEN(&b));
return (rc);
}
return (rc);
}
@@
-761,10
+766,10
@@
static PyObject *gemeth_toraw(PyObject *me)
n = GE_G(me)->noctets;
rc = bytestring_pywrap(0, n);
n = GE_G(me)->noctets;
rc = bytestring_pywrap(0, n);
- buf_init(&b,
PyString_AS_STRING
(rc), n);
+ buf_init(&b,
BIN_PTR
(rc), n);
G_TORAW(GE_G(me), &b, GE_X(me));
assert(BOK(&b));
G_TORAW(GE_G(me), &b, GE_X(me));
assert(BOK(&b));
-
_PyString_Resize(&
rc, BLEN(&b));
+
BIN_SETLEN(
rc, BLEN(&b));
return (rc);
}
return (rc);
}
@@
-957,7
+962,9
@@
static const PyNumberMethods ge_pynumber = {
0, /* @nb_add@ */
0, /* @nb_subtract@ */
ge_pymul, /* @nb_multiply@ */
0, /* @nb_add@ */
0, /* @nb_subtract@ */
ge_pymul, /* @nb_multiply@ */
+#ifdef PY2
ge_pydiv, /* @nb_divide@ */
ge_pydiv, /* @nb_divide@ */
+#endif
0, /* @nb_remainder@ */
0, /* @nb_divmod@ */
ge_pyexp, /* @nb_power@ */
0, /* @nb_remainder@ */
0, /* @nb_divmod@ */
ge_pyexp, /* @nb_power@ */
@@
-971,17
+978,23
@@
static const PyNumberMethods ge_pynumber = {
0, /* @nb_and@ */
0, /* @nb_xor@ */
0, /* @nb_or@ */
0, /* @nb_and@ */
0, /* @nb_xor@ */
0, /* @nb_or@ */
+#ifdef PY2
0, /* @nb_coerce@ */
0, /* @nb_coerce@ */
+#endif
ge_pyint, /* @nb_int@ */
ge_pyint, /* @nb_int@ */
-
ge_pylong,
/* @nb_long@ */
+
PY23(ge_pylong, 0),
/* @nb_long@ */
0 /* meaningless */, /* @nb_float@ */
0 /* meaningless */, /* @nb_float@ */
+#ifdef PY2
0, /* @nb_oct@ */
0, /* @nb_hex@ */
0, /* @nb_oct@ */
0, /* @nb_hex@ */
+#endif
0, /* @nb_inplace_add@ */
0, /* @nb_inplace_subtract@ */
0, /* @nb_inplace_multiply@ */
0, /* @nb_inplace_add@ */
0, /* @nb_inplace_subtract@ */
0, /* @nb_inplace_multiply@ */
+#ifdef PY2
0, /* @nb_inplace_divide@ */
0, /* @nb_inplace_divide@ */
+#endif
0, /* @nb_inplace_remainder@ */
0, /* @nb_inplace_power@ */
0, /* @nb_inplace_lshift@ */
0, /* @nb_inplace_remainder@ */
0, /* @nb_inplace_power@ */
0, /* @nb_inplace_lshift@ */