Most recent changes are at the end of this file.
2 Sep 2000: Release 0.01 alpha.
5 Sep 2000: Release 0.02 alpha.
6 Sep 2000: Release 0.03 alpha.
14 Sep 2000: Release 0.04 alpha
26 Oct 2000: Release 0.05 alpha
24 Nov 2000: Release 0.06 alpha
30 Nov 2000: Release 0.07 alpha
18 March 2001: Release 0.08 alpha
3 Apr 2001: Release 0.09 alpha
Added support for alternative declaration syntax suggested by Stroustrup in D&E p. 46. See the end of cmm/readme.html.
7 May 2001: Release 0.10 alpha
Added support for embedded functions and autoblocks - see otherextensions.html
Various parser improvements.
Added -errorlevel for detailed control of parse-error diagnostics. See test46 in makefile.
Support for the new declaration syntax is now turned off by default. Turn back on again with the -newdeclsyntax.
8 Oct 2001: Release 0.11 alpha
better error messages, lots of bug fixes, and various new non-multimethod features such as the -remove-exceptioncode switch.
Autoblocks assumes tab stops are every 4 characters, and can be controlled within source code.
Uses new makefile system.
16 Apr 2002: Release 0.12 alpha
Supports asm(...);
Fixed bug in handling of lines starting with <space>#.
Accepts __asm ... (...);
Handles line continuations using trailing backslash at end of line.
14 May 2002: version 0.12.2
15 May 2002: version 0.12.3
15 May 2002: version 0.12.4
15 May 2002: version 0.12.5
15 July 2002: cmm_pragma_* identifiers are changed when read, so that subsequent parses work without applying the pragmas again. See test73.
23 Aug 2002: version 0.12.6
Included examples/overlap/main.cmmi and examples/overlap/main.cppextra in website (users.html has links to these files).
Made release.
3 Sep 2002: Added support for @cmm_memberrecursivefn, to enable easy serialisation support.
Added initial support for cmm -s - no link stage source processing needed.
31 Oct 2002: version 0.13
Fixed some bugs in cmm -s: fixed infinite loop when classname isn't found, fixed const virtual params, added cmm_debug_showall() to dispatch.h/cpp, cmm builds with msvc (can fail at runtime though), fixed singleton list of virtual fns in dispatch.cpp - is now a proper meyers-style singleton inside a wrapper function.
3 Nov 2002: version 0.14
added support for cmm_pragma_newdeclsyntax_on/off.
Fixed bug when a non-virtual param follows a virtual param.
made cmm look inside linkage blocks for classes - so it can now find std::exception when it's declared inside extern "C" {...}.
added better transformation of try..throw..catch: See -exceptions-exit/-exceptions-fudge and test84.
10 Nov 2002: version 0.15
3 Dec: added support for multiple inheritance (though doesn't warn against some compile-time ambiguities). test89.
4 Dec: fixed broken detection of duplicate virtual functions. tests 90 and 91.
18 Dec 2002. Checks for implementations with non-class derived types - used to crash cmm (test93). Treats `delete' as an operator. Used to fail to parse `expr,delete expr;' (test94). Handles ~ better in expressions (test95). Added support for `UL' after digits (test96). Handles `L' immediately before string constants (test97).
13 Jan 2003. Added experimental support for constant-time dispatch using small integers to identify types.
20 Jan 2003. made non-public release of version 0.16
fixed handling of <fn> throw() __attribute__();
.
29 Jan 2003. made non-public release of version 0.17
21 Feb 2003. added generation of <virtual
fnname>_cmm_getimpl
functions. made non-public release of version
0.18.
21 Feb 2003. regenerated all .html files with Amaya.
22 Feb 2003.
Added cmm_unregister_implementation()
. Clears all dispatch
caches for the relevent virtual function, and frees the data associated with
the implementation.
Modified generated code so that implementations don't register themselves
by creating a dummy int
that is initialised by a call to
cmm_register_implementation()
. Instead, they register themselves
by creating a static instance of a new class,
cmm_implementation_holder
(defined in dispatch.cpp). This
class's constructor calls cmm_register_implementation()
, and its
destructor calls cmm_unregister_implementation()
. This allows
dynamic libraries to be loaded and unloaded at will, with the internal
dispatch caches automatically being kept up to date.
Have also fixed minor bug - the small-int cache wasn't cleared when new implementations were registered. Would have only effected code that called multimethods before main() was entered.
Release 0.19
Removed separate build directory. All .o files are now placed in same directory as their source.
All test files generated in subdirectory testdir. Minor changes to docs.
3 March 2003. Release 0.20
Removed large preprocessor output files from release.
4 March 2003. Release 0.21
Made all test-generated filenames contain the host/build.
Makefile now supports Cygwin DLLs when testing dynamic linking support.
test103
is mapped to test103-unix
or
test103-cygwin
. test103-cygwin
uses
$(top_cygwin_dll)
which uses dlltool
to build a
Windows DLL.
Added support for struct foo
as first parameter to a
@cmm_memberreflectfn
function. Allows serialisation of C
structs.
Added testallbuilds-egcc
; as testallbuilds
, but
uses egcc/eg++, which are gcc 3.x in OpenBSD.
dispatch.cpp can use pthread_rwlock_t
instead of
pthread_mutex_t
in pthread builds. The default is still
pthread_mutex_t though.
31 March 2003. Release 0.22
Fixed possibly broken inclusion of debug headers in last release.
Cmm now warns if a function name suggests it is a mm implementation, but the parameters don't match the multimethod.
Improved diagnostics in dispatch.cpp
when a dispatch
fails.
Added list of names treated specially by cmm parser to output of cmm
-help
.
Started adding some support for caller-dispatch.
11 June 2003. Release 0.23
16 June 2003. Release 0.24
Added support for virtual parameters that are template types such as smart pointers, e.g.:
bool overlap( shared_ptr< virtual shape> a, shared_ptr< virtual shape> b);
bool overlap_( shared_ptr< static square> a, shared_ptr< static triangle> b){...}
Implementations are now required to have static
in front of
virtual parameters.
Generated code is given correct #line
numbers in the
generated file.
28 June 2003. Release 0.25.