Strictly check for data type of static variable declaration.
The build has failed. Details

This commit is contained in:
Rafal Kupiec 2018-09-21 22:06:36 +02:00
parent 79e4bac7eb
commit f927667d85
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
3 changed files with 7 additions and 0 deletions

View File

@ -2595,6 +2595,8 @@ static sxi32 PH7_CompileVar(ph7_gen_state *pGen) {
/* Restore default bytecode container */
PH7_VmSetByteCodeContainer(pGen->pVm, pInstrContainer);
}
/* Set static variable type */
sStatic.iFlags = nType;
/* Finally save the compiled static variable in the appropriate container */
SySetPut(&pFunc->aStatic, (const void *)&sStatic);
} else {

View File

@ -4949,6 +4949,10 @@ static sxi32 VmByteCodeExec(
/* Evaluate initialization expression (Any complex expression) */
VmLocalExec(&(*pVm), &pStatic->aByteCode, pObj);
}
if(pObj->iFlags != pStatic->iFlags) {
PH7_VmThrowError(&(*pVm), PH7_CTX_ERR,
"Value does not match the data type of '$%z' variable", &pStatic->sName);
}
pObj->nIdx = pStatic->nIdx;
} else {
continue;

View File

@ -959,6 +959,7 @@ struct ph7_vm_func_arg {
*/
struct ph7_vm_func_static_var {
SyString sName; /* Static variable name */
sxi32 iFlags; /* Control flags */
SySet aByteCode; /* Compiled initialization expression */
sxu32 nIdx; /* Object index in the global memory object container */
};