This is a list of the major changes I (Jamshid) made to GECOOL2.1 when
9. I made numerous changes that are workarounds for BC++ 3.1 bugs.
While none of these changes should cause JCOOL to be uncompilable by
other compilers, they should be removed soon. I've marked them with
"##" comments to make them easy to find and correct. They include:
a) 'inline' not allowed in class when declaring friends or ctor:
/*inline##*/ friend void f();
b) templates not allowed to mutually refer to each other (really
ugly workaround -- see Set.h,etc. and Envelope.h)
c) nested typedefs could not be used outside of class definition, so
member funcs had to be defined inside class or using real types in
parameter list or as return type.
d) BC++ headers defined some standard functions as macros with certain
optimizations (eg, -Oi). They should be inline funcs in C++.
e) you need the dummy-typedef Pair
d) Return values of type double are slightly off when used immediately
in an expression. In some places I used the workaround of first
assigns the value to a temporary.
8. I'm not including the 'man' directory from GECOOL, nor have I
updated it (I didn't even completely keep up with the header file
comments 🙁 ).
7. See the source files for specifics -- I always updated the History
6. Renamed Base_Binary_Node and Base_Binary_Tree files to base_bnn
and base_bnt since they clashed in the first 8 chars. I created a
base_bin.h file which includes both so that #include statements are
portable across file systems.
5. Redesigned Range
I'll be changing that back soon.
4. Several other things to make more correct/ANSI conforming/portable
(#if'd UNIX-specifics in Timer, long=>size_t, defined static data members,
made to use
3. Did away with obsolete form() in i/o. Uses
2. Completely did away with need for COOL's special cpp. The code now
uses real templates. Involved lots of tedious changes, but no major
redesign. I also had to work around lots of BC++ 3.1 bugs -- I'm
sure other current compilers will also need work.
1. Standardized header files -- no more #ifs hacks and extern "C"
declarations in COOL source. Code assumes ANSI C headers and that
they have extern "C" wrapper. I'd much rather (and did) hack the
environment than COOL source files.
--- Below are the 'changes' that came with GECOOL1.2 ---
This is the list of changes to COOL as distributed by Texas Instruments:
5. Add memory management with Handle and Shared classes. Avoid double deep
copies on return-by-value with Envelope.
4. The following classes are deleted: generic, exception, symbol, package.
Property list is reimplemented to provide conversion and type-checking at
run time and compile time.
3. Remove macro from the library.
Macros depend on COOL cpp, which is non standard, slow, and impossible
to maintain (gotos, finite-state-machine).
Macros are replaced by #defines, inlines, or by copy-code.
2. Remove exception handling from library.
RAISE(error, ...) has been replaced with printf(...) followed by abort().
The resumptive exception will be reimplemented with strings instead of
symbols, and without setjmp, longjmp.
1. Remove generic class from all classes.
The runtime type-checking in Ice requires the use of global symbols,
and maintenance of a data-base file sym_package.p at compilation time.