2000-07-13 23:24 UTC+0200 JfL <jfl@mafact.com> & RaC <Rac@mafact.com>

This commit is contained in:
Jean-Francois Lefebvre
2000-07-13 21:31:38 +00:00
parent 9de1dac58e
commit a9a7231335
3 changed files with 71 additions and 10 deletions

View File

@@ -1,3 +1,11 @@
2000-07-13 23:24 UTC+0200 JfL <jfl@mafact.com> & RaC <Rac@mafact.com>
* source/rtl/tClass.prg
* Prepared for InitClass (Not working )
* source/rtl/tObject.prg
* Now Default :New and :Init method 'a la Class(y)'
* New(x,y,z) automatically call Init(x,y,z)
{ Very simple implementation limited to 20 params, will be changed asap }
2000-07-13 07:45 UTC+0800 Ron Pinkas <ron@profit-master.com>
* source/compiler/harbour.slx
* Corrected premature release of MACROTEXT
@@ -308,10 +316,10 @@
the proposed new Harbour Lexer. It is about half the size of the Flex Lexer and Harbour.exe is about 60K smaller.
This might help with 16bit mode and or memory limited situations. It belive it offers few benefits over Flex:
Simplicity, Readability, and Consitency of the rules.
More elegant look ahead/parsing capabilities.
Does not require a 3rd party tool (the Tokens & Rules table, is inserted into the Lexer by means of an #include directive.
it doesn't need to be "compiled" like the Flex.exe produces harbourl.c from harbour.l.
It is much smaller than the Flex generated Lexer.
More elegant look ahead/parsing capabilities.
Does not require a 3rd party tool (the Tokens & Rules table, is inserted into the Lexer by means of an #include directive.
it doesn't need to be "compiled" like the Flex.exe produces harbourl.c from harbour.l.
It is much smaller than the Flex generated Lexer.
Please note it is not yet optimized for speed, I would love to get your input/suggestion (Ryszard, Victor, Paul, ...).
In the process of resaerching the Lex phase I found many "problems" and tried to address them all. It now compiles
the full build including keywords.prg (3 compiler (yacc) errors), our previous lexer didn't fully parse keywords.prg

View File

@@ -44,7 +44,7 @@
* Use of __cls_param function to allow multiple superclass declaration
* Suppress of SetType and SetInit not more nedded
* Delegation and forwarding
* Reworking of hashing as dicRealloc
* Preparing the InitClass class method (not working !! )
*
* Copyright 1999 Eddie Runia <eddie@runia.com>
* Support for inheritance
@@ -79,6 +79,7 @@ FUNCTION TClass()
__clsAddMsg( s_hClass, "AddVirtual" , @AddVirtual() , HB_OO_MSG_METHOD )
__clsAddMsg( s_hClass, "Instance" , @Instance() , HB_OO_MSG_METHOD )
__clsAddMsg( s_hClass, "SetOnError" , @SetOnError() , HB_OO_MSG_METHOD )
__clsAddMsg( s_hClass, "InitClass" , @InitClass() , HB_OO_MSG_METHOD )
__clsAddMsg( s_hClass, "cSuper" , {| Self | iif( ::acSuper == NIL .OR. Len( ::acSuper ) == 0, NIL, ::acSuper[ 1 ] ) }, HB_OO_MSG_INLINE )
__clsAddMsg( s_hClass, "_cSuper" , {| Self, xVal | iif( ::acSuper == NIL .OR. Len( ::acSuper ) == 0, ( ::acSuper := { xVal } ), ::acSuper[ 1 ] := xVal ), xVal }, HB_OO_MSG_INLINE )
__clsAddMsg( s_hClass, "hClass" , 1, HB_OO_MSG_DATA )
@@ -361,3 +362,10 @@ STATIC PROCEDURE SetOnError( nFuncPtr )
RETURN
//----------------------------------------------------------------------------//
STATIC FUNCTION InitClass()
LOCAL Self := QSelf()
RETURN Self

View File

@@ -33,7 +33,21 @@
*
*/
/* WARNING: Can not use the preprocessor */
/*
* The following parts are Copyright of the individual authors.
* www - http://www.harbour-project.org
*
* Copyright 2000 J. Lefebvre <jfl@mafact.com> & RA. Cuylen <rac@mafact.com>
* Now supporting of New and Init method as Class(y) use it
* So oMyObj:new(Var1, Var2) will call oMyObj:Init(Var1, Var2)
* Currently limited to 20 params
*
* See doc/license.txt for licensing terms.
*
*/
/* WARNING: Can not use the preprocessor */
/* otherwise it will auto inherit from itself */
#include "common.ch"
#include "hboo.ch"
@@ -43,18 +57,24 @@ FUNCTION TObject()
LOCAL nScope := 1
IF s_oClass == NIL
s_oClass := TClass():New( "TObject", {} )
s_oClass:AddInline( "CLASSNAME" , {| Self | __OBJGETCLSNAME( Self ) }, nScope )
s_oClass:AddInline( "CLASSH" , {| Self | __CLASSH( Self ) }, nScope )
s_oClass:AddInline( "CLASSSEL" , {| Self | __CLASSSEL( Self:CLASSH() ) }, nScope )
s_oClass:AddMethod( "NEW" , @TObject_New() , nScope )
s_oClass:AddMethod( "INIT", @TObject_Init(), nScope )
/* For later use */
/*s_oClass:AddInline( "CLASS" , {|| s_oClass }, nScope )*/
/*s_oClass:AddInline( "EVAL" , {| Self | __EVAL( Self ) }, nScope ) */
/*s_oClass:AddInline( "ISDERIVEDFROM" , {| Self, xPar1 | __ObjDerivedFrom( Self, xPar1 ) }, nScope ) */
/* Those one exist within Class(y), so we will probably try to implement it */
/*s_oClass:AddInline( "INIT" , {| Self | Self }, nScope ) */
/*s_oClass:AddInline( "MSGNOTFOUND" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "ISKINDOF" , {| Self | }, nScope ) */
@@ -66,26 +86,51 @@ FUNCTION TObject()
/*s_oClass:AddInline( "isScalar" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "copy" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "deepCopy" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "deferred" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "exec" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "error , {| Self | }, nScope ) */
/*s_oClass:AddInline( "hash" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "null" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "size" , {| Self | Len( Self ) }, nScope ) */
/* Those three are already treated within Classes.c */
/*s_oClass:AddInline( "protectErr" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "hiddenErr" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "msgNotFound" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "readOnlyErr" , {| Self | }, nScope ) */
/* No idea when those two could occur !!? */
/*s_oClass:AddInline( "wrongClass" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "badMethod" , {| Self | }, nScope ) */
/* this one exist within VO and is Auto Called when object ran out of scope */
/* this one exist within VO and seem to be Auto Called when object ran out of scope */
/*s_oClass:AddInline( "Axit" , {| Self | }, nScope ) */
s_oClass:Create()
/* For later use */
/*s_oClass:InitClass()*/
ENDIF
RETURN s_oClass:Instance()
/* Currently limited to 20 param */
/* Will be re-written in C later to avoid this */
static function TObject_New(xPar0, xPar1, xPar2, xPar3, xPar4, xPar5, xPar6, xPar7, xPar8, xPar9, ;
xPar10,xPar11,xPar12,xPar13,xPar14,xPar15,xPar16,xPar17,xPar18,xPar19 )
local Self := QSelf()
return Self:Init(xPar0, xPar1, xPar2, xPar3, xPar4, xPar5, xPar6, xPar7, xPar8, xPar9, ;
xPar10,xPar11,xPar12,xPar13,xPar14,xPar15,xPar16,xPar17,xPar18,xPar19 )
static function TObject_Init()
local Self := QSelf()
return Self