Store a pointer to class container to reduce memory usage.
All checks were successful
The build was successful.
All checks were successful
The build was successful.
This commit is contained in:
@@ -3215,7 +3215,7 @@ loop:
|
||||
}
|
||||
pGen->pIn++; /* Jump the equal sign */
|
||||
/* Allocate a new class attribute */
|
||||
pCons = PH7_NewClassAttr(pGen->pVm, &pClass->sName, pName, nLine, iProtection, iFlags, 0);
|
||||
pCons = PH7_NewClassAttr(pGen->pVm, pClass, pName, nLine, iProtection, iFlags, 0);
|
||||
if(pCons == 0) {
|
||||
PH7_GenCompileError(pGen, E_ERROR, nLine, "PH7 is running out-of-memory");
|
||||
}
|
||||
@@ -3308,7 +3308,7 @@ loop:
|
||||
PH7_GenCompileError(pGen, E_ERROR, nLine, "Expected '=' or ';' after attribute name '%z'", pName);
|
||||
}
|
||||
/* Allocate a new class attribute */
|
||||
pAttr = PH7_NewClassAttr(pGen->pVm, &pClass->sName, pName, nLine, iProtection, iFlags, nType);
|
||||
pAttr = PH7_NewClassAttr(pGen->pVm, pClass, pName, nLine, iProtection, iFlags, nType);
|
||||
if(pAttr == 0) {
|
||||
PH7_GenCompileError(pGen, E_ERROR, nLine, "PH7 engine is running out-of-memory");
|
||||
}
|
||||
|
10
engine/oop.c
10
engine/oop.c
@@ -67,7 +67,7 @@ PH7_PRIVATE ph7_class *PH7_NewRawClass(ph7_vm *pVm, const SyString *pName) {
|
||||
* Allocate and initialize a new class attribute.
|
||||
* Return a pointer to the class attribute on success. NULL otherwise.
|
||||
*/
|
||||
PH7_PRIVATE ph7_class_attr *PH7_NewClassAttr(ph7_vm *pVm, const SyString *pClass, const SyString *pName, sxu32 nLine, sxi32 iProtection, sxi32 iFlags, sxu32 nType) {
|
||||
PH7_PRIVATE ph7_class_attr *PH7_NewClassAttr(ph7_vm *pVm, ph7_class *pClass, const SyString *pName, sxu32 nLine, sxi32 iProtection, sxi32 iFlags, sxu32 nType) {
|
||||
ph7_class_attr *pAttr;
|
||||
char *zName;
|
||||
pAttr = (ph7_class_attr *)SyMemBackendPoolAlloc(&pVm->sAllocator, sizeof(ph7_class_attr));
|
||||
@@ -83,14 +83,8 @@ PH7_PRIVATE ph7_class_attr *PH7_NewClassAttr(ph7_vm *pVm, const SyString *pClass
|
||||
return 0;
|
||||
}
|
||||
SyStringInitFromBuf(&pAttr->sName, zName, pName->nByte);
|
||||
/* Duplicate class name */
|
||||
zName = SyMemBackendStrDup(&pVm->sAllocator, pClass->zString, pClass->nByte);
|
||||
if(zName == 0) {
|
||||
SyMemBackendPoolFree(&pVm->sAllocator, pAttr);
|
||||
return 0;
|
||||
}
|
||||
SyStringInitFromBuf(&pAttr->sClass, zName, pName->nByte);
|
||||
/* Initialize fields */
|
||||
pAttr->pClass = pClass;
|
||||
SySetInit(&pAttr->aByteCode, &pVm->sAllocator, sizeof(VmInstr));
|
||||
pAttr->iProtection = iProtection;
|
||||
pAttr->nIdx = SXU32_HIGH;
|
||||
|
Reference in New Issue
Block a user