2001-11-18 22:15 GMT+1 JFL (mafact) <jfl@mafact.com>
This commit is contained in:
@@ -1,3 +1,18 @@
|
||||
2001-11-18 22:15 GMT+1 JFL (mafact) <jfl@mafact.com>
|
||||
* harbour/source/vm/classes.c
|
||||
* change CLSADDMSG() to intercept Operator overloading and
|
||||
use standardised symbol in place of operator itself
|
||||
(like "-" => "__OpLess" )
|
||||
* harbour/source/vm/hvm.c
|
||||
* Modif done to send correct message to object as newly defined
|
||||
* harbour/include/hbclass.ch
|
||||
+ added an OPERATOR command for Inline use now we can define an OPERATOR
|
||||
using inline only like ;
|
||||
OPERATOR "-" ARG xARg INLINE ::cValue - xArg
|
||||
see new test overload.prg
|
||||
* harbour/tests/overload.prg
|
||||
adapted to command mode and use of the new OPERATOR INLINE command
|
||||
|
||||
2001-11-17 15:40 GMT+0700 Andi Jahja <harbour@cbn.net.id>
|
||||
* source/lang/msgzhbig.c
|
||||
- remove msgzhbig.c as it was replaced by msgzhb5.c
|
||||
|
||||
@@ -404,6 +404,12 @@ DECLARE HBClass ;
|
||||
s_oClass:AddInline( <(op)>, {|Self [,<params>] | Self:<MethodName>( [<params>] ) }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) )
|
||||
#endif
|
||||
|
||||
#xcommand OPERATOR <op> ARG <cArg> INLINE <Code,...> [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
|
||||
s_oClass:AddInline( <(op)>, {|Self, <cArg> | <Code> }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) )
|
||||
|
||||
//command OPERATOR <op> ARG <cArg> INLINE [Local lx,...] <Code,...> [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
|
||||
//oClass:AddInline( <(op)>, {|Self, <cArg> [,<lx>] | <Code> }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) )
|
||||
|
||||
#ifdef STRICT_OO
|
||||
#xcommand MESSAGE <MessageName> [ AS <type> ] METHOD <MethodName> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
|
||||
_HB_MEMBER <MessageName>() [<-ctor-> AS CLASS _CLASS_NAME_] [ AS <type> ];;
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
* Copyright 1999 Janica Lubos <janica@fornax.elf.stuba.sk>
|
||||
* hb_clsDictRealloc()
|
||||
*
|
||||
* Copyright 2000 ( ->07/2000 ) JF. Lefebvre <jfl@mafact.com> & RA. Cuylen <rac@mafact.com>
|
||||
* Copyright 2000 ( ->07/2000 ) JF. Lefebvre <jfl@mafact.com> & RA. Cuylen <cakiral@altern.org
|
||||
* Multiple inheritence fully implemented
|
||||
* Forwarding, delegating
|
||||
* Data initialisation & Autoinit for Bool and Numeric
|
||||
@@ -101,9 +101,39 @@
|
||||
* __CLS_PAR00() (Allow the creation of class wich not autoinherit of the default HBObject)
|
||||
* Adding HB_CLS_ENFORCERO FLAG to disable Write access to RO VAR
|
||||
* outside of Constructors /!\ Could be related to some incompatibility
|
||||
* Added hb_objGetRealClsName to keep a full class tree
|
||||
* Added hb_objGetRealClsName to keep a full class tree ( for 99% cases )
|
||||
* Fixed hb_clsIsParent
|
||||
*
|
||||
*
|
||||
* hb_objGetMthd() & __CLSADDMSG modified to translate the followings operators
|
||||
*
|
||||
"+" = __OpPlus
|
||||
"-" = __OpMinus
|
||||
"*" = __OpMult
|
||||
"/" = __OpDivide
|
||||
"%" = __OpMod
|
||||
"^" = __OpPower
|
||||
"**" = __OpMod (currently it's different from "^", but this is not in sync,
|
||||
with Clipper syntax, where these two are synonims)
|
||||
"++" = __OpInc
|
||||
"--" = __OpDec
|
||||
"==" = __OpEqual
|
||||
"=" = __OpEqual (same as "==")
|
||||
"!=" = __OpNotEqual
|
||||
"<>" = __OpNotEqual (same as "!=")
|
||||
"#" = __OpNotEqual (same as "!=")
|
||||
"<" = __OpLess
|
||||
"<=" = __OpLessEqual
|
||||
">" = __OpGreater
|
||||
">=" = __OpGreaterEqual
|
||||
"$" = __OpInstring
|
||||
"!" = __OpNot
|
||||
".NOT." = __OpNot (same as "!")
|
||||
".AND." = __OpAnd
|
||||
".OR." = __OpOr
|
||||
":=" = __OpAssign ... not tested ...
|
||||
*
|
||||
*
|
||||
* See doc/license.txt for licensing terms.
|
||||
*
|
||||
*/
|
||||
@@ -762,6 +792,7 @@ PHB_FUNC hb_objGetMthd( PHB_ITEM pObject, PHB_SYMB pMessage, BOOL lAllowErrFunc
|
||||
|
||||
while( uiAt != uiLimit )
|
||||
{
|
||||
|
||||
if( pClass->pMethods[ uiAt ].pMessage == pMsg )
|
||||
{
|
||||
pMethod = pClass->pMethods + uiAt;
|
||||
@@ -907,6 +938,8 @@ ULONG hb_objHasMsg( PHB_ITEM pObject, char *szString )
|
||||
* HB_OO_CLSTP_CLASS 64 : message is the name of a superclass
|
||||
* HB_OO_CLSTP_SUPER 128 : message is herited
|
||||
*/
|
||||
|
||||
|
||||
HB_FUNC( __CLSADDMSG )
|
||||
{
|
||||
USHORT uiClass = ( USHORT ) hb_parni( 1 );
|
||||
@@ -916,13 +949,66 @@ HB_FUNC( __CLSADDMSG )
|
||||
if( uiClass && uiClass <= s_uiClasses )
|
||||
{
|
||||
PCLASS pClass = s_pClasses + ( uiClass - 1 );
|
||||
PHB_DYNS pMessage = hb_dynsymGet( hb_parc( 2 ) );
|
||||
|
||||
PHB_DYNS pMessage ;
|
||||
|
||||
USHORT uiBucket;
|
||||
|
||||
USHORT wType = ( USHORT ) hb_parni( 4 );
|
||||
USHORT uiAt;
|
||||
PMETHOD pNewMeth;
|
||||
|
||||
if (strcmp("+",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpPlus" ) ;
|
||||
else if (strcmp("-",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpMinus") ;
|
||||
else if (strcmp("*",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpMult" ) ;
|
||||
else if (strcmp("/",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpDivide") ;
|
||||
else if (strcmp("%",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpMod" ) ;
|
||||
else if (strcmp("^",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpPower") ;
|
||||
else if (strcmp("**",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpMod" ) ;
|
||||
else if (strcmp("++",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpInc" ) ;
|
||||
else if (strcmp("--",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpDec" ) ;
|
||||
else if (strcmp("==",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpEqual") ;
|
||||
else if (strcmp("=",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpEqual") ;
|
||||
else if (strcmp("!=",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpNotEqual") ;
|
||||
else if (strcmp("<>",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpNotEqual") ;
|
||||
else if (strcmp("#",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpNotEqual") ;
|
||||
else if (strcmp("<",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpLess" ) ;
|
||||
else if (strcmp("<=",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpLessEqual") ;
|
||||
else if (strcmp(">",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpGreater") ;
|
||||
else if (strcmp(">=",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpGreaterEqual") ;
|
||||
else if (strcmp(":=",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpAssign") ;
|
||||
else if (strcmp("$",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpInstring") ;
|
||||
else if (strcmp("!",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpNot" ) ;
|
||||
else if (strcmp(".NOT.",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpNot" ) ;
|
||||
else if (strcmp(".AND.",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpAnd" ) ;
|
||||
else if (strcmp(".OR.",hb_parc(2)) == 0)
|
||||
pMessage = hb_dynsymGet( "__OpOr" ) ;
|
||||
else
|
||||
pMessage = hb_dynsymGet( hb_parc( 2 ) );
|
||||
|
||||
if( wType == HB_OO_MSG_INLINE && hb_param( 3, HB_IT_BLOCK ) == NULL )
|
||||
hb_errRT_BASE( EG_ARG, 3000, NULL, "__CLSADDMSG", 0 );
|
||||
|
||||
@@ -964,7 +1050,7 @@ HB_FUNC( __CLSADDMSG )
|
||||
pNewMeth->ulRecurse = 0;
|
||||
pNewMeth->bIsPersistent = bPersistent;
|
||||
|
||||
/* in cas eof re-used message */
|
||||
/* in case of re-used message */
|
||||
if ( pNewMeth->pInitValue )
|
||||
{
|
||||
hb_itemRelease(pNewMeth->pInitValue) ;
|
||||
|
||||
@@ -1666,9 +1666,8 @@ static void hb_vmPlus( void )
|
||||
|
||||
hb_vmPushDate( lDate1 + lNumber2 );
|
||||
}
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "+" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "+" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpPlus" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPPLUS" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1081, NULL, "+", 2, pItem1, pItem2 );
|
||||
@@ -1742,9 +1741,8 @@ static void hb_vmMinus( void )
|
||||
else
|
||||
hb_errRT_BASE( EG_STROVERFLOW, 1210, NULL, "-", 2, pItem1, pItem2 );
|
||||
}
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "-" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "-" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpMinus" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPMINUS" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1082, NULL, "-", 2, pItem1, pItem2 );
|
||||
@@ -1778,9 +1776,8 @@ static void hb_vmMult( void )
|
||||
hb_vmPushNumType( d1 * d2, iDec1 + iDec2, iType1, iType2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "*" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "*" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpMult" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPMULT" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1083, NULL, "*", 2, pItem1, pItem2 );
|
||||
@@ -1836,9 +1833,8 @@ static void hb_vmDivide( void )
|
||||
}
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "/" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "/" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpDivide" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPDIVIDE" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1084, NULL, "/", 2, pItem1, pItem2 );
|
||||
@@ -1885,9 +1881,8 @@ static void hb_vmModulus( void )
|
||||
hb_vmPushNumType( fmod( d1, d2 ), hb_set.HB_SET_DECIMALS, iType1, iType2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "%" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "%" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpMod" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPMOD" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1085, NULL, "%", 2, pItem1, pItem2 );
|
||||
@@ -1922,12 +1917,10 @@ static void hb_vmPower( void )
|
||||
hb_vmPushDouble( pow( d1, d2 ), hb_set.HB_SET_DECIMALS );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "^" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "^" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "**" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "**" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpPower" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPPOWER" );
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpMod" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPMOD" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1088, NULL, "^", 2, pItem1, pItem2 );
|
||||
@@ -1958,10 +1951,8 @@ static void hb_vmInc( void )
|
||||
}
|
||||
else if( HB_IS_DATE( pItem ) )
|
||||
hb_vmPushDate( hb_vmPopDate() + 1 );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem ) && hb_objHasMsg( pItem, "++" ) )
|
||||
hb_vmOperatorCallUnary( hb_stackItemFromTop( -1 ), "++" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem ) && hb_objHasMsg( pItem, "__OpInc" ) )
|
||||
hb_vmOperatorCallUnary( hb_stackItemFromTop( -1 ), "__OPINC" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1086, NULL, "++", 1, pItem );
|
||||
@@ -1991,10 +1982,8 @@ static void hb_vmDec( void )
|
||||
}
|
||||
else if( HB_IS_DATE( pItem) )
|
||||
hb_vmPushDate( hb_vmPopDate() - 1 );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem ) && hb_objHasMsg( pItem, "--" ) )
|
||||
hb_vmOperatorCallUnary( pItem, "--" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem ) && hb_objHasMsg( pItem, "__OpDec" ) )
|
||||
hb_vmOperatorCallUnary( pItem, "__OPDEC" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1087, NULL, "--", 1, pItem );
|
||||
@@ -2063,19 +2052,12 @@ static void hb_vmEqual( BOOL bExact )
|
||||
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopNumber() == hb_vmPopNumber() );
|
||||
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopDate() == hb_vmPopDate() );
|
||||
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopLogical() == hb_vmPopLogical() );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "==" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "==" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "=" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "=" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpEqual" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPEQUAL" );
|
||||
else if( bExact && HB_IS_ARRAY( pItem1 ) && HB_IS_ARRAY( pItem2 ) )
|
||||
{
|
||||
BOOL bResult = pItem1->item.asArray.value->pItems && pItem2->item.asArray.value->pItems &&
|
||||
@@ -2145,22 +2127,12 @@ static void hb_vmNotEqual( void )
|
||||
|
||||
else if( HB_IS_NUMERIC( pItem1 ) && HB_IS_NUMERIC( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopNumber() != hb_vmPopNumber() );
|
||||
|
||||
else if( HB_IS_DATE( pItem1 ) && HB_IS_DATE( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopDate() != hb_vmPopDate() );
|
||||
|
||||
else if( HB_IS_LOGICAL( pItem1 ) && HB_IS_LOGICAL( pItem2 ) )
|
||||
hb_vmPushLogical( hb_vmPopLogical() != hb_vmPopLogical() );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "!=" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "!=" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "<>" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "<>" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "#" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "#" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpNotEqual" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPNOTEQUAL" );
|
||||
else if( pItem1->type != pItem2->type ||
|
||||
( HB_IS_BLOCK( pItem1 ) && HB_IS_BLOCK( pItem2 ) ) ||
|
||||
( HB_IS_ARRAY( pItem1 ) && HB_IS_ARRAY( pItem2 ) ) )
|
||||
@@ -2194,31 +2166,26 @@ static void hb_vmLess( void )
|
||||
hb_stackPop();
|
||||
hb_vmPushLogical( i < 0 );
|
||||
}
|
||||
|
||||
else if( HB_IS_NUMERIC( hb_stackItemFromTop( - 1 ) ) && HB_IS_NUMERIC( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
double dNumber2 = hb_vmPopNumber();
|
||||
double dNumber1 = hb_vmPopNumber();
|
||||
hb_vmPushLogical( dNumber1 < dNumber2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_DATE( hb_stackItemFromTop( -1 ) ) && HB_IS_DATE( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
long lDate2 = hb_vmPopDate();
|
||||
long lDate1 = hb_vmPopDate();
|
||||
hb_vmPushLogical( lDate1 < lDate2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_LOGICAL( hb_stackItemFromTop( -1 ) ) && HB_IS_LOGICAL( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
BOOL bLogical2 = hb_vmPopLogical();
|
||||
BOOL bLogical1 = hb_vmPopLogical();
|
||||
hb_vmPushLogical( bLogical1 < bLogical2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( hb_stackItemFromTop( -2 ) ) && hb_objHasMsg( hb_stackItemFromTop( -2 ), "<" ) )
|
||||
hb_vmOperatorCall( hb_stackItemFromTop( -2 ), hb_stackItemFromTop( -1 ), "<" );
|
||||
|
||||
else if( HB_IS_OBJECT( hb_stackItemFromTop( -2 ) ) && hb_objHasMsg( hb_stackItemFromTop( -2 ), "__OpLess" ) )
|
||||
hb_vmOperatorCall( hb_stackItemFromTop( -2 ), hb_stackItemFromTop( -1 ), "__OPLESS" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pItem2 = hb_stackItemFromTop( -1 );
|
||||
@@ -2246,31 +2213,26 @@ static void hb_vmLessEqual( void )
|
||||
hb_stackPop();
|
||||
hb_vmPushLogical( i <= 0 );
|
||||
}
|
||||
|
||||
else if( HB_IS_NUMERIC( hb_stackItemFromTop( -1 ) ) && HB_IS_NUMERIC( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
double dNumber2 = hb_vmPopNumber();
|
||||
double dNumber1 = hb_vmPopNumber();
|
||||
hb_vmPushLogical( dNumber1 <= dNumber2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_DATE( hb_stackItemFromTop( -1 ) ) && HB_IS_DATE( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
long lDate2 = hb_vmPopDate();
|
||||
long lDate1 = hb_vmPopDate();
|
||||
hb_vmPushLogical( lDate1 <= lDate2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_LOGICAL( hb_stackItemFromTop( -1 ) ) && HB_IS_LOGICAL( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
BOOL bLogical2 = hb_vmPopLogical();
|
||||
BOOL bLogical1 = hb_vmPopLogical();
|
||||
hb_vmPushLogical( bLogical1 <= bLogical2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( hb_stackItemFromTop( -2 ) ) && hb_objHasMsg( hb_stackItemFromTop( -2 ), "<=" ) )
|
||||
hb_vmOperatorCall( hb_stackItemFromTop( -2 ), hb_stackItemFromTop( -1 ), "<=" );
|
||||
|
||||
else if( HB_IS_OBJECT( hb_stackItemFromTop( -2 ) ) && hb_objHasMsg( hb_stackItemFromTop( -2 ), "__OpLessEqual" ) )
|
||||
hb_vmOperatorCall( hb_stackItemFromTop( -2 ), hb_stackItemFromTop( -1 ), "__OPLESSEQUAL" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pItem2 = hb_stackItemFromTop( -1 );
|
||||
@@ -2298,31 +2260,26 @@ static void hb_vmGreater( void )
|
||||
hb_stackPop();
|
||||
hb_vmPushLogical( i > 0 );
|
||||
}
|
||||
|
||||
else if( HB_IS_NUMERIC( hb_stackItemFromTop( -1 ) ) && HB_IS_NUMERIC( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
double dNumber2 = hb_vmPopNumber();
|
||||
double dNumber1 = hb_vmPopNumber();
|
||||
hb_vmPushLogical( dNumber1 > dNumber2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_DATE( hb_stackItemFromTop( -1 ) ) && HB_IS_DATE( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
long lDate2 = hb_vmPopDate();
|
||||
long lDate1 = hb_vmPopDate();
|
||||
hb_vmPushLogical( lDate1 > lDate2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_LOGICAL( hb_stackItemFromTop( -1 ) ) && HB_IS_LOGICAL( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
BOOL bLogical2 = hb_vmPopLogical();
|
||||
BOOL bLogical1 = hb_vmPopLogical();
|
||||
hb_vmPushLogical( bLogical1 > bLogical2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( hb_stackItemFromTop( -2 ) ) && hb_objHasMsg( hb_stackItemFromTop( -2 ), ">" ) )
|
||||
hb_vmOperatorCall( hb_stackItemFromTop( -2 ), hb_stackItemFromTop( -1 ), ">" );
|
||||
|
||||
else if( HB_IS_OBJECT( hb_stackItemFromTop( -2 ) ) && hb_objHasMsg( hb_stackItemFromTop( -2 ), "__OpGreater" ) )
|
||||
hb_vmOperatorCall( hb_stackItemFromTop( -2 ), hb_stackItemFromTop( -1 ), "__OPGREATER" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pItem2 = hb_stackItemFromTop( -1 );
|
||||
@@ -2350,31 +2307,26 @@ static void hb_vmGreaterEqual( void )
|
||||
hb_stackPop();
|
||||
hb_vmPushLogical( i >= 0 );
|
||||
}
|
||||
|
||||
else if( HB_IS_NUMERIC( hb_stackItemFromTop( -1 ) ) && HB_IS_NUMERIC( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
double dNumber2 = hb_vmPopNumber();
|
||||
double dNumber1 = hb_vmPopNumber();
|
||||
hb_vmPushLogical( dNumber1 >= dNumber2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_DATE( hb_stackItemFromTop( -1 ) ) && HB_IS_DATE( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
long lDate2 = hb_vmPopDate();
|
||||
long lDate1 = hb_vmPopDate();
|
||||
hb_vmPushLogical( lDate1 >= lDate2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_LOGICAL( hb_stackItemFromTop( -1 ) ) && HB_IS_LOGICAL( hb_stackItemFromTop( -2 ) ) )
|
||||
{
|
||||
BOOL bLogical2 = hb_vmPopLogical();
|
||||
BOOL bLogical1 = hb_vmPopLogical();
|
||||
hb_vmPushLogical( bLogical1 >= bLogical2 );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( hb_stackItemFromTop( -2 ) ) && hb_objHasMsg( hb_stackItemFromTop( -2 ), ">=" ) )
|
||||
hb_vmOperatorCall( hb_stackItemFromTop( -2 ), hb_stackItemFromTop( -1 ), ">=" );
|
||||
|
||||
else if( HB_IS_OBJECT( hb_stackItemFromTop( -2 ) ) && hb_objHasMsg( hb_stackItemFromTop( -2 ), "__OpGreaterEqual" ) )
|
||||
hb_vmOperatorCall( hb_stackItemFromTop( -2 ), hb_stackItemFromTop( -1 ), "__OPGREATEREQUAL" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pItem2 = hb_stackItemFromTop( -1 );
|
||||
@@ -2409,8 +2361,8 @@ static void hb_vmInstring( void )
|
||||
hb_stackPop();
|
||||
hb_vmPushLogical( bResult );
|
||||
}
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "$" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "$" );
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpInstring" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPINSTRING" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1109, NULL, "$", 2, pItem1, pItem2 );
|
||||
@@ -2512,13 +2464,8 @@ static void hb_vmNot( void )
|
||||
|
||||
if( HB_IS_LOGICAL( pItem ) )
|
||||
pItem->item.asLogical.value = ! pItem->item.asLogical.value;
|
||||
|
||||
else if( HB_IS_OBJECT( pItem ) && hb_objHasMsg( pItem, "!" ) )
|
||||
hb_vmOperatorCallUnary( pItem, "!" );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem ) && hb_objHasMsg( pItem, ".NOT." ) )
|
||||
hb_vmOperatorCallUnary( pItem, ".NOT." );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem ) && hb_objHasMsg( pItem, "__OpNot" ) )
|
||||
hb_vmOperatorCallUnary( pItem, "__OPNOT" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1077, NULL, ".NOT.", 1, pItem );
|
||||
@@ -2549,10 +2496,8 @@ static void hb_vmAnd( void )
|
||||
hb_stackPop();
|
||||
hb_vmPushLogical( bResult );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, ".AND." ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, ".AND." );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpAnd" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPAND" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1078, NULL, ".AND.", 2, pItem1, pItem2 );
|
||||
@@ -2584,10 +2529,8 @@ static void hb_vmOr( void )
|
||||
hb_stackPop();
|
||||
hb_vmPushLogical( bResult );
|
||||
}
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, ".OR." ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, ".OR." );
|
||||
|
||||
else if( HB_IS_OBJECT( pItem1 ) && hb_objHasMsg( pItem1, "__OpOr" ) )
|
||||
hb_vmOperatorCall( pItem1, pItem2, "__OPOR" );
|
||||
else
|
||||
{
|
||||
PHB_ITEM pResult = hb_errRT_BASE_Subst( EG_ARG, 1079, NULL, ".OR.", 2, pItem1, pItem2 );
|
||||
@@ -4760,4 +4703,4 @@ HB_FUNC( __TRACEPRGCALLS )
|
||||
hb_bTracePrgCalls = hb_parl( 1 );
|
||||
|
||||
hb_retl( bOldValue );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,9 +12,14 @@
|
||||
// Written by Eddie Runia <eddie@runia.com>
|
||||
// www - http://www.harbour-project.org
|
||||
//
|
||||
// Jfl 2001/11/18 command mode added
|
||||
//
|
||||
// Placed in the public domain
|
||||
//
|
||||
|
||||
|
||||
#include "hbclass.ch"
|
||||
|
||||
function Main()
|
||||
|
||||
local oString := TString():New( "Hello" )
|
||||
@@ -40,6 +45,28 @@ function Main()
|
||||
|
||||
return nil
|
||||
|
||||
|
||||
create class tString
|
||||
|
||||
VAR cValue
|
||||
|
||||
METHOD New(cText) INLINE ::cValue := cText, self
|
||||
|
||||
OPERATOR "==" ARG cArg INLINE ::cValue == cArg
|
||||
OPERATOR "!=" ARG cArg INLINE ::cValue != cArg
|
||||
OPERATOR "<" ARG cArg INLINE ::cValue < cArg
|
||||
OPERATOR "<=" ARG cArg INLINE ::cValue <= cArg
|
||||
OPERATOR ">" ARG cArg INLINE ::cValue > cArg
|
||||
OPERATOR ">=" ARG cArg INLINE ::cValue >= cArg
|
||||
OPERATOR "+" ARG cArg INLINE ::cValue + cArg
|
||||
OPERATOR "-" ARG cArg INLINE ::cValue - cArg
|
||||
OPERATOR "$" ARG cArg INLINE ::cValue $ cArg
|
||||
|
||||
endclass
|
||||
|
||||
|
||||
|
||||
/*
|
||||
function TString()
|
||||
|
||||
static oClass
|
||||
@@ -75,3 +102,5 @@ static function New( cText )
|
||||
::cValue := cText
|
||||
|
||||
return Self
|
||||
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user