Browse Source

1. Set a proper data type when compiling closure.

2. Temporarily allow to call a closure/function if its name is stored in a variable of callback or string type. Ultimately, only callback will be allowed.
pull/50/head
Rafal Kupiec 3 years ago
parent
commit
d87ce3ad1d
Signed by: belliash GPG Key ID: 4E829243E0CFE6B4
  1. 1
      engine/compiler.c
  2. 2
      engine/vm.c

1
engine/compiler.c

@ -1013,6 +1013,7 @@ PH7_PRIVATE sxi32 PH7_CompileClosure(ph7_gen_state *pGen, sxi32 iCompileFlag) {
}
SyStringInitFromBuf(&sName, zName, nLen);
PH7_MemObjInitFromString(pGen->pVm, pObj, &sName);
pObj->iFlags = MEMOBJ_CALL;
/* Compile the closure body */
rc = PH7_GenStateCompileFunc(&(*pGen), &sName, 0, TRUE, &pAnonFunc);
if(rc == SXERR_ABORT) {

2
engine/vm.c

@ -4831,7 +4831,7 @@ static sxi32 VmByteCodeExec(
SyHashEntry *pEntry;
SyString sName;
/* Extract function name */
if((pTos->iFlags & MEMOBJ_STRING) == 0) {
if((pTos->iFlags & (MEMOBJ_CALL | MEMOBJ_STRING)) == 0) {
if(pTos->iFlags & MEMOBJ_HASHMAP) {
ph7_value sResult;
SySetReset(&aArg);

Loading…
Cancel
Save