Both VmExtractDebugTrace() and VmDebugTrace structure should provide information whether it was object call or a static method call.
This commit is contained in:
+5
-4
@@ -1781,17 +1781,18 @@ PH7_PRIVATE sxi32 VmExtractDebugTrace(ph7_vm *pVm, SySet *pDebugTrace) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
aTrace.pClassName = NULL;
|
||||||
|
aTrace.bThis = FALSE;
|
||||||
if(pFunc->iFlags & VM_FUNC_CLASS_METHOD) {
|
if(pFunc->iFlags & VM_FUNC_CLASS_METHOD) {
|
||||||
/* Extract class name */
|
/* Extract class name */
|
||||||
ph7_class *pClass;
|
ph7_class *pClass;
|
||||||
pClass = PH7_VmExtractActiveClass(pVm, iDepth++);
|
pClass = PH7_VmExtractActiveClass(pVm, iDepth++);
|
||||||
if(pClass) {
|
if(pClass) {
|
||||||
aTrace.pClassName = &pClass->sName;
|
aTrace.pClassName = &pClass->sName;
|
||||||
} else {
|
if(pVm->pFrame->pThis && pVm->pFrame->pThis->pClass == pClass) {
|
||||||
aTrace.pClassName = NULL;
|
aTrace.bThis = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
aTrace.pClassName = NULL;
|
|
||||||
}
|
}
|
||||||
rc = SySetPut(pDebugTrace, (const void *)&aTrace);
|
rc = SySetPut(pDebugTrace, (const void *)&aTrace);
|
||||||
if(rc != SXRET_OK) {
|
if(rc != SXRET_OK) {
|
||||||
|
|||||||
@@ -1286,6 +1286,7 @@ typedef struct VmDebugTrace VmDebugTrace;
|
|||||||
struct VmDebugTrace {
|
struct VmDebugTrace {
|
||||||
SyString *pFile; /* AerScript file name */
|
SyString *pFile; /* AerScript file name */
|
||||||
sxu32 nLine; /* Line in Aer source file */
|
sxu32 nLine; /* Line in Aer source file */
|
||||||
|
sxbool bThis; /* Whether it was object call or static call */
|
||||||
SyString *pClassName; /* Class name */
|
SyString *pClassName; /* Class name */
|
||||||
SyString *pFuncName; /* Closure/method name */
|
SyString *pFuncName; /* Closure/method name */
|
||||||
SySet *pArg; /* List of arguments passed to closure/method */
|
SySet *pArg; /* List of arguments passed to closure/method */
|
||||||
|
|||||||
Reference in New Issue
Block a user