ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º o:Clip º º An Object Oriented Extension to Clipper 5.01 º º (c) 1991 Peter M. Freese, CyberSoft º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ Version 1.01 - November 8, 1991 Change History [08/31/91] Version .90 Changed the syntax of the method definition to use '=' instead of comma as a delineator between and . This was done to allow greater compatability with Class(y) at the advice of Anton van Straaten. This new syntax also allows multiple method definitions to be comma separated, i.e., the follow is now legal: CLASS Foo METHOD New=FooNew, Bar=FooBar, Save, Debug VAR ...... ENDCLASS Removed the self() function. References to self() will now use the QSELF() function contained in Plankton. This reduces the code overhead by a slight amount, and should improve performance as well, since QSELF() is a Plankton operator rather than an external function. I would have used this function to begin with, but I was unaware of its existance until it was pointed out to me by Anton. Renamed some of the internal symbols to use 'IVAR' and 'SIVAR' instead of 'OVAR' and 'SOVAR' to be consistent with current buzzwords. There is still a problem with the debugger when using 'mangled' method names (i.e., MethodUDF <> MethodName). The debugger insists that the MethodName function does not exist. I'm still stumped on this one, but I have a feeling the problem may be in one of the Clipper __Class functions.... [09/01/91] Version .91 Eliminated the need to reference Self as a function - it is no longer necessary to use parens. This was done to allow compatability with Class(y) and SuperClass. This may require doing a global replace for "self()" -> "self" on method functions, but other than that, should not cause any problems. Removed the macro call in __DefineClass for the parent class function call. This call ensures that a new class's parent class definition function has been called before the subclass's class definition function. This is now accomplished via a code block, which should be faster as well as require less overhead, but requires a little more trickery on the preprocessor's part. Notice that an interim command state is necessary in order to convert the ParentClass to a function and then blockify. [09/21/91] Version .92 Added the ability to call an overridden method. This is accomplished by preceding the desired message with a "Parent" or "Super" message. For example, to call an overridden New method, we would use: obj:Parent:New Messages should not be chained after calling an overridden method, since they will not return a proper copy of self. This was done to allow Methods to return values other than self if desired. [10/15/91] Version 1.00 "Official release". Changes in this version were basically cosmetic, and involved an expanded doc file, and cleaning up the code for readability. [11/08/91] Version 1.01 Modified the code to call an overridden parent method. This fixes an infinite recursion bug that would occur if calling a parent method which called a parent method.