summaryrefslogtreecommitdiff
path: root/Src/module.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/module.c')
-rw-r--r--Src/module.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/Src/module.c b/Src/module.c
index 4510d3037..c50e032b6 100644
--- a/Src/module.c
+++ b/Src/module.c
@@ -1894,7 +1894,31 @@ addparamdef(Paramdef d)
pm->level = 0;
pm->u.data = d->var;
- pm->gsu.i = (GsuInteger) d->gsu;
+ if (d->gsu)
+ pm->gsu.i = (GsuInteger) d->gsu;
+ else {
+ /*
+ * If no get/set/unset class, use the appropriate
+ * variable type.
+ */
+ switch (PM_TYPE(pm->flags)) {
+ case PM_SCALAR:
+ pm->gsu.s = &varscalar_gsu;
+ break;
+
+ case PM_INTEGER:
+ pm->gsu.i = &varinteger_gsu;
+ break;
+
+ case PM_ARRAY:
+ pm->gsu.a = &vararray_gsu;
+ break;
+
+ default:
+ unsetparam_pm(pm, 0, 1);
+ return 1;
+ }
+ }
return 0;
}