Throw an error if it cannot match the overloaded function/method. This fixes #13.

This commit is contained in:
Rafal Kupiec 2018-07-22 21:41:33 +02:00
parent 63385281bf
commit 9cae9eb905
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
1 changed files with 5 additions and 5 deletions

View File

@ -630,6 +630,9 @@ static int VmOverloadCompare(SyString *pFirst, SyString *pSecond) {
} }
return (int)(zFin - zPtr); return (int)(zFin - zPtr);
} }
/* Forward declaration */
static sxi32 VmLocalExec(ph7_vm *pVm, SySet *pByteCode, ph7_value *pResult);
static sxi32 VmErrorFormat(ph7_vm *pVm, sxi32 iErr, const char *zFormat, ...);
/* /*
* Select the appropriate VM function for the current call context. * Select the appropriate VM function for the current call context.
* This is the implementation of the powerful 'function overloading' feature * This is the implementation of the powerful 'function overloading' feature
@ -662,8 +665,8 @@ static ph7_vm_func *VmOverload(
pLink = pLink->pNextName; pLink = pLink->pNextName;
} }
if(i < 1) { if(i < 1) {
/* No candidates,return the head of the list */ /* No candidates, throw an error */
return pList; VmErrorFormat(&(*pVm), PH7_CTX_ERR, "Invalid number of arguments passed to function/method '%s'", pList->sName);
} }
if(nArg < 1 || i < 2) { if(nArg < 1 || i < 2) {
/* Return the only candidate */ /* Return the only candidate */
@ -715,9 +718,6 @@ static ph7_vm_func *VmOverload(
/* Appropriate function for the current call context */ /* Appropriate function for the current call context */
return apSet[iTarget]; return apSet[iTarget];
} }
/* Forward declaration */
static sxi32 VmLocalExec(ph7_vm *pVm, SySet *pByteCode, ph7_value *pResult);
static sxi32 VmErrorFormat(ph7_vm *pVm, sxi32 iErr, const char *zFormat, ...);
/* /*
* Mount a compiled class into the freshly created vitual machine so that * Mount a compiled class into the freshly created vitual machine so that
* it can be instanciated from the executed PHP script. * it can be instanciated from the executed PHP script.