forked from GitHub/gf-core
added Expr_subclass_new
This commit is contained in:
@@ -193,6 +193,12 @@ Expr_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
Expr_subclass_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
|
||||||
|
{
|
||||||
|
return subtype->tp_alloc(subtype, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
Expr_str(ExprObject *self)
|
Expr_str(ExprObject *self)
|
||||||
{
|
{
|
||||||
@@ -202,6 +208,28 @@ Expr_str(ExprObject *self)
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ExprObject*
|
||||||
|
Expr_call(ExprObject* self, PyObject* args, PyObject* kw)
|
||||||
|
{
|
||||||
|
ExprObject *res = self; Py_INCREF(self);
|
||||||
|
|
||||||
|
size_t n_args = PyTuple_Size(args);
|
||||||
|
for (size_t i = 0; i < n_args; i++) {
|
||||||
|
PyObject* arg = PyTuple_GetItem(args, i);
|
||||||
|
if (arg->ob_type != &pgf_ExprType) {
|
||||||
|
PyErr_SetString(PyExc_TypeError, "the arguments must be expressions");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ExprAppObject *pyexpr = (ExprAppObject *)pgf_ExprAppType.tp_alloc(&pgf_ExprAppType, 0);
|
||||||
|
pyexpr->fun = res;
|
||||||
|
pyexpr->arg = (ExprObject *)arg; Py_INCREF(arg);
|
||||||
|
res = (ExprObject *) pyexpr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
Expr_reduce_ex(ExprObject* self, PyObject *args)
|
Expr_reduce_ex(ExprObject* self, PyObject *args)
|
||||||
{
|
{
|
||||||
@@ -360,7 +388,7 @@ PyTypeObject pgf_ExprAbsType = {
|
|||||||
0, /*tp_as_sequence*/
|
0, /*tp_as_sequence*/
|
||||||
0, /*tp_as_mapping*/
|
0, /*tp_as_mapping*/
|
||||||
0, /*tp_hash */
|
0, /*tp_hash */
|
||||||
0, //(ternaryfunc) Expr_call, /*tp_call*/
|
(ternaryfunc) Expr_call, /*tp_call*/
|
||||||
0, /*tp_str*/
|
0, /*tp_str*/
|
||||||
0, /*tp_getattro*/
|
0, /*tp_getattro*/
|
||||||
0, /*tp_setattro*/
|
0, /*tp_setattro*/
|
||||||
@@ -383,7 +411,7 @@ PyTypeObject pgf_ExprAbsType = {
|
|||||||
0, /*tp_dictoffset */
|
0, /*tp_dictoffset */
|
||||||
(initproc) ExprAbs_init, /*tp_init */
|
(initproc) ExprAbs_init, /*tp_init */
|
||||||
0, /*tp_alloc */
|
0, /*tp_alloc */
|
||||||
0, /*tp_new */
|
Expr_subclass_new, /*tp_new */
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -455,7 +483,7 @@ PyTypeObject pgf_ExprAppType = {
|
|||||||
0, /*tp_as_sequence*/
|
0, /*tp_as_sequence*/
|
||||||
0, /*tp_as_mapping*/
|
0, /*tp_as_mapping*/
|
||||||
0, /*tp_hash */
|
0, /*tp_hash */
|
||||||
0, //(ternaryfunc) Expr_call, /*tp_call*/
|
(ternaryfunc) Expr_call, /*tp_call*/
|
||||||
0, /*tp_str*/
|
0, /*tp_str*/
|
||||||
0, /*tp_getattro*/
|
0, /*tp_getattro*/
|
||||||
0, /*tp_setattro*/
|
0, /*tp_setattro*/
|
||||||
@@ -478,7 +506,7 @@ PyTypeObject pgf_ExprAppType = {
|
|||||||
0, /*tp_dictoffset */
|
0, /*tp_dictoffset */
|
||||||
(initproc) ExprApp_init, /*tp_init */
|
(initproc) ExprApp_init, /*tp_init */
|
||||||
0, /*tp_alloc */
|
0, /*tp_alloc */
|
||||||
0, /*tp_new */
|
Expr_subclass_new, /*tp_new */
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -588,7 +616,7 @@ PyTypeObject pgf_ExprLitType = {
|
|||||||
0, /*tp_dictoffset */
|
0, /*tp_dictoffset */
|
||||||
(initproc) ExprLit_init, /*tp_init */
|
(initproc) ExprLit_init, /*tp_init */
|
||||||
0, /*tp_alloc */
|
0, /*tp_alloc */
|
||||||
0, /*tp_new */
|
Expr_subclass_new, /*tp_new */
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -664,7 +692,7 @@ PyTypeObject pgf_ExprMetaType = {
|
|||||||
0, /*tp_as_sequence*/
|
0, /*tp_as_sequence*/
|
||||||
0, /*tp_as_mapping*/
|
0, /*tp_as_mapping*/
|
||||||
0, /*tp_hash */
|
0, /*tp_hash */
|
||||||
0, //(ternaryfunc) Expr_call, /*tp_call*/
|
(ternaryfunc) Expr_call, /*tp_call*/
|
||||||
0, /*tp_str*/
|
0, /*tp_str*/
|
||||||
0, /*tp_getattro*/
|
0, /*tp_getattro*/
|
||||||
0, /*tp_setattro*/
|
0, /*tp_setattro*/
|
||||||
@@ -687,7 +715,7 @@ PyTypeObject pgf_ExprMetaType = {
|
|||||||
0, /*tp_dictoffset */
|
0, /*tp_dictoffset */
|
||||||
(initproc) ExprMeta_init, /*tp_init */
|
(initproc) ExprMeta_init, /*tp_init */
|
||||||
0, /*tp_alloc */
|
0, /*tp_alloc */
|
||||||
0, /*tp_new */
|
Expr_subclass_new, /*tp_new */
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -753,7 +781,7 @@ PyTypeObject pgf_ExprFunType = {
|
|||||||
0, /*tp_as_sequence*/
|
0, /*tp_as_sequence*/
|
||||||
0, /*tp_as_mapping*/
|
0, /*tp_as_mapping*/
|
||||||
0, /*tp_hash */
|
0, /*tp_hash */
|
||||||
0, //(ternaryfunc) Expr_call, /*tp_call*/
|
(ternaryfunc) Expr_call, /*tp_call*/
|
||||||
0, /*tp_str*/
|
0, /*tp_str*/
|
||||||
0, /*tp_getattro*/
|
0, /*tp_getattro*/
|
||||||
0, /*tp_setattro*/
|
0, /*tp_setattro*/
|
||||||
@@ -776,7 +804,7 @@ PyTypeObject pgf_ExprFunType = {
|
|||||||
0, /*tp_dictoffset */
|
0, /*tp_dictoffset */
|
||||||
(initproc) ExprFun_init, /*tp_init */
|
(initproc) ExprFun_init, /*tp_init */
|
||||||
0, /*tp_alloc */
|
0, /*tp_alloc */
|
||||||
0, /*tp_new */
|
Expr_subclass_new, /*tp_new */
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -852,7 +880,7 @@ PyTypeObject pgf_ExprVarType = {
|
|||||||
0, /*tp_as_sequence*/
|
0, /*tp_as_sequence*/
|
||||||
0, /*tp_as_mapping*/
|
0, /*tp_as_mapping*/
|
||||||
0, /*tp_hash */
|
0, /*tp_hash */
|
||||||
0, //(ternaryfunc) Expr_call, /*tp_call*/
|
(ternaryfunc) Expr_call, /*tp_call*/
|
||||||
0, /*tp_str*/
|
0, /*tp_str*/
|
||||||
0, /*tp_getattro*/
|
0, /*tp_getattro*/
|
||||||
0, /*tp_setattro*/
|
0, /*tp_setattro*/
|
||||||
@@ -875,7 +903,7 @@ PyTypeObject pgf_ExprVarType = {
|
|||||||
0, /*tp_dictoffset */
|
0, /*tp_dictoffset */
|
||||||
(initproc) ExprVar_init, /*tp_init */
|
(initproc) ExprVar_init, /*tp_init */
|
||||||
0, /*tp_alloc */
|
0, /*tp_alloc */
|
||||||
0, /*tp_new */
|
Expr_subclass_new, /*tp_new */
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -947,7 +975,7 @@ PyTypeObject pgf_ExprTypedType = {
|
|||||||
0, /*tp_as_sequence*/
|
0, /*tp_as_sequence*/
|
||||||
0, /*tp_as_mapping*/
|
0, /*tp_as_mapping*/
|
||||||
0, /*tp_hash */
|
0, /*tp_hash */
|
||||||
0, //(ternaryfunc) Expr_call, /*tp_call*/
|
(ternaryfunc) Expr_call, /*tp_call*/
|
||||||
0, /*tp_str*/
|
0, /*tp_str*/
|
||||||
0, /*tp_getattro*/
|
0, /*tp_getattro*/
|
||||||
0, /*tp_setattro*/
|
0, /*tp_setattro*/
|
||||||
@@ -968,9 +996,9 @@ PyTypeObject pgf_ExprTypedType = {
|
|||||||
0, /*tp_descr_get */
|
0, /*tp_descr_get */
|
||||||
0, /*tp_descr_set */
|
0, /*tp_descr_set */
|
||||||
0, /*tp_dictoffset */
|
0, /*tp_dictoffset */
|
||||||
(initproc) ExprTyped_init, /*tp_init */
|
(initproc) ExprTyped_init, /*tp_init */
|
||||||
0, /*tp_alloc */
|
0, /*tp_alloc */
|
||||||
0, /*tp_new */
|
Expr_subclass_new, /*tp_new */
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -1059,5 +1087,5 @@ PyTypeObject pgf_ExprImplArgType = {
|
|||||||
0, /*tp_dictoffset */
|
0, /*tp_dictoffset */
|
||||||
(initproc) ExprImplArg_init, /*tp_init */
|
(initproc) ExprImplArg_init, /*tp_init */
|
||||||
0, /*tp_alloc */
|
0, /*tp_alloc */
|
||||||
0, /*tp_new */
|
Expr_subclass_new, /*tp_new */
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user