+ /* The function returns the size of all parameters pushed onto the stack.
+ * However, if there are parameters missing (which is an error and was
+ * flagged by the compiler) AND a stack frame was preallocated above,
+ * we would loose track of the stackpointer and generate an internal error
+ * later. So we correct the value by the parameters that should have been
+ * pushed to avoid an internal compiler error. Since an error was
+ * generated before, no code will be output anyway.
+ */
+ return ParamSize + FrameSize;
+}
+
+
+
+static void CallFunction (struct expent* lval)
+/* Perform a function call. Called from hie11, this routine will
+ * either call the named function, or the function pointer in a/x.
+ */
+{
+ FuncDesc* Func; /* Function descriptor */
+ unsigned ParamSize; /* Number of parameter bytes */
+ CodeMark Mark;
+
+
+ /* Get a pointer to the function descriptor from the type string */
+ Func = GetFuncDesc (lval->e_tptr);
+
+ /* Initialize vars to keep gcc silent */
+ Mark = 0;
+
+ /* Check if this is a function pointer. If so, save it. If not, check for
+ * special known library functions that may be inlined.
+ */
+ if (lval->e_flags & E_MEXPR) {
+ /* Function pointer is in primary register, save it */
+ Mark = GetCodePos ();
+ g_save (CF_PTR);
+ } else if (InlineStdFuncs && IsStdFunc ((const char*) lval->e_name)) {
+ /* Inline this function */
+ HandleStdFunc (lval);
+ return;
+ }
+
+ /* Parse the parameter list */
+ ParamSize = FunctionParamList (Func);
+
+ /* We need the closing bracket here */
+ ConsumeRParen ();
+