Typehinting merge #50

Merged
belliash merged 298 commits from typehinting into master 2019-04-17 11:27:52 +02:00
Showing only changes of commit 3f9e3b0664 - Show all commits

View File

@ -2777,6 +2777,10 @@ static sxi32 VmByteCodeExec(
} else if(pObj->iFlags & MEMOBJ_MIXED) { } else if(pObj->iFlags & MEMOBJ_MIXED) {
PH7_MemObjStore(pTos, pObj); PH7_MemObjStore(pTos, pObj);
pObj->iFlags |= MEMOBJ_MIXED; pObj->iFlags |= MEMOBJ_MIXED;
} else if(PH7_CheckVarCompat(pTos, pObj->iFlags) == SXRET_OK) {
ProcMemObjCast xCast = PH7_MemObjCastMethod(pObj->iFlags);
xCast(pTos);
PH7_MemObjStore(pTos, pObj);
} else { } else {
PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, PH7_VmThrowError(&(*pVm), PH7_CTX_ERR,
"Cannot assign a value of incompatible type to variable '$%z'", &sName); "Cannot assign a value of incompatible type to variable '$%z'", &sName);
@ -5058,8 +5062,8 @@ static sxi32 VmByteCodeExec(
} }
} }
} else if((aFormalArg[n].nType & MEMOBJ_MIXED) == 0 && (pArg->iFlags & aFormalArg[n].nType) == 0) { } else if((aFormalArg[n].nType & MEMOBJ_MIXED) == 0 && (pArg->iFlags & aFormalArg[n].nType) == 0) {
if(aFormalArg[n].nType == MEMOBJ_REAL && (pArg->iFlags & MEMOBJ_INT)) { if(PH7_CheckVarCompat(pArg, aFormalArg[n].nType) == SXRET_OK) {
/* Silently typecast integer value to float */ /* Silently typecast compatible value to expected data type */
ProcMemObjCast xCast = PH7_MemObjCastMethod(aFormalArg[n].nType); ProcMemObjCast xCast = PH7_MemObjCastMethod(aFormalArg[n].nType);
xCast(pArg); xCast(pArg);
} else { } else {