diff --git a/harbour/source/vm/macro.c b/harbour/source/vm/macro.c index 66c16636ec..4d18c48a30 100644 --- a/harbour/source/vm/macro.c +++ b/harbour/source/vm/macro.c @@ -1191,7 +1191,13 @@ void hb_compGenPopVar( char * szVarName, HB_MACRO_DECL ) } else { - hb_compMemvarGenPCode( HB_P_MPOPMEMVAR, szVarName, HB_MACRO_PARAM ); + HB_DYNS_PTR pSym = hb_dynsymFind( szVarName ); + + if( pSym && ! pSym->hMemvar ) + hb_compMemvarGenPCode( HB_P_MPOPFIELD, szVarName, HB_MACRO_PARAM ); + else + hb_compMemvarGenPCode( HB_P_MPOPMEMVAR, szVarName, HB_MACRO_PARAM ); + hb_compMemvarCheck( szVarName, HB_MACRO_PARAM ); } } @@ -1274,7 +1280,18 @@ void hb_compGenPushVar( char * szVarName, HB_MACRO_DECL ) } else { - hb_compMemvarGenPCode( HB_P_MPUSHVARIABLE, szVarName, HB_MACRO_PARAM ); + HB_DYNS_PTR pSym = hb_dynsymFind( szVarName ); + + if( pSym && pSym->hMemvar ) + hb_compMemvarGenPCode( HB_P_MPUSHMEMVAR, szVarName, HB_MACRO_PARAM ); + + else if( pSym ) + hb_compMemvarGenPCode( HB_P_MPUSHFIELD, szVarName, HB_MACRO_PARAM ); + + else + // Will result in: HB_MACRO_UNKN_SYM + ~HB_MACRO_CONT + hb_compMemvarGenPCode( HB_P_MPUSHVARIABLE, szVarName, HB_MACRO_PARAM ); + hb_compMemvarCheck( szVarName, HB_MACRO_PARAM ); } }