+ /* if this is a PARAM node then match left & right */
+ if (actParm->type == EX_OP && actParm->opval.op == PARAM)
+ {
+ actParm->decorated = 1;
+ return (processParms (func, defParm,
+ actParm->left, parmNumber, FALSE) ||
+ processParms (func, defParm ? defParm->next : NULL,
+ actParm->right, parmNumber, rightmost));
+ }
+ else if (defParm) /* not vararg */
+ {
+ /* If we have found a value node by following only right-hand links,
+ * then we know that there are no more values after us.
+ *
+ * Therefore, if there are more defined parameters, the caller didn't
+ * supply enough.
+ */
+ if (rightmost && defParm->next)
+ {
+ werror (E_TOO_FEW_PARMS);
+ return 1;
+ }
+ }
+
+ /* decorate parameter */
+ resultType = defParm ? getResultTypeFromType (defParm->etype) :
+ RESULT_TYPE_NONE;
+ actParm = decorateType (actParm, resultType);
+
+ if (IS_VOID(actParm->ftype))
+ {
+ werror (E_VOID_VALUE_USED);
+ return 1;
+ }