]> git.sur5r.net Git - cc65/commitdiff
Indirect fastcall functions with no parameters may be called as if it were
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 26 May 2002 11:08:17 +0000 (11:08 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 26 May 2002 11:08:17 +0000 (11:08 +0000)
cdecl functions, this generates better code.
Remove a small error that caused indirect non fastcall function to always be
handled as variadic, which meant a useless load of the Y register was added.

git-svn-id: svn://svn.cc65.org/cc65/trunk@1292 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/expr.c

index f39b2ce11b2af5cc25bbe2cbf3d7ba415a146636..2bf506bbf8733743ac8405c89915a0fae8a1e430 100644 (file)
@@ -726,8 +726,8 @@ static void FunctionCall (int k, ExprDesc* lval)
     IsFuncPtr = IsTypeFuncPtr (lval->Type);
     if (IsFuncPtr) {
 
-       /* Check wether it's a fastcall function */
-       IsFastCall = IsFastCallFunc (lval->Type + 1);
+       /* Check wether it's a fastcall function that has parameters */
+       IsFastCall = IsFastCallFunc (lval->Type + 1) && (Func->ParamCount > 0);
 
        /* Things may be difficult, depending on where the function pointer
         * resides. If the function pointer is an expression of some sort
@@ -797,7 +797,7 @@ static void FunctionCall (int k, ExprDesc* lval)
            }
 
            /* Call the function */
-           g_callind (TypeOf (lval->Type), ParamSize, PtrOffs);
+           g_callind (TypeOf (lval->Type+1), ParamSize, PtrOffs);
 
        } else {