diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/pychrysalide/analysis/scan/constants.c | 27 | ||||
-rw-r--r-- | plugins/pychrysalide/analysis/scan/constants.h | 4 | ||||
-rw-r--r-- | plugins/pychrysalide/analysis/scan/expr.c | 56 |
3 files changed, 64 insertions, 23 deletions
diff --git a/plugins/pychrysalide/analysis/scan/constants.c b/plugins/pychrysalide/analysis/scan/constants.c index 87f3ae8..7ada8d3 100644 --- a/plugins/pychrysalide/analysis/scan/constants.c +++ b/plugins/pychrysalide/analysis/scan/constants.c @@ -51,13 +51,10 @@ bool define_expression_value_type_constants(PyTypeObject *type) values = PyDict_New(); - result = add_const_to_group(values, "BOOLEAN", EVT_BOOLEAN); - if (result) result = add_const_to_group(values, "INTEGER", EVT_INTEGER); - if (result) result = add_const_to_group(values, "STRING", EVT_STRING); - if (result) result = add_const_to_group(values, "REG_EXPR", EVT_REG_EXPR); - if (result) result = add_const_to_group(values, "COUNT", EVT_COUNT); - if (result) result = add_const_to_group(values, "PENDING", EVT_PENDING); - if (result) result = add_const_to_group(values, "UNRESOLVABLE", EVT_UNRESOLVABLE); + result = add_const_to_group(values, "SRS_PENDING", SRS_PENDING); + if (result) result = add_const_to_group(values, "REDUCED", SRS_REDUCED); + if (result) result = add_const_to_group(values, "WAIT_FOR_SCAN", SRS_WAIT_FOR_SCAN); + if (result) result = add_const_to_group(values, "UNRESOLVABLE", SRS_UNRESOLVABLE); if (!result) { @@ -65,8 +62,8 @@ bool define_expression_value_type_constants(PyTypeObject *type) goto exit; } - result = attach_constants_group_to_type(type, false, "ExprValueType", values, - "Natural type equivalent to a given scan expression."); + result = attach_constants_group_to_type(type, false, "ScanReductionState", values, + "State of a scanexpression during the reduction process."); exit: @@ -80,7 +77,7 @@ bool define_expression_value_type_constants(PyTypeObject *type) * Paramètres : arg = argument quelconque à tenter de convertir. * * dst = destination des valeurs récupérées en cas de succès. * * * -* Description : Tente de convertir en constante ExprValueType. * +* Description : Tente de convertir en constante ScanReductionState. * * * * Retour : Bilan de l'opération, voire indications supplémentaires. * * * @@ -88,7 +85,7 @@ bool define_expression_value_type_constants(PyTypeObject *type) * * ******************************************************************************/ -int convert_to_expression_value_type(PyObject *arg, void *dst) +int convert_to_scan_reduction_state(PyObject *arg, void *dst) { int result; /* Bilan à retourner */ unsigned long value; /* Valeur transcrite */ @@ -103,20 +100,20 @@ int convert_to_expression_value_type(PyObject *arg, void *dst) break; case 0: - PyErr_SetString(PyExc_TypeError, "unable to convert the provided argument to ExprValueType"); + PyErr_SetString(PyExc_TypeError, "unable to convert the provided argument to ScanReductionState"); break; case 1: value = PyLong_AsUnsignedLong(arg); - if (value > EVT_COUNT) + if (value > SRS_UNRESOLVABLE) { - PyErr_SetString(PyExc_TypeError, "invalid value for ExprValueType"); + PyErr_SetString(PyExc_TypeError, "invalid value for ScanReductionState"); result = 0; } else - *((ExprValueType *)dst) = value; + *((ScanReductionState *)dst) = value; break; diff --git a/plugins/pychrysalide/analysis/scan/constants.h b/plugins/pychrysalide/analysis/scan/constants.h index 65eb7bc..aa6c571 100644 --- a/plugins/pychrysalide/analysis/scan/constants.h +++ b/plugins/pychrysalide/analysis/scan/constants.h @@ -34,8 +34,8 @@ /* Définit les constantes relatives aux expressions de scan. */ bool define_expression_value_type_constants(PyTypeObject *); -/* Tente de convertir en constante ExprValueType. */ -int convert_to_expression_value_type(PyObject *, void *); +/* Tente de convertir en constante ScanReductionState. */ +int convert_to_scan_reduction_state(PyObject *, void *); diff --git a/plugins/pychrysalide/analysis/scan/expr.c b/plugins/pychrysalide/analysis/scan/expr.c index d1b5145..3622e9b 100644 --- a/plugins/pychrysalide/analysis/scan/expr.c +++ b/plugins/pychrysalide/analysis/scan/expr.c @@ -52,6 +52,9 @@ static int py_scan_expression_init(PyObject *, PyObject *, PyObject *); /* Réalise une comparaison entre objets selon un critère précis. */ static bool py_scan_expression_compare_rich_wrapper(const GScanExpression *, const GScanExpression *, RichCmpOperation, bool *); +/* Indique l'état de réduction d'une expression. */ +static PyObject *py_scan_expression_get_state(PyObject *, void *); + /****************************************************************************** @@ -90,11 +93,11 @@ static void py_scan_expression_init_gclass(GScanExpressionClass *class, gpointer static int py_scan_expression_init(PyObject *self, PyObject *args, PyObject *kwds) { - ExprValueType vtype; /* Type de valeur représentée */ + ScanReductionState state; /* Etat de réduction initial */ int ret; /* Bilan de lecture des args. */ GScanExpression *expr; /* Création GLib à transmettre */ - static char *kwlist[] = { "vtype", NULL }; + static char *kwlist[] = { "state", NULL }; #define SCAN_EXPRESSION_DOC \ "A ScanExpression is an abstract object which defines an expression"\ @@ -102,15 +105,16 @@ static int py_scan_expression_init(PyObject *self, PyObject *args, PyObject *kwd "\n" \ "Calls to the *__init__* constructor of this abstract object expect"\ " the following arguments as keyword parameters:\n" \ - "* *vtype*: type of the value carried by the expression, as a" \ - " pychrysalide.analysis.scan.ScanExpression.ExprValueType value." \ + "* *state*: initial state of reduction for the expression, as a" \ + " pychrysalide.analysis.scan.ScanExpression.ScanReductionState" \ + " value." \ "\n" \ "The following methods have to be defined for new classes:\n" \ "* pychrysalide.analysis.scan.ScanExpression._cmp_rich().\n" /* Récupération des paramètres */ - ret = PyArg_ParseTupleAndKeywords(args, kwds, "O&", kwlist, convert_to_expression_value_type, &vtype); + ret = PyArg_ParseTupleAndKeywords(args, kwds, "O&", kwlist, convert_to_scan_reduction_state, &state); if (!ret) return -1; /* Initialisation d'un objet GLib */ @@ -122,7 +126,7 @@ static int py_scan_expression_init(PyObject *self, PyObject *args, PyObject *kwd expr = G_SCAN_EXPRESSION(pygobject_get(self)); - if (!g_scan_expression_create(expr, vtype)) + if (!g_scan_expression_create(expr, state)) { PyErr_SetString(PyExc_ValueError, _("Unable to create scan expression.")); return -1; @@ -217,6 +221,45 @@ static bool py_scan_expression_compare_rich_wrapper(const GScanExpression *item, /****************************************************************************** * * +* Paramètres : self = objet Python concerné par l'appel. * +* closure = non utilisé ici. * +* * +* Description : Indique l'état de réduction d'une expression. * +* * +* Retour : Etat courant associé à l'expression. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_scan_expression_get_state(PyObject *self, void *closure) +{ + PyObject *result; /* Instance Python à retourner */ + GScanExpression *expr; /* Version GLib de l'opérande */ + ScanReductionState state; /* Etat courant de l'expression*/ + +#define SCAN_EXPRESSION_STATE_ATTRIB PYTHON_GET_DEF_FULL \ +( \ + state, py_scan_expression, \ + "Current state of the expression, relative to the reduction" \ + " process, as a" \ + " pychrysalide.analysis.scan.ScanExpression.ScanReductionState" \ + " value." \ +) + + expr = G_SCAN_EXPRESSION(pygobject_get(self)); + + state = g_scan_expression_get_state(expr); + + result = cast_with_constants_group_from_type(get_python_scan_expression_type(), "ScanReductionState", state); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : - * * * * Description : Fournit un accès à une définition de type à diffuser. * @@ -235,6 +278,7 @@ PyTypeObject *get_python_scan_expression_type(void) }; static PyGetSetDef py_scan_expression_getseters[] = { + SCAN_EXPRESSION_STATE_ATTRIB, { NULL } }; |