diff --git a/harbour/ChangeLog b/harbour/ChangeLog index e73d21d603..4b277dd5cc 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,10 @@ +2001-01-26 16:15 UTC-0800 Ron Pinkas + * hb_slex.vc + + Added -DSIMPLEX to production of HARBOUR_EXE_OBJs. + + * source/vm/hvm.c + ! Minor optimization of recent changes to hb_vmSend() + 2001-01-25 12:00 UTC-0800 Ron Pinkas * source/vm/hvm.c * Modified error messages in hb_vmSend() to report class name of native types (including NIL) along with missing method name. diff --git a/harbour/hb_slex.vc b/harbour/hb_slex.vc index 60dd51c085..fb49e6ce4e 100644 --- a/harbour/hb_slex.vc +++ b/harbour/hb_slex.vc @@ -867,7 +867,7 @@ $(HARBOUR_EXE) : \ $(COMPILER_DIR)\exproptb.c \ $(COMPILER_DIR)\exproptc.c -echo. > $(OBJ_DIR)\unistd.h - $(CC) $(CFLAGS) -I$(OBJ_DIR) -Fo$(OBJ_DIR)\ -w $** -o $(HARBOUR_EXE) /link $(LDFLAGS) $(PP_LIB) $(COMMON_LIB) + $(CC) $(CFLAGS) -DSIMPLEX -I$(OBJ_DIR) -Fo$(OBJ_DIR)\ -w $** -o $(HARBOUR_EXE) /link $(LDFLAGS) $(PP_LIB) $(COMMON_LIB) -del $(OBJ_DIR)\unistd.h diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 510f0a5465..47403e28ba 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -2871,78 +2871,73 @@ void hb_vmSend( USHORT uiParams ) PHB_BASEARRAY pSelfBase; pFunc = hb_objGetMethod( pSelf, pSym ); - pSelfBase = pSelf->item.asArray.value; if( pSelfBase->uiPrevCls ) /* Is is a Super cast ? */ { pSelfBase->uiClass = pSelfBase->uiPrevCls; pSelfBase->uiPrevCls = 0; } + + if( pFunc ) + { + pFunc(); + } + else if( pSym->szName[ 0 ] == '_' ) + { + hb_errRT_BASE_SubstR( EG_NOVARMETHOD, 1005, NULL, pSym->szName + 1 ); + } + else + { + hb_errRT_BASE_SubstR( EG_NOMETHOD, 1004, NULL, pSym->szName ); + } } else { - char sClass[10], sDesc[40]; + char *sClass, sDesc[64]; pFunc = NULL; if( HB_IS_POINTER( pSelf ) ) - sprintf( (char*) sClass, "POINTER" ); + sClass = "POINTER"; else if( HB_IS_DATE( pSelf ) ) - sprintf( (char*) sClass, "DATE" ); + sClass = "DATE"; else if( HB_IS_LOGICAL( pSelf ) ) - sprintf( (char*) sClass, "LOGICAL" ); + sClass = "LOGICAL"; else if( HB_IS_SYMBOL( pSelf ) ) - sprintf( (char*) sClass, "SYMBOL" ); + sClass = "SYMBOL"; else if( HB_IS_STRING( pSelf ) ) - sprintf( (char*) sClass, "CHARACTER" ); + sClass = "CHARACTER"; else if( HB_IS_MEMO( pSelf ) ) - sprintf( (char*) sClass, "MEMO" ); + sClass = "MEMO"; else if( HB_IS_BLOCK( pSelf ) ) - sprintf( (char*) sClass, "BLOCK" ); + sClass = "BLOCK"; else if( HB_IS_BYREF( pSelf ) ) - sprintf( (char*) sClass, "BYREF" ); + sClass = "BYREF"; else if( HB_IS_MEMVAR( pSelf ) ) - sprintf( (char*) sClass, "MEMVAR" ); + sClass = "MEMVAR"; else if( HB_IS_ARRAY( pSelf ) ) - sprintf( (char*) sClass, "ARRAY" ); + sClass = "ARRAY"; else if( HB_IS_NUMERIC( pSelf ) ) - sprintf( (char*) sClass, "NUMERIC" ); + sClass = "NUMERIC"; else - sprintf( (char*) sClass, "UNKNOWN" ); + sClass = "UNKNOWN"; - if( strncmp( pSym->szName, "CLASSNAME", strlen( pSym->szName ) ) == 0 ) + if( strncmp( pSym->szName, "CLASSNAME", strlen( pSym->szName ) < 4 ? 4 : strlen( pSym->szName ) ) == 0 ) { - hb_itemPutC( &hb_stack.Return, (char *) sClass ); + hb_itemPutC( &hb_stack.Return, sClass ); } else if( pSym->szName[ 0 ] == '_' ) { sprintf( (char *) sDesc, "Class: %s has no property", sClass ); - hb_errRT_BASE_SubstR( EG_NOVARMETHOD, 1005, sDesc, pSym->szName + 1 ); + hb_errRT_BASE_SubstR( EG_NOVARMETHOD, 1005, (char *) sDesc, pSym->szName + 1 ); } else { sprintf( (char *) sDesc, "Class: %s has no exported method", sClass ); - hb_errRT_BASE_SubstR( EG_NOMETHOD, 1004, sDesc, pSym->szName ); + hb_errRT_BASE_SubstR( EG_NOMETHOD, 1004, (char *) sDesc, pSym->szName ); } } } - - if( pFunc ) - { - pFunc(); - } - else if( strncmp( pSym->szName, "CLASSNAME", strlen( pSym->szName ) ) == 0 ) - { - /* Class Name of native type was set as return value abobe! */ - } - else if( pSym->szName[ 0 ] == '_' ) - { - hb_errRT_BASE_SubstR( EG_NOVARMETHOD, 1005, NULL, pSym->szName + 1 ); - } - else - { - hb_errRT_BASE_SubstR( EG_NOMETHOD, 1004, NULL, pSym->szName ); - } } else /* it is a function */ {