Functions isData(), isMethod() and isMessage() added

This commit is contained in:
Eddie Runia
1999-05-10 10:28:27 +00:00
parent 8981b593f9
commit a5c242f2b2
3 changed files with 60 additions and 4 deletions

View File

@@ -1,3 +1,9 @@
19990510-11:30 Eddie Runia
* source/rtl/classes.c
Function IsMessage() added
* tests/working/debugtst.prg
Function IsData() / IsMethod() added. Also contains tests for Is*()
19990510-10:05 Eddie Runia
* source/vm/hvm.c
Function PCount() added /* QUESTION: Should it be there ? */

View File

@@ -447,6 +447,19 @@ HARBOURFUNC GetMethod( PITEM pObject, PSYMBOL pMessage )
return 0;
}
HARBOUR ISMESSAGE() /* Is the message valid for the class */
/* <lRet> := IsMessage( <oObj>, <cSymbol> ) */
{
PITEM pObject = _param( 1, IT_OBJECT );
PITEM pString = _param( 2, IT_STRING );
PSYMBOL pMessage = GetDynSym( pString->value.szText )->pSymbol;
/* QUESTION: Warning when using HARBOURFUNC ? */
ULONG pFunc = (ULONG) GetMethod( pObject, pMessage );
/* Get function pointer of */
/* message */
_retl( pFunc != 0 );
}
void ReleaseClass( PCLASS pClass )
{
_xfree( pClass->szName );

View File

@@ -23,11 +23,28 @@ function Main()
oForm:Show()
QOut()
QOut( "-DEBUG Functions-")
QOut( "-OBJECT additions-" )
QOut( "What is in oForm ? " )
Debug( oForm:Transfer() )
oForm:Transfer( {"nLeft", 50}, {"nRight", 100} )
QOut( "Does transfer exists ? ", IsMessage( oForm, "Transfer" ) )
QOut( "Is transfer DATA ? ", IsData ( oForm, "Transfer" ) )
QOut( "Is transfer METHOD ? ", IsMethod ( oForm, "Transfer" ) )
QOut( "Does nLeft exists ? ", IsMessage( oForm, "nLeft" ) )
QOut( "Is nLeft DATA ? ", IsData ( oForm, "nLeft" ) )
QOut( "Is nLeft METHOD ? ", IsMethod ( oForm, "nLeft" ) )
QOut( "Does unknown exists ? ", IsMessage( oForm, "Unknown" ) )
QOut( "Is unknown DATA ? ", IsData ( oForm, "Unknown" ) )
QOut( "Is unknown METHOD ? ", IsMethod ( oForm, "Unknown" ) )
QOut( "Set nLeft to 50 and nRight to 100" )
oForm:Transfer( {"nLeft", 50}, {"nRight", 100} )
Debug( oForm:Transfer() )
Pause()
QOut( "-DEBUG Functions-")
QOut( "-Statics-" )
Debug( __aStatic() )
@@ -222,8 +239,7 @@ function TForm()
oClass:AddData( "nBottom" )
oClass:AddData( "nRight" )
oClass:AddVirtual( "aExcept" )
// Export exceptions
oClass:AddVirtual( "aExcept" ) // Export exceptions
oClass:AddMethod( "New", @New() ) // define this class objects methods
oClass:AddMethod( "Show", @Show() )
@@ -516,4 +532,25 @@ function QuickSort( aSort, nLeft, nRight, bOrder )
return nil
//
// <lRet> := IsData( <oObject>, <cSymbol> )
//
// Is the symbol present in the object as DATA ?
//
function IsData( oObject, cSymbol )
return IsMessage( oObject, cSymbol ) .and. IsMessage( oObject, "_" + cSymbol )
//
// <lRet> := IsMethod( <oObject>, <cSymbol> )
//
// Is the symbol present in the object as METHOD ?
//
function IsMethod( oObject, cSymbol )
return IsMessage( oObject, cSymbol ) .and. !IsMessage( oObject, "_" + cSymbol )