Store a class name in each attribute.
The build was successful. Details

This commit is contained in:
Rafal Kupiec 2019-05-16 13:25:06 +02:00
parent 8aed5af238
commit 7203492763
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
3 changed files with 13 additions and 5 deletions

View File

@ -3215,7 +3215,7 @@ loop:
} }
pGen->pIn++; /* Jump the equal sign */ pGen->pIn++; /* Jump the equal sign */
/* Allocate a new class attribute */ /* Allocate a new class attribute */
pCons = PH7_NewClassAttr(pGen->pVm, pName, nLine, iProtection, iFlags, 0); pCons = PH7_NewClassAttr(pGen->pVm, &pClass->sName, pName, nLine, iProtection, iFlags, 0);
if(pCons == 0) { if(pCons == 0) {
PH7_GenCompileError(pGen, E_ERROR, nLine, "PH7 is running out-of-memory"); 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); PH7_GenCompileError(pGen, E_ERROR, nLine, "Expected '=' or ';' after attribute name '%z'", pName);
} }
/* Allocate a new class attribute */ /* Allocate a new class attribute */
pAttr = PH7_NewClassAttr(pGen->pVm, pName, nLine, iProtection, iFlags, nType); pAttr = PH7_NewClassAttr(pGen->pVm, &pClass->sName, pName, nLine, iProtection, iFlags, nType);
if(pAttr == 0) { if(pAttr == 0) {
PH7_GenCompileError(pGen, E_ERROR, nLine, "PH7 engine is running out-of-memory"); PH7_GenCompileError(pGen, E_ERROR, nLine, "PH7 engine is running out-of-memory");
} }

View File

@ -67,7 +67,7 @@ PH7_PRIVATE ph7_class *PH7_NewRawClass(ph7_vm *pVm, const SyString *pName) {
* Allocate and initialize a new class attribute. * Allocate and initialize a new class attribute.
* Return a pointer to the class attribute on success. NULL otherwise. * Return a pointer to the class attribute on success. NULL otherwise.
*/ */
PH7_PRIVATE ph7_class_attr *PH7_NewClassAttr(ph7_vm *pVm, const SyString *pName, sxu32 nLine, sxi32 iProtection, sxi32 iFlags, sxu32 nType) { 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_class_attr *pAttr; ph7_class_attr *pAttr;
char *zName; char *zName;
pAttr = (ph7_class_attr *)SyMemBackendPoolAlloc(&pVm->sAllocator, sizeof(ph7_class_attr)); pAttr = (ph7_class_attr *)SyMemBackendPoolAlloc(&pVm->sAllocator, sizeof(ph7_class_attr));
@ -82,9 +82,16 @@ PH7_PRIVATE ph7_class_attr *PH7_NewClassAttr(ph7_vm *pVm, const SyString *pName,
SyMemBackendPoolFree(&pVm->sAllocator, pAttr); SyMemBackendPoolFree(&pVm->sAllocator, pAttr);
return 0; 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 */ /* Initialize fields */
SySetInit(&pAttr->aByteCode, &pVm->sAllocator, sizeof(VmInstr)); SySetInit(&pAttr->aByteCode, &pVm->sAllocator, sizeof(VmInstr));
SyStringInitFromBuf(&pAttr->sName, zName, pName->nByte);
pAttr->iProtection = iProtection; pAttr->iProtection = iProtection;
pAttr->nIdx = SXU32_HIGH; pAttr->nIdx = SXU32_HIGH;
pAttr->iFlags = iFlags; pAttr->iFlags = iFlags;

View File

@ -1066,6 +1066,7 @@ struct ph7_class {
* in an instance of the following structure. * in an instance of the following structure.
*/ */
struct ph7_class_attr { struct ph7_class_attr {
SyString sClass; /* Class name */
SyString sName; /* Attribute name */ SyString sName; /* Attribute name */
sxi32 iFlags; /* Attribute configuration [i.e: static, variable, constant, etc.] */ sxi32 iFlags; /* Attribute configuration [i.e: static, variable, constant, etc.] */
sxi32 iProtection; /* Protection level [i.e: public, private, protected] */ sxi32 iProtection; /* Protection level [i.e: public, private, protected] */
@ -1756,7 +1757,7 @@ PH7_PRIVATE sxi32 PH7_ParseIniString(ph7_context *pCtx, const char *zIn, sxu32 n
/* oo.c function prototypes */ /* oo.c function prototypes */
PH7_PRIVATE ph7_class_info *PH7_NewClassInfo(ph7_vm *pVm, const SyString *pName); PH7_PRIVATE ph7_class_info *PH7_NewClassInfo(ph7_vm *pVm, const SyString *pName);
PH7_PRIVATE ph7_class *PH7_NewRawClass(ph7_vm *pVm, const SyString *pName); PH7_PRIVATE ph7_class *PH7_NewRawClass(ph7_vm *pVm, const SyString *pName);
PH7_PRIVATE ph7_class_attr *PH7_NewClassAttr(ph7_vm *pVm, const SyString *pName, sxu32 nLine, sxi32 iProtection, sxi32 iFlags, sxu32 nType); 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_method *PH7_NewClassMethod(ph7_vm *pVm, ph7_class *pClass, const SyString *pName, sxu32 nLine, PH7_PRIVATE ph7_class_method *PH7_NewClassMethod(ph7_vm *pVm, ph7_class *pClass, const SyString *pName, sxu32 nLine,
sxi32 iProtection, sxi32 iFlags, sxi32 iFuncFlags); sxi32 iProtection, sxi32 iFlags, sxi32 iFuncFlags);
PH7_PRIVATE ph7_class_method *PH7_ClassExtractMethod(ph7_class *pClass, const char *zName, sxu32 nByte); PH7_PRIVATE ph7_class_method *PH7_ClassExtractMethod(ph7_class *pClass, const char *zName, sxu32 nByte);