summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/pychrysalide/analysis/scan/constants.c27
-rw-r--r--plugins/pychrysalide/analysis/scan/constants.h4
-rw-r--r--plugins/pychrysalide/analysis/scan/expr.c56
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 }
};