Index: xotcl/ChangeLog =================================================================== diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/ChangeLog (.../ChangeLog) (revision 20e421dc641dc39b53106b1296ac7e09d0b206f2) +++ xotcl/ChangeLog (.../ChangeLog) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -1,3 +1,122 @@ +2007-08-06: + * Changed all references to /tmp to [::xotcl::tmpdir] to honor + TMPDIR TEMP TMP if set + + * Handling of variable traces in serializer: + traces might require a different topological sort, + which is hard to handle. Similar as with filters, + we deactivate the variable traces during initialization. + This happens by + (1) replacing the XOTcl's trace method by a no-op + (2) collecting variable traces through collect-var-traces + (3) re-activating the traces after variable initialization + + (Many thanks to Stefan Sobernig for the help!) + +2007-08-05: + * Changes to compile xotcl with the new Var structures in the + head version of Tcl 8.5. This is a rather large change, + the patch is more than 800 lines. + + (Many thanks to Miguel Sofer for the help!) + + From the Tcl Changelog + + *** POTENTIAL INCOMPATIBILITY *** (tclInt.h and tclCompile.h) + Extensions that access internals defined in tclInt.h and/or + tclCompile.h may lose both binary and source compatibility. The + relevant changes are: + + 1. 'struct Var' is completely changed, all acceses to its + internals (either direct or via the TclSetVar* and TclIsVar* + macros) will malfunction. Var flag values and semantics + changed too. + + 2. 'struct Bytecode' has an additional field that has to be + initialised to NULL + + 3. 'struct Namespace' is larger, as the varTable is now one + pointer larger than a Tcl_HashTable. Direct access to its + fields will malfunction. + + 4. 'struct CallFrame' grew one more field (the second such + growth with respect to Tcl8.4). + + 5. api change for the functions TclFindCompiledLocal, + TclDeleteVars and many internal functions in tclVar.c + +2007-07-27: + * fixed a compile problem with a superfluous semicolon in a macro + (Many thanks for Andreas Kupries for reporting and sending a patch) + * fixed two compiler warnings in gcc 4.1.2 + +2007-07-23 + * Pre-Release of XOTcl 1.5.4 + +2007-07-23: + * fixed a bug with empty argument names + (Many thanks for Stefan Sobernig for reporting the bug) + +2007-07-03: + * allow to call methods from the class to be called + from slot objects (Many thanks for + Nico L'INSALATA for noting this problem). + +2007-06-05: + * Fixed spelling mistakes in the tutorial + (Many thanks to Robert Hicks for reporting) + +2007-05-27: + * Fixed potential error with default values for parameters + starting with a "-". (Many thanks to Shishir Ramam + for reporting) + +2007-03-16: + * fixed a bug where a Tcl call adds a namespace to an object, + but xotcl did not notice it. (Many thanks for Stefan Sobernig + for reporting the bug) + +2007-01-14: + * fixing error message propagation for methods called via + configure. (Many thanks for Kristoffer Lawson + for reporting the bug) + +2006-12-12 + * changing "test == " to "test =" as required by FreeBSD + (many thanks to Martin Matuska for providing + the patch) + +2006-12-07 + * MinGW patches + (many thanks to Martin Matuska for providing + the patch) + +2006-11-25 + * Release of XOTcl 1.5.3 + +2006-11-24 + * provided compatibility with Tcl 8.5 + (checking callframe level instead of empty varframe for toplevel + frames) + + * provided compatibility with Tcl 8.4.14 + proc->cmdPtr was used in prior releases only to determine the + namespace in which the proc is executed (documented in + tclInt.h). Starting with Tcl 8.4.14, this cmdPtr is used as + well for updating the client data of a cmd, in case the proc is + recompiled. Since XOTcl used the cmdPtr to control the + namespace, this code had to be rewritten differently. The new + version is faster, but uses for filters or mixins slightly more + storage. + + * reduced calling overhead of methods with nonpositional arguments + by about 10 percent by avoiding shimmering. + + * fixed handling of "return -code break" from xotcl methods + (thanks to Artur Trzewik for the bug report) + + * library/comm/Access.xotcl: fixed handling of chunked encoding + 2006-09-29 , Uwe Zdun * Release of XOTcl 1.5.2 Index: xotcl/Makefile =================================================================== diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/Makefile (.../Makefile) (revision 20e421dc641dc39b53106b1296ac7e09d0b206f2) +++ xotcl/Makefile (.../Makefile) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -12,25 +12,25 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: Makefile,v 1.41 2006/10/04 20:40:23 neumann Exp $ +# RCS: @(#) $Id: Makefile,v 1.42 2007/08/06 11:35:56 neumann Exp $ #======================================================================== # Add additional lines to handle any additional AC_SUBST cases that # have been added in a customized configure script. #======================================================================== -#XOTCL_VERSION = 1.5.3 +#XOTCL_VERSION = 1.5.4 XOTCL_VERSION = 1.5 src_lib_dir = ${srcdir}/library src_doc_dir = ${srcdir}/doc src_test_dir = ${srcdir}/tests src_app_dir = ${srcdir}/apps src_generic_dir = ${srcdir}/generic -TCL_LIB_SPEC = -L/Users/neumann/src/tcl8.4.12/unix -ltcl8.4 +TCL_LIB_SPEC = -L/usr/local/aolserver45/lib -ltcl8.4 TK_LIB_SPEC = subdirs = -aol_prefix = /usr/local/aolserver +aol_prefix = /usr/local/aolserver45 # Requires native paths PLATFORM_DIR = `echo $(srcdir)/unix` @@ -98,23 +98,23 @@ # configuration options) composed of the named objects. #======================================================================== -PKG_LIB_FILE = libxotcl1.5.3.dylib -PKG_STUB_LIB_FILE = libxotclstub1.5.3.a +PKG_LIB_FILE = libxotcl1.5.4.dylib +PKG_STUB_LIB_FILE = libxotclstub1.5.4.a lib_BINARIES = $(PKG_LIB_FILE) $(PKG_STUB_LIB_FILE) BINARIES = $(lib_BINARIES) SHELL = /bin/sh srcdir = . -prefix = /usr/local -exec_prefix = /usr/local +prefix = /usr/local/aolserver45 +exec_prefix = /usr/local/aolserver45 bindir = ${exec_prefix}/bin -libdir = /usr/local/lib -datadir = /usr/local/share +libdir = /usr/local/aolserver45/lib +datadir = /usr/local/aolserver45/share mandir = ${prefix}/man -includedir = /usr/local/include +includedir = /usr/local/aolserver45/include DESTDIR = @@ -126,7 +126,7 @@ INSTALL_SCRIPT = ${INSTALL} PACKAGE_NAME = xotcl -PACKAGE_VERSION = 1.5.3 +PACKAGE_VERSION = 1.5.4 CC = gcc -pipe CFLAGS_DEFAULT = -Os CFLAGS_WARNING = -Wall -Wno-implicit-int @@ -143,19 +143,19 @@ SHLIB_CFLAGS = -fno-common SHLIB_LD = ${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT} -Wl,-single_module SHLIB_LD_FLAGS = @SHLIB_LD_FLAGS@ -SHLIB_LD_LIBS = ${LIBS} -L/Users/neumann/src/tcl8.4.12/unix -ltclstub8.4 +SHLIB_LD_LIBS = ${LIBS} -L/usr/local/aolserver45/lib -ltclstub8.4 STLIB_LD = ${AR} cr -TCL_DEFS = -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_COREFOUNDATION=1 -DHAVE_LIBKERN_OSATOMIC_H=1 -DHAVE_OSSPINLOCKLOCK=1 -DHAVE_COPYFILE=1 -DMAC_OSX_TCL=1 -DUSE_VFORK=1 -DTCL_DEFAULT_ENCODING=\"utf-8\" -DTCL_LOAD_FROM_MEMORY=1 -DTCL_IO_TRACK_OS_FOR_DRIVER_WITH_BAD_BLOCKING=1 -DTCL_WIDE_INT_TYPE=long\ long -DWORDS_BIGENDIAN=1 -DHAVE_GETCWD=1 -DHAVE_OPENDIR=1 -DHAVE_STRSTR=1 -DHAVE_STRTOL=1 -DHAVE_STRTOLL=1 -DHAVE_STRTOULL=1 -DHAVE_TMPNAM=1 -DHAVE_WAITPID=1 -DUSE_TERMIOS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TM_ZONE=1 -DHAVE_GMTIME_R=1 -DHAVE_LOCALTIME_R=1 -DHAVE_TM_GMTOFF=1 -DHAVE_ST_BLKSIZE=1 -DSTDC_HEADERS=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_PUTENV_THAT_COPIES=1 -DHAVE_LANGINFO=1 -DHAVE_FTS=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_FILIO_H=1 -TCL_BIN_DIR = /Users/neumann/src/tcl8.4.12/unix -TCL_SRC_DIR = /Users/neumann/src/tcl8.4.12 +TCL_DEFS = -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DHAVE_PTHREAD_ATTR_SETSTACKSIZE=1 -DHAVE_PTHREAD_ATFORK=1 -DTCL_THREADS=1 -DHAVE_COREFOUNDATION=1 -DMAC_OSX_TCL=1 -DTCL_WIDE_INT_TYPE=long\ long -DHAVE_GETCWD=1 -DHAVE_OPENDIR=1 -DHAVE_STRSTR=1 -DHAVE_STRTOL=1 -DHAVE_STRTOLL=1 -DHAVE_STRTOULL=1 -DHAVE_TMPNAM=1 -DHAVE_WAITPID=1 -DHAVE_GETPWUID_R_5=1 -DHAVE_GETPWUID_R=1 -DHAVE_GETPWNAM_R_5=1 -DHAVE_GETPWNAM_R=1 -DHAVE_GETGRGID_R_5=1 -DHAVE_GETGRGID_R=1 -DHAVE_GETGRNAM_R_5=1 -DHAVE_GETGRNAM_R=1 -DHAVE_MTSAFE_GETHOSTBYNAME=1 -DHAVE_MTSAFE_GETHOSTBYADDR=1 -DUSE_TERMIOS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TM_ZONE=1 -DHAVE_GMTIME_R=1 -DHAVE_LOCALTIME_R=1 -DHAVE_TM_GMTOFF=1 -DHAVE_ST_BLKSIZE=1 -DSTDC_HEADERS=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_PUTENV_THAT_COPIES=1 -DHAVE_LANGINFO=1 -DHAVE_COPYFILE=1 -DHAVE_LIBKERN_OSATOMIC_H=1 -DHAVE_OSSPINLOCKLOCK=1 -DHAVE_PTHREAD_ATFORK=1 -DUSE_VFORK=1 -DTCL_DEFAULT_ENCODING=\"utf-8\" -DTCL_LOAD_FROM_MEMORY=1 -DHAVE_AVAILABILITYMACROS_H=1 -DHAVE_FTS=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_FILIO_H=1 +TCL_BIN_DIR = /usr/local/aolserver45/lib +TCL_SRC_DIR = /usr/local/src/aolserver45/tcl8.4.15 # This is necessary for packages that use private Tcl headers -#TCL_TOP_DIR_NATIVE = "/Users/neumann/src/tcl8.4.12" +#TCL_TOP_DIR_NATIVE = "/usr/local/src/aolserver45/tcl8.4.15" # Not used, but retained for reference of what libs Tcl required TCL_LIBS = ${DL_LIBS} ${LIBS} ${MATH_LIBS} -pkgdatadir = /usr/local/share/xotcl1.5.3 -pkglibdir = /usr/local/lib/xotcl1.5.3 -pkgincludedir = /usr/local/include/xotcl1.5.3 +pkgdatadir = /usr/local/aolserver45/share/xotcl1.5.4 +pkglibdir = /usr/local/aolserver45/lib/xotcl1.5.4 +pkgincludedir = /usr/local/aolserver45/include/xotcl1.5.4 # XOTCLSH = xotclsh @@ -171,20 +171,20 @@ DYLD_LIBRARY_PATH="$(EXTRA_PATH):$(DYLD_LIBRARY_PATH)" \ PATH="$(EXTRA_PATH):$(PATH)" \ TCLLIBPATH="$(top_builddir) ${srcdir}" -TCLSH_PROG = /Users/neumann/src/tcl8.4.12/unix/tclsh +TCLSH_PROG = /usr/local/aolserver45/bin/tclsh8.4 TCLSH = $(TCLSH_ENV) $(TCLSH_PROG) SHARED_BUILD = 1 -INCLUDES = -I"/Users/neumann/src/tcl8.4.12/generic" -I"/Users/neumann/src/tcl8.4.12/unix" -I./generic -EXTRA_CFLAGS = -DXOTCLVERSION=\"1.5\" -DXOTCLPATCHLEVEL=\".3\" -DHAVE_TCL_COMPILE_H=1 +INCLUDES = -I"/usr/local/src/aolserver45/tcl8.4.15/generic" -I"/usr/local/src/aolserver45/tcl8.4.15/unix" -I./generic +EXTRA_CFLAGS = -DXOTCLVERSION=\"1.5\" -DXOTCLPATCHLEVEL=\".4\" -DHAVE_TCL_COMPILE_H=1 # TCL_DEFS is not strictly need here, but if you remove it, then you # must make sure that configure.in checks for the necessary components # that your library may use. TCL_DEFS can actually be a problem if # you do not compile with a similar machine setup as the Tcl core was # compiled with. -#DEFS = $(TCL_DEFS) -DPACKAGE_NAME=\"xotcl\" -DPACKAGE_TARNAME=\"xotcl\" -DPACKAGE_VERSION=\"1.5.3\" -DPACKAGE_STRING=\"xotcl\ 1.5.3\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DWORDS_BIGENDIAN=1 -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DTCL_WIDE_INT_TYPE=long\ long -DUSE_TCL_STUBS=1 -DCOMPILE_XOTCL_STUBS=1 $(EXTRA_CFLAGS) -DEFS = -DPACKAGE_NAME=\"xotcl\" -DPACKAGE_TARNAME=\"xotcl\" -DPACKAGE_VERSION=\"1.5.3\" -DPACKAGE_STRING=\"xotcl\ 1.5.3\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DWORDS_BIGENDIAN=1 -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DTCL_WIDE_INT_TYPE=long\ long -DUSE_TCL_STUBS=1 -DCOMPILE_XOTCL_STUBS=1 $(EXTRA_CFLAGS) +#DEFS = $(TCL_DEFS) -DPACKAGE_NAME=\"xotcl\" -DPACKAGE_TARNAME=\"xotcl\" -DPACKAGE_VERSION=\"1.5.4\" -DPACKAGE_STRING=\"xotcl\ 1.5.4\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DTCL_WIDE_INT_TYPE=long\ long -DUSE_TCL_STUBS=1 -DCOMPILE_XOTCL_STUBS=1 $(EXTRA_CFLAGS) +DEFS = -DPACKAGE_NAME=\"xotcl\" -DPACKAGE_TARNAME=\"xotcl\" -DPACKAGE_VERSION=\"1.5.4\" -DPACKAGE_STRING=\"xotcl\ 1.5.4\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DTCL_WIDE_INT_TYPE=long\ long -DUSE_TCL_STUBS=1 -DCOMPILE_XOTCL_STUBS=1 $(EXTRA_CFLAGS) CONFIG_CLEAN_FILES = Makefile xotclConfig.sh apps/utils/xotclsh apps/utils/xowish unix/xotcl.spec unix/pkgIndex.unix autom4te.cache/ @@ -292,7 +292,15 @@ mkdir -p $(DESTDIR)$(pkglibdir)/apps/$$i; \ chmod 755 $(DESTDIR)$(pkglibdir)/apps/$$i; \ for j in $(src_app_dir)/$$i/* ; do \ + if test -d $$j; then \ + mkdir -p $(DESTDIR)$(pkglibdir)/$$j; \ + chmod 755 $(DESTDIR)$(pkglibdir)/$$j; \ + for k in $$j/* ; do \ + $(INSTALL) $$k $(DESTDIR)$(pkglibdir)/$$j ; \ + done; \ + else \ $(INSTALL) $$j $(DESTDIR)$(pkglibdir)/apps/$$i/; \ + fi; \ done; \ done; @for i in $(appsrc) ; do \ @@ -626,7 +634,7 @@ @echo " setenv TCLLIBPATH \"$(TCLLIBPATH)\"" @echo " and" @if test "x$(XOTCLSH)" = "x" ; then \ - echo " /Users/neumann/src/tcl8.4.12/unix/tclsh" ; \ + echo " /usr/local/aolserver45/bin/tclsh8.4" ; \ echo " package require XOTcl; namespace import -force xotcl::*" ; \ echo " or" ; \ echo " put the 'package require' line into your ~/.tclshrc" ; \ Index: xotcl/Makefile.in =================================================================== diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/Makefile.in (.../Makefile.in) (revision 20e421dc641dc39b53106b1296ac7e09d0b206f2) +++ xotcl/Makefile.in (.../Makefile.in) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -12,7 +12,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: Makefile.in,v 1.21 2006/10/04 20:40:23 neumann Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.22 2007/08/06 11:35:56 neumann Exp $ #======================================================================== # Add additional lines to handle any additional AC_SUBST cases that @@ -292,7 +292,15 @@ mkdir -p $(DESTDIR)$(pkglibdir)/apps/$$i; \ chmod 755 $(DESTDIR)$(pkglibdir)/apps/$$i; \ for j in $(src_app_dir)/$$i/* ; do \ + if test -d $$j; then \ + mkdir -p $(DESTDIR)$(pkglibdir)/$$j; \ + chmod 755 $(DESTDIR)$(pkglibdir)/$$j; \ + for k in $$j/* ; do \ + $(INSTALL) $$k $(DESTDIR)$(pkglibdir)/$$j ; \ + done; \ + else \ $(INSTALL) $$j $(DESTDIR)$(pkglibdir)/apps/$$i/; \ + fi; \ done; \ done; @for i in $(appsrc) ; do \ Index: xotcl/apps/comm/get-regression-nb.xotcl =================================================================== diff -u -rbb3c756fb47517596b9dbcb4e580aa1212827b41 -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/apps/comm/get-regression-nb.xotcl (.../get-regression-nb.xotcl) (revision bb3c756fb47517596b9dbcb4e580aa1212827b41) +++ xotcl/apps/comm/get-regression-nb.xotcl (.../get-regression-nb.xotcl) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -78,7 +78,7 @@ # # -set CACHE_DIR /tmp +set CACHE_DIR [::xotcl::tmpdir] package require xotcl::comm::httpAccess package require xotcl::trace Index: xotcl/apps/comm/webserver.xotcl =================================================================== diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/apps/comm/webserver.xotcl (.../webserver.xotcl) (revision 1aa7246cc8e44078c9dbd33e03992478615f314f) +++ xotcl/apps/comm/webserver.xotcl (.../webserver.xotcl) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -1,15 +1,16 @@ #!../../src/xotclsh -# $Id: webserver.xotcl,v 1.6 2006/09/27 08:12:39 neumann Exp $ +# $Id: webserver.xotcl,v 1.7 2007/08/06 11:35:56 neumann Exp $ array set opts {-root ../../doc -port 8086 -protected-port 9096 -pkgdir .} array set opts $argv lappend auto_path $opts(-pkgdir) #if {$::tcl_platform(platform) eq "windows"} {lappend auto_path .} package require XOTcl; namespace import -force xotcl::* proc ! string { - set f [open /tmp/log w+]; + set f [open [::xotcl::tmpdir]/log w+]; puts $f "[clock format [clock seconds]] $string" - close $f} + close $f +} @ @File { description { Index: xotcl/apps/scripts/soccerClub.xotcl =================================================================== diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/apps/scripts/soccerClub.xotcl (.../soccerClub.xotcl) (revision 1aa7246cc8e44078c9dbd33e03992478615f314f) +++ xotcl/apps/scripts/soccerClub.xotcl (.../soccerClub.xotcl) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -1,4 +1,4 @@ -# $Id: soccerClub.xotcl,v 1.4 2006/09/27 08:12:39 neumann Exp $ +# $Id: soccerClub.xotcl,v 1.5 2007/08/06 11:35:56 neumann Exp $ # This is a simple introductory example for the language XOTcl. # It demonstrates the basic language constructs on the example of # a soccer club. @@ -114,7 +114,7 @@ # get an error message: $fb check all if {[catch {$fb set playerRole SINGER} errMsg]} { - puts "CATCHED EXCEPTION: playerRole has either to be NONE, PLAYER, or TRAINER" + puts "CAUGHT EXCEPTION: playerRole has either to be NONE, PLAYER, or TRAINER" # turn assertion checking off again and reset to PLAYER $fb check {} $fb set playerRole PLAYER @@ -163,7 +163,7 @@ $fb class President # Check that the playerRole isn't there anymore. if {[catch {$fb set playerRole} errMsg]} { - puts "CATCHED EXCEPTION: The player role doesn't exist anymore (as it should be after the class change)" + puts "CAUGHT EXCEPTION: The player role doesn't exist anymore (as it should be after the class change)" } # But still Franz Beckenbauer can entertain us with what he believes Index: xotcl/apps/utils/xotclsh =================================================================== diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/apps/utils/xotclsh (.../xotclsh) (revision 1aa7246cc8e44078c9dbd33e03992478615f314f) +++ xotcl/apps/utils/xotclsh (.../xotclsh) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -1,7 +1,7 @@ -#!/Users/neumann/src/tcl8.4.12/unix/tclsh +#!/usr/local/aolserver45/bin/tclsh8.4 if {$argc == 0} { puts "Don't use [info script] as interactive shell! Use instead:" - puts " /Users/neumann/src/tcl8.4.12/unix/tclsh" + puts " /usr/local/aolserver45/bin/tclsh8.4" puts " package require XOTcl; namespace import ::xotcl::*" } else { package require XOTcl Index: xotcl/apps/utils/xowish =================================================================== diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/apps/utils/xowish (.../xowish) (revision 1aa7246cc8e44078c9dbd33e03992478615f314f) +++ xotcl/apps/utils/xowish (.../xowish) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -1,5 +1,5 @@ #!@WISH_PROG@ -###!/Users/neumann/src/tcl8.4.12/unix/tclsh +###!/usr/local/aolserver45/bin/tclsh8.4 ###package require Tk if {$argc == 0} { puts "Don't use [info script] as interactive shell! Use instead:" Index: xotcl/configure =================================================================== diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/configure (.../configure) (revision 20e421dc641dc39b53106b1296ac7e09d0b206f2) +++ xotcl/configure (.../configure) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for xotcl 1.5.3. +# Generated by GNU Autoconf 2.59 for xotcl 1.5.4. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation @@ -267,8 +267,8 @@ # Identity of this package. PACKAGE_NAME='xotcl' PACKAGE_TARNAME='xotcl' -PACKAGE_VERSION='1.5.3' -PACKAGE_STRING='xotcl 1.5.3' +PACKAGE_VERSION='1.5.4' +PACKAGE_STRING='xotcl 1.5.4' PACKAGE_BUGREPORT='' # Factoring default headers for most tests. @@ -777,7 +777,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xotcl 1.5.3 to adapt to many kinds of systems. +\`configure' configures xotcl 1.5.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -834,7 +834,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xotcl 1.5.3:";; + short | recursive ) echo "Configuration of xotcl 1.5.4:";; esac cat <<\_ACEOF @@ -979,7 +979,7 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -xotcl configure 1.5.3 +xotcl configure 1.5.4 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -993,7 +993,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xotcl $as_me 1.5.3, which was +It was created by xotcl $as_me 1.5.4, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1572,7 +1572,7 @@ # do not modify the following lines manually, they are generated with changeXOTclVersion XOTCL_MAJOR_VERSION=1 XOTCL_MINOR_VERSION=5 -XOTCL_RELEASE_LEVEL=.3 +XOTCL_RELEASE_LEVEL=.4 XOTCL_VERSION=${XOTCL_MAJOR_VERSION}.${XOTCL_MINOR_VERSION} NODOT_VERSION=${XOTCL_MAJOR_VERSION}${XOTCL_MINOR_VERSION} @@ -10107,6 +10107,8 @@ # XOTcl specific configs # +if test "${TEA_PLATFORM}" != "windows" ; then + XOTCL_BUILD_LIB_SPEC="-L`pwd` -lxotcl${PACKAGE_VERSION}" XOTCL_LIB_SPEC="-L${pkglibdir} -lxotcl${PACKAGE_VERSION}" @@ -10127,14 +10129,25 @@ fi +else +XOTCL_BUILD_LIB_SPEC="`pwd`/${PKG_LIB_FILE}" +XOTCL_LIB_SPEC="${pkglibdir}/${PKG_LIB_FILE}" +XOTCL_BUILD_STUB_LIB_PATH="`pwd`/${PKG_STUB_LIB_FILE}" +XOTCL_STUB_LIB_PATH="${pkglibdir}/${PKG_STUB_LIB_FILE}" +XOTCL_BUILD_STUB_LIB_SPEC="`pwd`/${PKG_STUB_LIB_FILE}" +XOTCL_STUB_LIB_SPEC="${pkglibdir}/${PKG_STUB_LIB_FILE}" +fi + + + XOTCL_SRC_DIR=$srcdir @@ -10570,7 +10583,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by xotcl $as_me 1.5.3, which was +This file was extended by xotcl $as_me 1.5.4, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -10625,7 +10638,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -xotcl config.status 1.5.3 +xotcl config.status 1.5.4 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" @@ -11206,7 +11219,7 @@ for subdir in ${subdirs} do echo "==================== configure $subdir =====================" - if test x"${srcdir}" == x. ; then + if test x"${srcdir}" = x. ; then confdir=. else mkdir -p $subdir @@ -11241,3 +11254,5 @@ + + Index: xotcl/configure.in =================================================================== diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/configure.in (.../configure.in) (revision 20e421dc641dc39b53106b1296ac7e09d0b206f2) +++ xotcl/configure.in (.../configure.in) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -11,7 +11,7 @@ # for this package, and can be a relative path, such as: # #-------------------------------------------------------------------- -define(XOTclVersion, 1.5.3) +define(XOTclVersion, 1.5.4) AC_INIT([xotcl], [XOTclVersion]) #-------------------------------------------------------------------- @@ -104,7 +104,7 @@ # do not modify the following lines manually, they are generated with changeXOTclVersion XOTCL_MAJOR_VERSION=1 XOTCL_MINOR_VERSION=5 -XOTCL_RELEASE_LEVEL=.3 +XOTCL_RELEASE_LEVEL=.4 XOTCL_VERSION=${XOTCL_MAJOR_VERSION}.${XOTCL_MINOR_VERSION} NODOT_VERSION=${XOTCL_MAJOR_VERSION}${XOTCL_MINOR_VERSION} @@ -361,6 +361,8 @@ # XOTcl specific configs # +if test "${TEA_PLATFORM}" != "windows" ; then + XOTCL_BUILD_LIB_SPEC="-L`pwd` -lxotcl${PACKAGE_VERSION}" XOTCL_LIB_SPEC="-L${pkglibdir} -lxotcl${PACKAGE_VERSION}" @@ -378,6 +380,17 @@ AC_DEFINE(COMPILE_XOTCL_STUBS) fi +else + +XOTCL_BUILD_LIB_SPEC="`pwd`/${PKG_LIB_FILE}" +XOTCL_LIB_SPEC="${pkglibdir}/${PKG_LIB_FILE}" +XOTCL_BUILD_STUB_LIB_PATH="`pwd`/${PKG_STUB_LIB_FILE}" +XOTCL_STUB_LIB_PATH="${pkglibdir}/${PKG_STUB_LIB_FILE}" +XOTCL_BUILD_STUB_LIB_SPEC="`pwd`/${PKG_STUB_LIB_FILE}" +XOTCL_STUB_LIB_SPEC="${pkglibdir}/${PKG_STUB_LIB_FILE}" + +fi + AC_SUBST(SHARED_LIB_SUFFIX) AC_SUBST(UNSHARED_LIB_SUFFIX) AC_SUBST(XOTCL_BUILD_LIB_SPEC) @@ -439,7 +452,7 @@ for subdir in ${subdirs} do echo "==================== configure $subdir =====================" - if test x"${srcdir}" == x. ; then + if test x"${srcdir}" = x. ; then confdir=. else mkdir -p $subdir @@ -474,3 +487,5 @@ + + Index: xotcl/doc/langRef.xotcl =================================================================== diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/doc/langRef.xotcl (.../langRef.xotcl) (revision 20e421dc641dc39b53106b1296ac7e09d0b206f2) +++ xotcl/doc/langRef.xotcl (.../langRef.xotcl) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -1,4 +1,4 @@ -# $Id: langRef.xotcl,v 1.14 2006/10/04 20:40:23 neumann Exp $ +# $Id: langRef.xotcl,v 1.15 2007/08/06 11:35:56 neumann Exp $ package provide XOTcl-langRef 1.5.2 package require XOTcl @@ -124,7 +124,7 @@ } - date { $Date: 2006/10/04 20:40:23 $ } + date { $Date: 2007/08/06 11:35:56 $ } } ## @@ -230,7 +230,7 @@ } { Description { Resets an object or class into an initial state, as after construction. - Called during recreation process by the method recreate. + Called during recreation process by the method 'recreate' } return "empty string" } @@ -239,18 +239,11 @@ ?args? "'-' method calls" } { Description { - Calls the '-' (dash) methods. This method evaluates its argument list - and calls everything starting with '-' (followed by an alpha character) - as a method. Every list element until the next '-' is interpreted as an - argument of the called method. XOTcl supports argument lists with a variable - number of arguments. If an argument of a method called this way starts - with a "-", the call can be placed safely - into a list (e.g. "Class c [-strangearg -a-] -simplearg 2") to avoid - the interpretation of "a-" as a method. -

The method configure is called automatically by - the default create and recreate methods after - the default values are set.

-

+ Calls the '-' (dash) methods. I.e. evaluates arguments and calls + everything starting with '-' (and not having a digit a + second char) as a method. Every list element until the next '-' + is interpreted as a method argument. configure/tt> is called + before the constructor during initialization and recreation. In the following example, the variable set is called via configure before init: <@pre class='code'> Object o -set x 4 @@ -477,19 +470,7 @@ return "1 or 0" } -@ Object instproc init { - args "argument list" -} { - Description { - The method <@tt>init is called automatically by the default - <@tt>create method on initialized - objects (the default variables are set, the configure - methods are already performed). This method is solely a user hook for - applications to perform class specific initialzation after object creation. - } -} - @ Object instproc incr { varName "variable name" ?increment? "value to increment" @@ -931,18 +912,18 @@ } @ Class instproc alloc { obj "new obj/class name" - ?args? "arguments passed during creation" + ?args? "arguments passed to the new class after creation" } { description { - Allocate (create) an uninitialized object or class. Typically, alloc - is called automatically by <@tt>create<@/tt> - to allocate an uninitialized object or class. - In contrast to alloc, <@tt>create<@/tt> also - initializes and configures the object. - The method alloc can be used by a programmer who may want to - create uninitialized objects/classes. + Allocate memory for a new XOTcl object or class. <@tt>create<@/tt> uses + <@tt>alloc to allocate memory. But <@tt>create<@/tt> also + calls init and evaluates '-' arguments as method calls. + In seldom cases the programmer may want to suppress the + <@tt>create<@/tt> + mechanism and just allocate memory. Then <@tt>alloc can + be used. } - return "fully qualified name of created instance" + return "new class name" } @ Class instproc allinstances { @@ -960,25 +941,24 @@ description { Create user-defined classes or objects. If the class is a meta-class, a class is created, otherwise an object. - The object creation protocol implemened by create works as follows: -

    -
  • create firstly calls <@tt>alloc - in order to create an uninitialized object or class. -
  • In the second step, the - default values for parameters are searched on superclasses and set in the created object. -
  • In the third step, the method <@tt>configure - is called with the passed - argument list to configure the object/class. -
  • Finally the constructor <@tt>init is called on the object - with all arguments up to the first '-' argument (as returned by configure). -
-

In the default XOTcl definition, the <@tt>create method - is called implicitly by the <@tt>unknown method of the metaclass - Class, when a class (meta-class) is called with an unknown - method. E.g. the following two commands are equivalent + Create firstly calls <@tt>alloc in order to allocate memory for the + new object. Then default values for parameters are searched on + superclasses (an set if found). Then <@tt>args is searched for args + starting with '-' followed by an alpha character. These arguments + are called as methods. '-' followed by a numerical is interpreted + as a negative number (and not as a method). If a value of a method + called this way starts with a "a", the call can be placed safely + into a list (e.g. "Class c [-strangearg -a-] -simplearg 2"). + Finally the constructor <@tt>init is called on the object + with all arguments up to the first '-' arg.<@p> + + The <@tt>create method is called implicitly through the + <@tt>unknown + mechanism when a class (meta-class) is called with an unknown + method. E.g. the following two commands are equivalent + <@pre class='code'> Car herby -color red Car create herby -color red <@/pre> @@ -991,9 +971,8 @@ <@pre class='code'> Class Car -init -superclass Vehicle <@/pre> - See also: <@tt>recreate } - return "fully qualified name of the created instance (result of alloc)" + return "name of the created instance (result of alloc)" } @ Class instproc info { @@ -1237,7 +1216,7 @@ @ Class instproc instproc { name "instance method name" - "?non-pos-args?" "optional non-positional arguments" + ?non-pos-args?" "optional non-positional arguments" args "instance method arguments" body "instance method body" "?preAssertion?" "optional assertions that must hold before the proc executes" @@ -1269,7 +1248,7 @@ If <@tt>-childof obj is specified, the new object is created as a child of the specified object. } - return "fully qualified name of the created instance" + return "new object name" } @ Class instproc parameter { @@ -1328,28 +1307,13 @@ ?args? "arbitrary arguments" } { description { - Hook called upon recreation of an object in cases where the user wants to distinguish - between creation and recreation of objects. A recreation occurs, when an Object is created - with a name that exists already. - A typical use-case is the redefinition - of classes in and IDE, where the relations between classes/classes and object/classes - should be preserved (this is different to a destroy of the object). - -

The method recreate does not need to call alloc - but calls instead cleanup - to reset to the object (or class) to its initial state (e.g. remove variables, child objects, - for classes remove instaces, etc.). Then it performs the standard initialization - for the object or class. - -

If recreate is overloaded and the default recreate method is called via next, - the pre-part - (before next) contains its old state of the object, while during the part after next the - object is cleaned up. -

To ease recreation of classes, see configure softrecreate. - - See also: <@tt>create + Hook called upon recreation of an object. Performs standard object + initialization, per default. May be overloaded/-written. It calls + another method cleanup which handles actual cleanup of the object + during next. That means, if you overload recreate, in the pre-part + the object still contains its old state, after next it is cleaned up. } - return "fully qualified name of instance" + return "obj name" } @ Class instproc superclass { Index: xotcl/doc/tutorial.html =================================================================== diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44 --- xotcl/doc/tutorial.html (.../tutorial.html) (revision 20e421dc641dc39b53106b1296ac7e09d0b206f2) +++ xotcl/doc/tutorial.html (.../tutorial.html) (revision 99a7a21854051cd691029b15ef8877aa9e86cf44) @@ -1,5 +1,5 @@ - + XOTcl - Tutorial @@ -430,7 +430,7 @@

   $fb check all
   if {[catch {$fb set playerRole SINGER} errMsg]} {
-    puts "CATCHED EXCEPTION: playerRole has either to be NONE, PLAYER, or TRAINER"
+    puts "CAUGHT EXCEPTION: playerRole has either to be NONE, PLAYER, or TRAINER"
     # turn assertion checking off again and reset to PLAYER
     $fb check {}
     $fb set playerRole PLAYER
@@ -494,7 +494,7 @@
   $fb class President
   # Check that the playerRole isn't there anymore.
   if {[catch {$fb set playerRole} errMsg]} {
-    puts "CATCHED EXCEPTION: The player role doesn't exist anymore \
+    puts "CAUGHT EXCEPTION: The player role doesn't exist anymore \
          (as it should be after the class change)"
   }
 
@@ -4319,7 +4319,7 @@
   ...
   if {[catch {my assertionBreakingAction} errMsg]} {
-    puts "CATCHED ERROR: $errMsg"
+    puts "CAUGHT ERROR: $errMsg"
     # remember checking options, for turning them on later again
     set check [my info check]
     my check {}
Index: xotcl/doc/xo-daemon.html
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/doc/xo-daemon.html	(.../xo-daemon.html)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/doc/xo-daemon.html	(.../xo-daemon.html)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -76,7 +76,7 @@
            Date:
         
         
-          [::xotcl::rcs date {$Date: 2006/10/04 20:40:23 $}]
+          [::xotcl::rcs date {$Date: 2007/08/06 11:35:56 $}]
         
       
     
Index: xotcl/doc/xo-whichPkg.html
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/doc/xo-whichPkg.html	(.../xo-whichPkg.html)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/doc/xo-whichPkg.html	(.../xo-whichPkg.html)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -50,7 +50,7 @@
            Date:
         
         
-          [::xotcl::rcs date {$Date: 2006/10/04 20:40:23 $}]
+          [::xotcl::rcs date {$Date: 2007/08/06 11:35:56 $}]
         
       
     
Index: xotcl/generic/aol-xotcl.tcl
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/generic/aol-xotcl.tcl	(.../aol-xotcl.tcl)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/generic/aol-xotcl.tcl	(.../aol-xotcl.tcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# $Id: aol-xotcl.tcl,v 1.12 2006/09/27 08:12:40 neumann Exp $
+# $Id: aol-xotcl.tcl,v 1.13 2007/08/06 11:35:56 neumann Exp $
 
 #
 # Load XOTcl library and some related packages.
@@ -45,10 +45,11 @@
     ns_ictl save [append script \n \
 	"namespace import -force ::xotcl::*" \n \
 	$objects \n $import]
+    # just for debugging purposes
     if {0} {
-       set f [open /tmp/__aolserver-blueprint.tcl w]
-       puts $f $script
-       close $f
+      set f [open [::xotcl::tmpdir]/__aolserver-blueprint.tcl w]
+      puts $f $script
+      close $f
     }
 }
 
Index: xotcl/generic/predefined.h
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/generic/predefined.h	(.../predefined.h)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/generic/predefined.h	(.../predefined.h)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,38 +1,51 @@
 static char cmd[] = 
-"# $Id: predefined.h,v 1.13 2006/10/04 20:40:23 neumann Exp $\n"
-"if {[info command oo::object] ne \"\"} {\n"
-"::xotcl::alias ::oo::class alloc ::xotcl::cmd::Class::alloc\n"
-"oo::class alloc ::xotcl::Object\n"
-"oo::class alloc ::xotcl::Class\n"
-"::xotcl::setrelation ::xotcl::Class superclass {::oo::class ::xotcl::Object}\n"
-"::xotcl::setrelation ::xotcl::Object class ::xotcl::Class\n"
-"::xotcl::setrelation ::xotcl::Class class ::xotcl::Class}\n"
-"foreach cmd [info command ::xotcl::cmd::Object::*] {\n"
+"# $Id: predefined.h,v 1.14 2007/08/06 11:35:56 neumann Exp $\n"
+"foreach cmd [info command ::xotcl::Object::instcmd::*] {\n"
 "::xotcl::alias ::xotcl::Object [namespace tail $cmd] $cmd}\n"
 "foreach cmd {array append eval incr lappend trace subst unset} {\n"
 "::xotcl::alias ::xotcl::Object $cmd -objscope ::$cmd}\n"
-"foreach cmd [info command ::xotcl::cmd::Class::*] {\n"
+"foreach cmd [info command ::xotcl::Class::instcmd::*] {\n"
 "::xotcl::alias ::xotcl::Class [namespace tail $cmd] $cmd}\n"
-"::xotcl::Object instproc init args {}\n"
-"::xotcl::Class array set __defaults {__default_superclass ::xotcl::Object}\n"
-"::xotcl::Class instparametercmd __default_superclass\n"
-"::xotcl::Class set __default_superclass ::xotcl::Object\n"
-"::xotcl::Class create ::xotcl::NonposArgs\n"
-"foreach cmd [info command ::xotcl::cmd::NonposArgs::*] {\n"
-"::xotcl::alias ::xotcl::NonposArgs [namespace tail $cmd] $cmd}\n"
-"::xotcl::NonposArgs create ::xotcl::nonposArgs\n"
 "unset cmd\n"
+"::xotcl::Object instproc init args {}\n"
 "::xotcl::Object create ::xotcl::@\n"
 "::xotcl::@ proc unknown args {}\n"
 "proc ::xotcl::myproc {args} {linsert $args 0 [::xotcl::self]}\n"
 "proc ::xotcl::myvar  {var}  {::xotcl::my requireNamespace; return [::xotcl::self]::$var}\n"
-"namespace eval ::xotcl { namespace export Object Class @ myproc myvar Attribute}\n"
-"# }\n"
-"#   ::xotcl::my set getter $x\n"
-"# }\n"
+"namespace eval ::xotcl { namespace export @ myproc myvar Attribute}\n"
+"::xotcl::setrelation ::xotcl::Class::Parameter superclass ::xotcl::Class\n"
+"::xotcl::Class::Parameter instproc mkParameter {obj name args} {\n"
+"if {[$obj exists $name]} {\n"
+"eval [$obj set $name] configure $args} else {\n"
+"$obj set $name [eval ::xotcl::my new -childof $obj $args]}}\n"
+"::xotcl::Class::Parameter instproc getParameter {obj name args} {\n"
+"[$obj set $name]}\n"
+"::xotcl::Class::Parameter proc Class {param args} {\n"
+"::xotcl::my set access [lindex $param 0]\n"
+"::xotcl::my set setter mkParameter\n"
+"::xotcl::my set getter getParameter\n"
+"::xotcl::my set extra {[::xotcl::self]}\n"
+"::xotcl::my set defaultParam [lrange $param 1 end]}\n"
+"::xotcl::Class::Parameter proc default {val} {\n"
+"[::xotcl::my set cl] set __defaults([::xotcl::my set name]) $val}\n"
+"::xotcl::Class::Parameter proc setter x {\n"
+"::xotcl::my set setter $x}\n"
+"::xotcl::Class::Parameter proc getter x {\n"
+"::xotcl::my set getter $x}\n"
+"::xotcl::Class::Parameter proc access obj {\n"
+"::xotcl::my set access $obj\n"
+"::xotcl::my set extra \\[::xotcl::self\\]\n"
+"foreach v [$obj info vars] {::xotcl::my set $v [$obj set $v]}}\n"
+"::xotcl::Class::Parameter proc values {param args} {\n"
+"set cl [::xotcl::my set cl]\n"
+"set ci [$cl info instinvar]\n"
+"set valueTest {}\n"
+"foreach a $args {\n"
+"::lappend valueTest \"\\[\\$cl set $param\\] == [list $a]\"}\n"
+"::lappend ci [join $valueTest \" || \"]\n"
+"$cl instinvar $ci}\n"
 "::xotcl::Class create ::xotcl::MetaSlot\n"
 "::xotcl::setrelation ::xotcl::MetaSlot superclass ::xotcl::Class\n"
-"::xotcl::MetaSlot initslots\n"
 "::xotcl::MetaSlot instproc new args {\n"
 "set slotobject [self callingobject]::slot\n"
 "if {![my isobject $slotobject]} {Object create $slotobject}\n"
@@ -113,9 +126,9 @@
 "value_check once}\n"
 "::xotcl::Attribute instproc __default_from_cmd {obj cmd var sub op} {\n"
 "$obj trace remove variable $var $op [list [self] [self proc] $obj $cmd]\n"
-"$obj set $var [eval $cmd]}\n"
+"$obj set $var [$obj eval $cmd]}\n"
 "::xotcl::Attribute instproc __value_from_cmd {obj cmd var sub op} {\n"
-"$obj set $var [eval $cmd]}\n"
+"$obj set $var [$obj eval $cmd]}\n"
 "::xotcl::Attribute instproc __value_changed_cmd {obj cmd var sub op} {\n"
 "eval $cmd}\n"
 "::xotcl::Attribute instproc destroy {} {\n"
@@ -214,11 +227,11 @@
 "set name [lindex $arg 0]\n"
 "if {$l == 1} {\n"
 "::xotcl::Attribute create [::xotcl::self]::slot::$name} elseif {$l == 2} {\n"
-"::xotcl::Attribute create [::xotcl::self]::slot::$name -default [lindex $arg 1]} elseif {$l == 3 && [lindex $arg 1] eq \"-default\"} {\n"
-"::xotcl::Attribute create [::xotcl::self]::slot::$name -default [lindex $arg 2]} else {\n"
+"::xotcl::Attribute create [::xotcl::self]::slot::$name [list -default [lindex $arg 1]]} elseif {$l == 3 && [lindex $arg 1] eq \"-default\"} {\n"
+"::xotcl::Attribute create [::xotcl::self]::slot::$name [list -default [lindex $arg 2]]} else {\n"
 "set paramstring [string range $arg [expr {[string length $name]+1}] end]\n"
 "if {[string match {[$\\[]*} $paramstring]} {\n"
-"::xotcl::Attribute create [::xotcl::self]::slot::$name -default $paramstring\n"
+"::xotcl::Attribute create [::xotcl::self]::slot::$name [list -default $paramstring]\n"
 "continue}\n"
 "set po ::xotcl::Class::Parameter\n"
 "puts stderr \"deprecated parameter usage '$arg'; use '-slots {Attribute ...}' instead\"\n"
@@ -261,8 +274,6 @@
 "::xotcl::Object proc __exitHandler {} $newbody}\n"
 "::xotcl::Object proc getExitHandler {} {\n"
 "::xotcl::Object info body __exitHandler}\n"
-"proc ::xotcl::__exitHandler {} {\n"
-"::xotcl::Object __exitHandler}\n"
 "::xotcl::Object instproc abstract {methtype methname arglist} {\n"
 "if {$methtype ne \"proc\" && $methtype ne \"instproc\"} {\n"
 "error \"invalid method type '$methtype', \\\n"
@@ -300,6 +311,7 @@
 "set cl [[$origin info class] create $dest -noinit]\n"
 "set obj $cl\n"
 "$cl superclass [$origin info superclass]\n"
+"$cl parameterclass [$origin info parameterclass]\n"
 "$cl instinvar [$origin info instinvar]\n"
 "$cl instfilter [$origin info instfilter -guards]\n"
 "$cl instmixin [$origin info instmixin]\n"
@@ -513,5 +525,16 @@
 "if {${per-object}} {\n"
 "my proc $name $arguments $body} else {\n"
 "my instproc $name $arguments $body}}\n"
+"proc ::xotcl::tmpdir {} {\n"
+"foreach e [list TMPDIR TEMP TMP] {\n"
+"if {[info exists ::env($e)] \\\n"
+"&& [file isdirectory $::env($e)] \\\n"
+"&& [file iswritable $::env($e)]} {\n"
+"return $::env($e)}}\n"
+"if {$::tcl_platform(platform) eq \"windows\"} {\n"
+"foreach d [list \"C:\\\\TEMP\" \"C:\\\\TMP\" \"\\\\TEMP\" \"\\\\TMP\"] {\n"
+"if {[file isdirectory $d] && [file iswritable $d]} {\n"
+"return $d}}}\n"
+"return /tmp}\n"
 "";
 
Index: xotcl/generic/predefined.xotcl
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/generic/predefined.xotcl	(.../predefined.xotcl)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/generic/predefined.xotcl	(.../predefined.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,103 +1,82 @@
-# $Id: predefined.xotcl,v 1.12 2006/10/04 20:40:23 neumann Exp $
-if {[info command oo::object] ne ""} {
-  ::xotcl::alias ::oo::class alloc ::xotcl::cmd::Class::alloc
-  oo::class alloc ::xotcl::Object
-  oo::class alloc ::xotcl::Class
-  ::xotcl::setrelation ::xotcl::Class superclass {::oo::class ::xotcl::Object}
-  ::xotcl::setrelation ::xotcl::Object class ::xotcl::Class
-  ::xotcl::setrelation ::xotcl::Class class ::xotcl::Class
-}
-
+# $Id: predefined.xotcl,v 1.13 2007/08/06 11:35:56 neumann Exp $
 # provide the standard command set for ::xotcl::Object
-foreach cmd [info command ::xotcl::cmd::Object::*] {
+foreach cmd [info command ::xotcl::Object::instcmd::*] {
   ::xotcl::alias ::xotcl::Object [namespace tail $cmd] $cmd 
 }
-# provide some Tcl-commands as methods for ::xotcl::Object
+# provide some Tcl-commands as methods for Objects
 foreach cmd {array append eval incr lappend trace subst unset} {
   ::xotcl::alias ::xotcl::Object $cmd -objscope ::$cmd
 }
 # provide the standard command set for ::xotcl::Class
-foreach cmd [info command ::xotcl::cmd::Class::*] {
+foreach cmd [info command ::xotcl::Class::instcmd::*] {
   ::xotcl::alias ::xotcl::Class [namespace tail $cmd] $cmd 
 }
-# "init" must exist on Object. per default it is empty.
-::xotcl::Object instproc init args {}
-# use low level interface of slots (defined later) for providing a 
-# default value for superclass (when no superclass is specified explicitely)
-::xotcl::Class array set __defaults {__default_superclass ::xotcl::Object}
-::xotcl::Class instparametercmd __default_superclass
-::xotcl::Class set __default_superclass ::xotcl::Object
-#
-# create class and object for nonpositional argument processing
-::xotcl::Class create ::xotcl::NonposArgs
-foreach cmd [info command ::xotcl::cmd::NonposArgs::*] {
-  ::xotcl::alias ::xotcl::NonposArgs [namespace tail $cmd] $cmd 
-}
-::xotcl::NonposArgs create ::xotcl::nonposArgs 
 unset cmd
+# init must exist on Object. per default it is empty.
+::xotcl::Object instproc init args {}
+
 # documentation stub object -> just ignore 
 # all documentations if xoDoc is not loaded
 ::xotcl::Object create ::xotcl::@
 ::xotcl::@ proc unknown args {}
 proc ::xotcl::myproc {args} {linsert $args 0 [::xotcl::self]} 
 proc ::xotcl::myvar  {var}  {::xotcl::my requireNamespace; return [::xotcl::self]::$var} 
-namespace eval ::xotcl { namespace export Object Class @ myproc myvar Attribute}
+namespace eval ::xotcl { namespace export @ myproc myvar Attribute}
 ########################
 # Parameter definitions
 ########################
-# ::xotcl::setrelation ::xotcl::Class::Parameter superclass ::xotcl::Class
-# ::xotcl::Class::Parameter instproc mkParameter {obj name args} {
-#   #puts "[::xotcl::self proc] $obj $name <$args>"
-#   if {[$obj exists $name]} {
-#     eval [$obj set $name] configure $args
-#   } else {
-#     $obj set $name [eval ::xotcl::my new -childof $obj $args]
-#   }
-# }
-# ::xotcl::Class::Parameter instproc getParameter {obj name args} {
-#   #puts "[::xotcl::self proc] $obj $name <$args>"
-#   [$obj set $name]
-# }
-# ::xotcl::Class::Parameter proc Class {param args} {
-#   #puts "*** [::xotcl::self] parameter: [::xotcl::self proc] '$param' <$args>"
-#   ::xotcl::my set access [lindex $param 0]
-#   ::xotcl::my set setter mkParameter
-#   ::xotcl::my set getter getParameter
-#   ::xotcl::my set extra {[::xotcl::self]}
-#   ::xotcl::my set defaultParam [lrange $param 1 end]
-# }
-# ::xotcl::Class::Parameter proc default {val} {
-#   [::xotcl::my set cl] set __defaults([::xotcl::my set name]) $val
-# }
-# ::xotcl::Class::Parameter proc setter x {
-#   ::xotcl::my set setter $x
-# }
-# ::xotcl::Class::Parameter proc getter x {
-#   ::xotcl::my set getter $x
-# }
-# ::xotcl::Class::Parameter proc access obj {
-#   ::xotcl::my set access $obj
-#   ::xotcl::my set extra \[::xotcl::self\]
-#   foreach v [$obj info vars] {::xotcl::my set $v [$obj set $v]}
-# }
-# ::xotcl::Class::Parameter proc values {param args} {
-#   set cl [::xotcl::my set cl]
-#   set ci [$cl info instinvar]
-#   set valueTest {}
-#   foreach a $args {
-#     ::lappend valueTest "\[\$cl set $param\] == [list $a]"
-#   }
-#   ::lappend ci [join $valueTest " || "]
-#   $cl instinvar $ci
-# }
+::xotcl::setrelation ::xotcl::Class::Parameter superclass ::xotcl::Class
+::xotcl::Class::Parameter instproc mkParameter {obj name args} {
+  #puts "[::xotcl::self proc] $obj $name <$args>"
+  if {[$obj exists $name]} {
+    eval [$obj set $name] configure $args
+  } else {
+    $obj set $name [eval ::xotcl::my new -childof $obj $args]
+  }
+}
+::xotcl::Class::Parameter instproc getParameter {obj name args} {
+  #puts "[::xotcl::self proc] $obj $name <$args>"
+  [$obj set $name]
+}
+::xotcl::Class::Parameter proc Class {param args} {
+  #puts "*** [::xotcl::self] parameter: [::xotcl::self proc] '$param' <$args>"
+  ::xotcl::my set access [lindex $param 0]
+  ::xotcl::my set setter mkParameter
+  ::xotcl::my set getter getParameter
+  ::xotcl::my set extra {[::xotcl::self]}
+  ::xotcl::my set defaultParam [lrange $param 1 end]
+}
+::xotcl::Class::Parameter proc default {val} {
+  [::xotcl::my set cl] set __defaults([::xotcl::my set name]) $val
+}
+::xotcl::Class::Parameter proc setter x {
+  ::xotcl::my set setter $x
+}
+::xotcl::Class::Parameter proc getter x {
+  ::xotcl::my set getter $x
+}
+::xotcl::Class::Parameter proc access obj {
+  ::xotcl::my set access $obj
+  ::xotcl::my set extra \[::xotcl::self\]
+  foreach v [$obj info vars] {::xotcl::my set $v [$obj set $v]}
+}
+::xotcl::Class::Parameter proc values {param args} {
+  set cl [::xotcl::my set cl]
+  set ci [$cl info instinvar]
+  set valueTest {}
+  foreach a $args {
+    ::lappend valueTest "\[\$cl set $param\] == [list $a]"
+  }
+  ::lappend ci [join $valueTest " || "]
+  $cl instinvar $ci
+}
 
 ##################
 # Slot definitions
 ##################
 # bootstrap code; we cannot use -parameter yet
 ::xotcl::Class create ::xotcl::MetaSlot
 ::xotcl::setrelation ::xotcl::MetaSlot superclass ::xotcl::Class
-::xotcl::MetaSlot initslots
 ::xotcl::MetaSlot instproc new args {
   set slotobject [self callingobject]::slot
   if {![my isobject $slotobject]} {Object create $slotobject}
@@ -224,11 +203,11 @@
 ::xotcl::Attribute instproc __default_from_cmd {obj cmd var sub op} {
   #puts "GETVAR [self proc] obj=$obj cmd=$cmd, var=$var, op=$op"
   $obj trace remove variable $var $op [list [self] [self proc] $obj $cmd]
-  $obj set $var [eval $cmd]
+  $obj set $var [$obj eval $cmd]
 }
 ::xotcl::Attribute instproc __value_from_cmd {obj cmd var sub op} {
   #puts "GETVAR [self proc] obj=$obj cmd=$cmd, var=$var, op=$op"
-  $obj set $var [eval $cmd]
+  $obj set $var [$obj eval $cmd]
 }
 ::xotcl::Attribute instproc __value_changed_cmd {obj cmd var sub op} {
   #puts stderr "**************************"
@@ -389,15 +368,15 @@
       
     } elseif {$l == 2} {
       #puts  stderr "parameter $name has default '[lindex $arg 1]'"
-      ::xotcl::Attribute create [::xotcl::self]::slot::$name -default [lindex $arg 1]
+      ::xotcl::Attribute create [::xotcl::self]::slot::$name [list -default [lindex $arg 1]]
     } elseif {$l == 3 && [lindex $arg 1] eq "-default"} {
-      ::xotcl::Attribute create [::xotcl::self]::slot::$name -default [lindex $arg 2]
+      ::xotcl::Attribute create [::xotcl::self]::slot::$name [list -default [lindex $arg 2]]
     } else {
       set paramstring [string range $arg [expr {[string length $name]+1}] end]
       #puts  stderr "remaining arg = '$paramstring'"
       if {[string match {[$\[]*} $paramstring]} {
 	#puts stderr "match,     $cl set __defaults($name) $paramstring"
-	::xotcl::Attribute create [::xotcl::self]::slot::$name -default $paramstring
+	::xotcl::Attribute create [::xotcl::self]::slot::$name [list -default $paramstring]
 	continue
       }
 
@@ -457,6 +436,7 @@
   return $set
 }
 
+
 # Exit Handler
 ::xotcl::Object proc unsetExitHandler {} {
   ::xotcl::Object proc __exitHandler {} {
@@ -472,10 +452,7 @@
 ::xotcl::Object proc getExitHandler {} {
   ::xotcl::Object info body __exitHandler
 }
-# provide a global handler to avoid a proc on the global object.
-proc ::xotcl::__exitHandler {} {
-  ::xotcl::Object __exitHandler
-}
+
 ::xotcl::Object instproc abstract {methtype methname arglist} {
   if {$methtype ne "proc" && $methtype ne "instproc"} {
     error "invalid method type '$methtype', \
@@ -547,7 +524,7 @@
 	# class object
 	set obj $cl
 	$cl superclass [$origin info superclass]
-	#$cl parameterclass [$origin info parameterclass]
+	$cl parameterclass [$origin info parameterclass]
 	$cl instinvar [$origin info instinvar]
 	$cl instfilter [$origin info instfilter -guards]
 	$cl instmixin [$origin info instmixin]
@@ -881,3 +858,22 @@
      my instproc $name $arguments $body  
    }
 }
+
+# setup a temp directory
+proc ::xotcl::tmpdir {} {
+  foreach e [list TMPDIR TEMP TMP] {
+    if {[info exists ::env($e)] \
+            && [file isdirectory $::env($e)] \
+            && [file iswritable $::env($e)]} {
+      return $::env($e)
+    }
+  }
+  if {$::tcl_platform(platform) eq "windows"} {
+    foreach d [list "C:\\TEMP" "C:\\TMP" "\\TEMP" "\\TMP"] {
+      if {[file isdirectory $d] && [file iswritable $d]} {
+        return $d
+      }
+    }
+  }
+  return /tmp
+}
Index: xotcl/generic/xotcl.c
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/generic/xotcl.c	(.../xotcl.c)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/generic/xotcl.c	(.../xotcl.c)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-/* $Id: xotcl.c,v 1.43 2006/10/04 20:40:23 neumann Exp $
+/* $Id: xotcl.c,v 1.44 2007/08/06 11:35:56 neumann Exp $
  *
  *  XOTcl - Extended OTcl
  *
@@ -41,7 +41,6 @@
  *    the suitability of this software for any purpose.  It is
  *    provided "as is" without express or implied warranty."
  * */
-#define OO 1
 
 #define XOTCL_C 1
 #include "xotclInt.h"
@@ -59,6 +58,7 @@
 int xotclMemCountInterpCounter = 0;
 #endif
 
+
 /*
  * Tcl_Obj Types for XOTcl Objects
  */
@@ -92,7 +92,6 @@
 static int IsMetaClass(Tcl_Interp *in, XOTclClass *cl);
 static int hasMixin(Tcl_Interp *in, XOTclObject *obj, XOTclClass *cl);
 static int isSubType(XOTclClass *subcl, XOTclClass *cl);
-static int setInstVar(Tcl_Interp *in, XOTclObject *obj, Tcl_Obj *name, Tcl_Obj* value);
 
 static Tcl_ObjType XOTclObjectType = {
   "XOTclObject",
@@ -198,7 +197,153 @@
 #endif
 
 
+#if defined(PRE85)
+/* 
+ * for backward compatibility
+ */
+#define VarHashGetValue(hPtr) \
+  (Var *) Tcl_GetHashValue(hPtr)
+#define TclIsVarTraced(varPtr) \
+  (varPtr->tracePtr != NULL)
+#define VarHashTable(t) t
+
 /*
+ * We need NewVar from tclVar.c ... but its not exported
+ */
+static Var *NewVar() {
+  register Var *varPtr;
+
+  varPtr = (Var *) ckalloc(sizeof(Var));
+  varPtr->value.objPtr = NULL;
+  varPtr->name = NULL;
+  varPtr->nsPtr = NULL;
+  varPtr->hPtr = NULL;
+  varPtr->refCount = 0;
+  varPtr->tracePtr = NULL;
+  varPtr->searchPtr = NULL;
+  varPtr->flags = (VAR_SCALAR | VAR_UNDEFINED | VAR_IN_HASHTABLE);
+  return varPtr;
+}
+
+static void
+CleanupVar(Var * varPtr, Var *arrayPtr) {
+    if (TclIsVarUndefined(varPtr) && (varPtr->refCount == 0)
+	    && (varPtr->tracePtr == NULL)
+	    && (varPtr->flags & VAR_IN_HASHTABLE)) {
+	if (varPtr->hPtr != NULL) {
+	    Tcl_DeleteHashEntry(varPtr->hPtr);
+	}
+	ckfree((char *) varPtr);
+    }
+    if (arrayPtr != NULL) {
+	if (TclIsVarUndefined(arrayPtr) && (arrayPtr->refCount == 0)
+		&& (arrayPtr->tracePtr == NULL)
+	        && (arrayPtr->flags & VAR_IN_HASHTABLE)) {
+	    if (arrayPtr->hPtr != NULL) {
+		Tcl_DeleteHashEntry(arrayPtr->hPtr);
+	    }
+	    ckfree((char *) arrayPtr);
+	}
+    }
+}
+
+static inline Var *
+VarHashCreateVar(TclVarHashTable *tablePtr, char *newName, int *newPtr) {
+  Tcl_HashEntry *hPtr = Tcl_CreateHashEntry(tablePtr, newName, newPtr);
+  Var *varPtr;
+
+  if (newPtr && *newPtr) {
+    varPtr = NewVar();
+    Tcl_SetHashValue(hPtr, varPtr);
+    varPtr->hPtr = hPtr;
+    varPtr->nsPtr = NULL; /* a local variable */
+  } else {
+    varPtr = (Var *) Tcl_GetHashValue(hPtr);
+  }
+
+  return varPtr;
+}
+
+#else
+
+/* 
+ *  definitions for tcl 8.5
+ */
+#define VarHashGetValue(hPtr) \
+  ((Var *) ((char *)hPtr - TclOffset(VarInHash, entry)))
+#define VarHashGetKey(varPtr)	\
+  (((VarInHash *)(varPtr))->entry.key.objPtr)
+#define VarHashDeleteEntry(varPtr) \
+  Tcl_DeleteHashEntry(&(((VarInHash *) varPtr)->entry))
+#define VarHashTable(varTable) \
+  &(varTable)->table
+
+static inline Var *
+VarHashCreateVar(TclVarHashTable *tablePtr, Tcl_Obj *key, int *newPtr) {
+  Tcl_HashEntry *hPtr = Tcl_CreateHashEntry((Tcl_HashTable *) tablePtr,
+					    (char *) key, newPtr);
+  return hPtr ? VarHashGetValue(hPtr) : NULL;
+}
+
+static inline void
+CleanupVar(
+    Var *varPtr,                /* Pointer to variable that may be a candidate
+                                 * for being expunged. */
+    Var *arrayPtr)              /* Array that contains the variable, or NULL
+                                 * if this variable isn't an array element. */
+{
+    if (TclIsVarUndefined(varPtr) && TclIsVarInHash(varPtr)
+            && !TclIsVarTraced(varPtr)
+            && (VarHashRefCount(varPtr) == !TclIsVarDeadHash(varPtr))) {
+        if (VarHashRefCount(varPtr) == 0) {
+            ckfree((char *) varPtr);
+        } else {
+            VarHashDeleteEntry(varPtr);
+        }
+    }
+    if (arrayPtr != NULL && TclIsVarUndefined(arrayPtr) &&
+            TclIsVarInHash(arrayPtr) && !TclIsVarTraced(arrayPtr) &&
+            (VarHashRefCount(arrayPtr) == !TclIsVarDeadHash(arrayPtr))) {
+        if (VarHashRefCount(arrayPtr) == 0) {
+            ckfree((char *) arrayPtr);
+        } else {
+            VarHashDeleteEntry(arrayPtr);
+        }
+    }
+}
+#endif
+
+
+static Var *
+lookupVarFromVarTable(TclVarHashTable *varTable, CONST char *simpleName, XOTclObject *obj) {
+  Var *varPtr = NULL;
+  Tcl_HashEntry *entryPtr;
+  
+  /* fprintf(stderr,"lookupVarFromVarTable varTable %p name '%s' for object %s %p\n",
+	  varTable,simpleName,
+	  obj?ObjStr(obj->cmdName):"NULL", obj); */
+  if (varTable) {
+#if defined(PRE85)
+    entryPtr = Tcl_FindHashEntry(varTable, simpleName);
+    if (entryPtr) {
+      varPtr = VarHashGetValue(entryPtr);
+    }
+#else
+    Tcl_Obj *simpleNamePtr = Tcl_NewStringObj(simpleName, -1);
+    Tcl_IncrRefCount(simpleNamePtr);
+    entryPtr = Tcl_CreateHashEntry(VarHashTable(varTable), (char *)simpleNamePtr, NULL);
+    if (entryPtr) {
+      varPtr = VarHashGetValue(entryPtr);
+    }
+    Tcl_DecrRefCount(simpleNamePtr);
+#endif
+  }
+  return varPtr;
+}
+
+
+
+/*
  * call an XOTcl method
  */
 static int
@@ -366,7 +511,7 @@
   register char *p = string+strlen(string);
   while (p > string) {
     if (*p == ':' && *(p-1) == ':') return p+1;
-    *p--;
+    p--;
   }
   return string;
 }
@@ -552,7 +697,6 @@
 UpdateStringOfXOTclObject(register Tcl_Obj *objPtr) {
   XOTclObject *obj = (XOTclObject *)objPtr->internalRep.otherValuePtr;
   char *nsFullName = NULL;
-  register Tcl_Command cmd;
 
 #ifdef XOTCLOBJ_TRACE
   fprintf(stderr,"UpdateStringOfXOTclObject %p refCount %d\n",
@@ -567,8 +711,7 @@
     Tcl_DString ds, *dsp = &ds;
     unsigned l;
     DSTRING_INIT(dsp);
-    cmd = obj->id;
-    nsFullName = NSCmdFullName(cmd);
+    nsFullName = NSCmdFullName(obj->id);
     if (!(*nsFullName==':' && *(nsFullName+1)==':' &&
 	  *(nsFullName+2)=='\0')) {
       Tcl_DStringAppend(dsp, nsFullName, -1);
@@ -1192,44 +1335,38 @@
     /*
      * Copy all obj variables to the newly created namespace
      */
+
     if (obj->varTable) {
+#if defined(PRE85)
       Tcl_HashSearch search;
       Tcl_HashEntry *hPtr, *newHPtr;
+      Tcl_HashTable *varTable = Tcl_Namespace_varTable(nsPtr);
       register Var *varPtr;
 
       for (hPtr = Tcl_FirstHashEntry(obj->varTable, &search);  hPtr != NULL;
 	   hPtr = Tcl_NextHashEntry(&search)) {
 	int new = 0;
 	char *name = Tcl_GetHashKey(obj->varTable, hPtr);
-	Tcl_HashTable *varTable = Tcl_Namespace_varTable(nsPtr);
 
 	varPtr = (Var *) Tcl_GetHashValue(hPtr);
-	
+
 	if (!name) {
 	  panic("Can't copy: Hash Entry with no name", NULL);
 	  continue;
 	}
-
-	newHPtr = Tcl_CreateHashEntry(varTable, name, &new);
+	newHPtr = Tcl_CreateHashEntry((Tcl_HashTable*) varTable, name, &new);
 	if (new) {
 	  /*
 	   * put var into new hashtable entry
 	   */
 	  varPtr->flags |= VAR_IN_HASHTABLE;
-	  Tcl_SetHashValue(newHPtr, varPtr);
 	  varPtr->hPtr = newHPtr;
 	  /*
-	   * Mark the variable as a namespace variable
-	
-	  if (!(varPtr->flags & VAR_NAMESPACE_VAR)) {
-	    varPtr->flags |= VAR_NAMESPACE_VAR;
-	    varPtr->refCount++;
-	  }
-	  */
-	  /*
 	   * and correct the namespace information
 	   */
 	  varPtr->nsPtr = (Namespace *)nsPtr;
+	  Tcl_SetHashValue(newHPtr, varPtr);
+
 	} else {
 	  panic("Can't copy varTable variable to new namespace", NULL);
 	}
@@ -1238,6 +1375,60 @@
       MEM_COUNT_FREE("obj->varTable",obj->varTable);
       */
       Tcl_DeleteHashTable(obj->varTable);
+#else
+#if 1
+      Tcl_HashSearch  search;
+      Tcl_HashEntry   *hPtr;
+      TclVarHashTable *varTable = Tcl_Namespace_varTable(nsPtr);
+      Tcl_HashTable   *varHashTable = VarHashTable(varTable);
+
+      varTable->table = obj->varTable->table; /* copy the table */
+      
+      if (obj->varTable->table.buckets == obj->varTable->table.staticBuckets) {
+	varHashTable->buckets = varHashTable->staticBuckets;
+      }
+      for (hPtr = Tcl_FirstHashEntry(varHashTable, &search);  hPtr != NULL;
+	   hPtr = Tcl_NextHashEntry(&search)) {
+	hPtr->tablePtr = varHashTable;
+      }
+#else
+      Tcl_HashSearch search;
+      Tcl_HashEntry *hPtr, *newHPtr;
+      TclVarHashTable *varTable = Tcl_Namespace_varTable(nsPtr);
+      fprintf(stderr, "copying objVarTable for obj %s %p\n",ObjStr(obj->cmdName),obj);
+
+      for (hPtr = Tcl_FirstHashEntry(VarHashTable(obj->varTable), &search);  hPtr != NULL;
+	   hPtr = Tcl_NextHashEntry(&search)) {
+
+	Var *varPtr         = VarHashGetValue(hPtr);
+	Tcl_Obj *varNameObj = VarHashGetKey(varPtr);
+	int new = 0;
+
+	newHPtr = Tcl_CreateHashEntry(VarHashTable(varTable), (char *)varNameObj, &new);
+
+	if (new) {
+	  /*
+	   * copy values to new variable. incr refcount ??
+	   */
+	  Var *newVarPtr = VarHashGetValue(newHPtr);
+	  fprintf(stderr, "copying %s flags = %d\n",ObjStr(varNameObj),varPtr->flags);
+	  newVarPtr->flags = varPtr->flags;
+	  newVarPtr->value = varPtr->value;
+	  /*
+	  assert(TclIsVarInHash(newVarPtr)); 
+	  VarHashRefCount(newVarPtr)++;
+	  */
+	} else {
+	  panic("Can't copy varTable variable to new namespace", NULL);
+	}
+      }
+      /*
+      MEM_COUNT_FREE("obj->varTable",obj->varTable);
+      */
+      Tcl_DeleteHashTable(VarHashTable(obj->varTable));
+#endif
+#endif
+
       ckfree((char *) obj->varTable);
       obj->varTable = 0;
     }
@@ -1250,18 +1441,9 @@
  */
 int
 varResolver(Tcl_Interp *in, CONST char *name, Tcl_Namespace *ns, int flags, Tcl_Var* varPtr) {
-  Tcl_HashEntry *entry;
-
-  entry = Tcl_FindHashEntry(Tcl_Namespace_varTable(ns), name);
-  if (entry != NULL) {
-    /*fprintf(stderr,"lookup '%s' successful %d\n",name, flags);*/
-    *varPtr = (Tcl_Var)Tcl_GetHashValue(entry);
-    return TCL_OK;
-  } else {
-    /*fprintf(stderr,"lookup '%s' failed %d\n",name, flags);*/
-    *varPtr = NULL;
-    return TCL_ERROR;
-  }
+  *varPtr = (Tcl_Var)lookupVarFromVarTable(Tcl_Namespace_varTable(ns), name,NULL);
+  /*fprintf(stderr,"lookup '%s' successful %d\n",name, *varPtr != NULL);*/
+  return *varPtr ? TCL_OK : TCL_ERROR;
 }
 
 
@@ -1414,17 +1596,21 @@
  */
 static void
 NSCleanupNamespace(Tcl_Interp *in, Tcl_Namespace* ns) {
-  Tcl_HashTable *varTable = Tcl_Namespace_varTable(ns);
+  TclVarHashTable *varTable = Tcl_Namespace_varTable(ns);
   Tcl_HashTable *cmdTable = Tcl_Namespace_cmdTable(ns);
   Tcl_HashSearch hSrch;
   Tcl_HashEntry* hPtr;
   Tcl_Command cmd;
   /*
    * Delete all variables and initialize var table again
-   * (deletevars frees the vartable)
+   * (deleteVars frees the vartable)
    */
   TclDeleteVars((Interp *)in, varTable);
+#if defined(PRE85)
   Tcl_InitHashTable(varTable, TCL_STRING_KEYS);
+#else
+  TclInitVarHashTable(varTable, (Namespace *)ns);
+#endif
 
   /*
    * Delete all user-defined procs in the namespace
@@ -1639,18 +1825,6 @@
   return (obj && XOTclObjectIsClass(obj)) ? (XOTclClass*)obj : NULL;
 }
 
-static XOTclClass*
-GetClassFromFullName(Tcl_Interp *in, char *fullName) {
-  XOTclClass *cl;
-  if (isClassName(fullName)) {
-    cl = XOTclpGetClass(in, NSCutXOTclClasses(fullName));
-  } else {
-    cl = NULL;
-  }
-  return cl;
-}
-
-
 void
 XOTclAddPMethod(Tcl_Interp *in, XOTcl_Object *obji, char *nm, Tcl_ObjCmdProc* proc,
 		ClientData cd, Tcl_CmdDeleteProc* dp) {
@@ -1881,7 +2055,7 @@
 	  active, inFramePtr, top->currentFramePtr,
 	  active? active->currentFramePtr : NULL);*/
 
-  if (active == top || inFramePtr == NULL) {
+  if (active == top || inFramePtr == NULL || Tcl_CallFrame_level(inFramePtr) == 0) {
     /* top frame is a active frame, or we could not find a calling
        frame, call frame pointers are fine */
     ctx->framesSaved = 0;
@@ -1890,7 +2064,7 @@
     /*fprintf(stderr,"active == NULL\n"); */
     /* find a proc frame, which is not equal the top level cmd */
     /* XOTclStackDump(in);*/
-    for (; cf; cf = Tcl_CallFrame_callerPtr(cf)) {
+    for (; cf && Tcl_CallFrame_level(cf); cf = Tcl_CallFrame_callerPtr(cf)) {
       if (Tcl_CallFrame_isProcCallFrame(cf) && cf != top->currentFramePtr)
 	break;
     }
@@ -2062,7 +2236,7 @@
   register XOTclCallStackContent *top = cs->top;
   Tcl_CallFrame *varFramePtr = (Tcl_CallFrame *)Tcl_Interp_varFramePtr(in);
 
-  /*fprintf(stderr, "Tcl_Interp_framePtr(in) %p != varFramePtr %p && top->currentFramePtr %p\n", Tcl_Interp_framePtr(in), varFramePtr, top->currentFramePtr);*/
+  /* fprintf(stderr, "Tcl_Interp_framePtr(in) %p != varFramePtr %p && top->currentFramePtr %p\n", Tcl_Interp_framePtr(in), varFramePtr, top->currentFramePtr);*/
 
   if (Tcl_Interp_framePtr(in) != varFramePtr && top->currentFramePtr) {
     XOTclCallStackContent *bot = cs->content + 1;
@@ -2083,7 +2257,7 @@
  * Cmd List Add/Remove ... returns the new element
  */
 static XOTclCmdList*
-CmdListAdd(XOTclCmdList **cList, Tcl_Command c, int noDuplicates) {
+CmdListAdd(XOTclCmdList **cList, Tcl_Command c, XOTclClass *clorobj, int noDuplicates) {
   XOTclCmdList *l = *cList, *new;
 
   /*
@@ -2113,6 +2287,7 @@
   Tcl_Command_refCount(new->cmdPtr)++;
   MEM_COUNT_ALLOC("command refCount",new->cmdPtr);
   new->clientData = NULL;
+  new->clorobj = clorobj;
   new->next = NULL;
 
   if (l) {
@@ -2125,9 +2300,10 @@
 }
 
 static void
-CmdListReplaceCmd(XOTclCmdList* replace, Tcl_Command cmd) {
+CmdListReplaceCmd(XOTclCmdList *replace, Tcl_Command cmd, XOTclClass *clorobj) {
   Tcl_Command del = replace->cmdPtr;
   replace->cmdPtr = cmd;
+  replace->clorobj = clorobj;
   Tcl_Command_refCount(cmd)++;
   MEM_COUNT_ALLOC("command refCount", cmd);
   TclCleanupCommand((Command *)del);
@@ -2137,14 +2313,15 @@
 #if 0
 /** for debug purposes only */
 static void
-CmdListPrint(Tcl_Interp *in, char *title, XOTclCmdList* cmdList) {
+CmdListPrint(Tcl_Interp *in, char *title, XOTclCmdList *cmdList) {
   if (cmdList)
     fprintf(stderr,title);
   while (cmdList) {
-    fprintf(stderr, "   CL=%p, cmdPtr=%p %s, clientData=%p\n",
+    fprintf(stderr, "   CL=%p, cmdPtr=%p %s, clorobj %p, clientData=%p\n",
 	    cmdList,
 	    cmdList->cmdPtr,
 	    in ? Tcl_GetCommandName(in, cmdList->cmdPtr) : "",
+	    cmdList->clorobj,
 	    cmdList->clientData);
       cmdList = cmdList->next;
   }
@@ -2204,25 +2381,26 @@
    }
 }
 
+
 /*
- * delete all entries from a given namespace
+ * delete all cmds with given context class object
  */
 static void
-CmdListRemoveNSFromList(XOTclCmdList **cmdList, Tcl_Namespace* nsPtr,
+CmdListRemoveContextClassFromList(XOTclCmdList **cmdList, XOTclClass *clorobj,
 			XOTclFreeCmdListClientData* freeFct) {
   XOTclCmdList* c, *del = 0;
   /*
   CmdListRemoveEpoched(cmdList, freeFct);
   */
   c = *cmdList;
-  while (c && Tcl_Command_nsPtr(c->cmdPtr) == nsPtr) {
+  while (c && c->clorobj == clorobj) {
     del = c;
     *cmdList = c->next;
     CmdListDeleteCmdListEntry(del, freeFct);
     c = *cmdList;
   }
   while (c) {
-    if (Tcl_Command_nsPtr(c->cmdPtr) == nsPtr) {
+    if (c->clorobj == clorobj) {
       del = c;
       c = *cmdList;
       while (c->next && c->next != del)
@@ -2735,7 +2913,7 @@
       XOTclCmdList* new;
       /* fprintf(stderr,"--- adding to mixinlist %s\n",
 	 ObjStr(mixinClasses->cl->object.cmdName));*/
-      new = CmdListAdd(&obj->mixinOrder, mixinClasses->cl->object.id,
+      new = CmdListAdd(&obj->mixinOrder, mixinClasses->cl->object.id,NULL,
 		       /*noDuplicates*/ 0);
 
       /* in the client data of the order list, we require the first
@@ -2780,7 +2958,7 @@
     return XOTclErrBadVal(in, "mixin", "a class as mixin", ObjStr(name));
 
 
-  new = CmdListAdd(mixinList, mixin->object.id, /*noDuplicates*/ 1);
+  new = CmdListAdd(mixinList, mixin->object.id, NULL, /*noDuplicates*/ 1);
 
   if (guard) {
     GuardAdd(in, new, guard);
@@ -2855,7 +3033,6 @@
   cl->order = saved;
 #if 1
   /* TODO: Uwe, this slows down superclass by a factor of 5! 
-     maybe we can use a mixin epoch?
    */
 
   /* invalidate the mixins on all instances that have this mixin (cl)
@@ -3058,13 +3235,15 @@
 }
 
 static Tcl_Command
-MixinSearchMethodByName(Tcl_Interp *in, XOTclCmdList* mixinList, char *name) {
+MixinSearchMethodByName(Tcl_Interp *in, XOTclCmdList* mixinList, char *name, XOTclClass **cl) {
   Tcl_Command cmd;
   while (mixinList) {
     XOTclClass *mcl =
       XOTclpGetClass(in, (char *) Tcl_GetCommandName(in, mixinList->cmdPtr));
-    if (mcl && SearchCMethod(mcl, name, &cmd))
+    if (mcl && SearchCMethod(mcl, name, &cmd)) {
+      if (cl) *cl = mcl;
       return cmd;
+    }
 
     mixinList = mixinList->next;
   }
@@ -3087,7 +3266,7 @@
 
 static Tcl_Command
 FilterSearch(Tcl_Interp *in, char *name, XOTclObject *startingObj,
-	     XOTclClass *startingCl) {
+	     XOTclClass *startingCl, XOTclClass **cl) {
   Tcl_Command cmd = NULL;
 
   if (startingObj) {
@@ -3103,8 +3282,9 @@
      * search for filters on object mixins
      */
     if (opt && opt->mixins) {
-      if ((cmd = MixinSearchMethodByName(in, opt->mixins, name)))
+      if ((cmd = MixinSearchMethodByName(in, opt->mixins, name, cl))) {
 	return cmd;
+      }
     }
   }
 
@@ -3114,28 +3294,32 @@
   if (startingCl) {
     XOTclClassOpt* opt = startingCl->opt;
     if (opt && opt->instmixins) {
-      if ((cmd = MixinSearchMethodByName(in, opt->instmixins, name)))
+      if ((cmd = MixinSearchMethodByName(in, opt->instmixins, name, cl))) {
 	return cmd;
+      }
     }
   }
 
   /*
    * seach for object procs that are used as filters
    */
   if (startingObj && startingObj->nsPtr) {
-    if ((cmd = FindMethod(name, startingObj->nsPtr)))
+    if ((cmd = FindMethod(name, startingObj->nsPtr))) {
+      *cl = (XOTclClass*)startingObj;
       return cmd;
+    }
   }
 
   /*
    * ok, no filter on obj or mixins -> search class
    */
   if (startingCl) {
-    if (!SearchCMethod(startingCl, name, &cmd)) {
+    *cl = SearchCMethod(startingCl, name, &cmd);
+    if (!*cl) {
       /*
        * If no filter is found yet -> search the meta-class
        */
-      SearchCMethod(startingCl->object.cl, name, &cmd);
+      *cl = SearchCMethod(startingCl->object.cl, name, &cmd);
     }
   }
   return cmd;
@@ -3380,7 +3564,8 @@
   Tcl_Command cmd;
   int ocName; Tcl_Obj **ovName;
   Tcl_Obj *guard = NULL;
-  XOTclCmdList* new;
+  XOTclCmdList *new;
+  XOTclClass *cl;
 
   if (Tcl_ListObjGetElements(in, name, &ocName, &ovName) == TCL_OK && ocName > 1) {
     if (ocName == 3 && !strcmp(ObjStr(ovName[1]), XOTclGlobalStrings[XOTE_GUARD_OPTION])) {
@@ -3389,7 +3574,7 @@
     }
   }
 
-  if (!(cmd = FilterSearch(in, ObjStr(name), startingObj, startingCl))) {
+  if (!(cmd = FilterSearch(in, ObjStr(name), startingObj, startingCl, &cl))) {
     if (startingObj)
       return XOTclVarErrMsg(in, "filter: can't find filterproc on: ",
 			    ObjStr(startingObj->cmdName), " - proc: ",
@@ -3399,10 +3584,10 @@
 			    ObjStr(startingCl->object.cmdName), " - proc: ",
 			    ObjStr(name), (char *) NULL);
   }
-  /*
-  fprintf(stderr, " +++ adding filter %s \n", ObjStr(name));
-  */
-  new = CmdListAdd(filterList, cmd, /*noDuplicates*/ 1);
+  
+  /*fprintf(stderr, " +++ adding filter %s cl %p\n", ObjStr(name),cl);*/
+  
+  new = CmdListAdd(filterList, cmd, cl, /*noDuplicates*/ 1);
 
   if (guard) {
     GuardAdd(in, new, guard);
@@ -3433,21 +3618,22 @@
 		  XOTclObject *startingObj, XOTclClass *startingCl) {
   char *simpleName;
   Tcl_Command cmd;
-  XOTclCmdList* cmdList, *del;
+  XOTclCmdList *cmdList, *del;
+  XOTclClass *cl = NULL;
 
   CmdListRemoveEpoched(filters, GuardDel);
   cmdList = *filters;
   while (cmdList) {
     simpleName = (char *) Tcl_GetCommandName(in, cmdList->cmdPtr);
-    cmd = FilterSearch(in, simpleName, startingObj, startingCl);
+    cmd = FilterSearch(in, simpleName, startingObj, startingCl, &cl);
     if (cmd == NULL) {
       del = cmdList;
       cmdList = cmdList->next;
       del = CmdListRemoveFromList(filters, del);
       CmdListDeleteCmdListEntry(del, GuardDel);
     } else {
       if (cmd != cmdList->cmdPtr)
-	CmdListReplaceCmd(cmdList, cmd);
+	CmdListReplaceCmd(cmdList, cmd, cl);
       cmdList = cmdList->next;
     }
   }
@@ -3470,24 +3656,25 @@
   cl->order = 0;
   savePtr = clPtr = ComputeOrder(cl, cl->order, Sub);
   cl->order = saved;
-
+  
   while (clPtr != 0) {
     Tcl_HashSearch hSrch;
     Tcl_HashEntry* hPtr = &clPtr->cl->instances ?
       Tcl_FirstHashEntry(&clPtr->cl->instances, &hSrch) : 0;
 
     /* recalculate the commands of all instfilter registrations */
-    if (clPtr->cl->opt)
+    if (clPtr->cl->opt) {
       FilterSearchAgain(in, &clPtr->cl->opt->instfilters, 0, clPtr->cl);
+    }
     for (; hPtr != 0; hPtr = Tcl_NextHashEntry(&hSrch)) {
-      XOTclObject *obj = (XOTclObject*)
-	Tcl_GetHashKey(&clPtr->cl->instances, hPtr);
+      XOTclObject *obj = (XOTclObject*) Tcl_GetHashKey(&clPtr->cl->instances, hPtr);
       FilterResetOrder(obj);
       obj->flags &= ~XOTCL_FILTER_ORDER_VALID;
 
       /* recalculate the commands of all object filter registrations */
-      if (obj->opt)
+      if (obj->opt) {
 	FilterSearchAgain(in, &obj->opt->filters, obj, 0);
+      }
     }
     clPtr = clPtr->next;
   }
@@ -3505,18 +3692,22 @@
   XOTclClasses *saved = cl->order, *clPtr;
   cl->order = 0;
 
+  /*fprintf(stderr, "FilterRemoveDependentFilterCmds cl %p %s, removeClass %p %s\n",
+	  cl,ObjStr(cl->object.cmdName),
+	  removeClass,ObjStr(removeClass->object.cmdName));*/
+
   for (clPtr = ComputeOrder(cl, cl->order, Sub); clPtr; clPtr = clPtr->next) {
     Tcl_HashSearch hSrch;
     Tcl_HashEntry* hPtr = &clPtr->cl->instances ?
       Tcl_FirstHashEntry(&clPtr->cl->instances, &hSrch) : 0;
     XOTclClassOpt* opt = clPtr->cl->opt;
-    if (opt)
-      CmdListRemoveNSFromList(&opt->instfilters, removeClass->nsPtr, GuardDel);
-
+    if (opt) {
+      CmdListRemoveContextClassFromList(&opt->instfilters,removeClass, GuardDel);
+    }
     for (; hPtr != 0; hPtr = Tcl_NextHashEntry(&hSrch)) {
       XOTclObject *obj = (XOTclObject*)	Tcl_GetHashKey(&clPtr->cl->instances, hPtr);
       if (obj->opt) {
-	CmdListRemoveNSFromList(&obj->opt->filters, removeClass->nsPtr, GuardDel);
+	CmdListRemoveContextClassFromList(&obj->opt->filters,removeClass, GuardDel);
       }
     }
   }
@@ -3599,12 +3790,18 @@
 	Tcl_ListObjAppendElement(in, list, innerList);
       } else {
 	if (fullProcQualifiers) {
-	  char *fullName = NSCmdFullName(f->cmdPtr);
-          XOTclClass *fcl = GetClassFromFullName(in,fullName);
-	  XOTclObject *fobj = fcl ? 0 : XOTclpGetObject(in, fullName);
+          XOTclClass *fcl;
+	  XOTclObject *fobj;
+	  if (f->clorobj && !XOTclObjectIsClass(&f->clorobj->object)) {
+	    fobj = (XOTclObject *)f->clorobj;
+	    fcl = NULL;
+	  } else {
+	    fobj = NULL;
+	    fcl = f->clorobj;
+	  }
 	  Tcl_ListObjAppendElement(in, list,
-	      getFullProcQualifier(in, simpleName, 
-				   fobj, fcl, f->cmdPtr));
+				   getFullProcQualifier(in, simpleName, 
+							fobj, fcl, f->cmdPtr));
 	} else {
 	  Tcl_ListObjAppendElement(in, list, Tcl_NewStringObj(simpleName, -1));
 	}
@@ -3625,7 +3822,7 @@
 			   XOTclCmdList **filterList) {
   XOTclCmdList *f ;
   char *simpleName;
-  XOTclClass *fCl;
+  XOTclClass *fcl;
   XOTclClasses *pl;
 
   /*
@@ -3634,30 +3831,28 @@
   CmdListRemoveEpoched(filters, GuardDel);
 
   for (f = *filters; f; f = f->next) {
-    char *fullName = NSCmdFullName(f->cmdPtr);
     simpleName = (char *) Tcl_GetCommandName(in, f->cmdPtr);
-    fCl = GetClassFromFullName(in, fullName);
-    CmdListAdd(filterList, f->cmdPtr, /*noDuplicates*/ 0);
+    fcl = f->clorobj;
+    CmdListAdd(filterList, f->cmdPtr, fcl, /*noDuplicates*/ 0);
 
-    if (!fCl) {
-      /* try to find the object for per-object filter */
-      XOTclObject *fObj = XOTclpGetObject(in, fullName);
-      /* and then seek class/inherited filters */
-      if (fObj)
-	fCl = fObj->cl;
+    if (fcl && !XOTclObjectIsClass(&fcl->object)) {
+      /* get the object for per-object filter */
+      XOTclObject *fObj = (XOTclObject *)fcl;
+      /* and then get class */
+      fcl = fObj->cl; 
     }
 
     /* if we have a filter class -> search up the inheritance hierarchy*/
-    if (fCl) {
-      pl = ComputeOrder(fCl, fCl->order, Super);
+    if (fcl) {
+      pl = ComputeOrder(fcl, fcl->order, Super);
       if (pl && pl->next) {
 	/* don't search on the start class again */
 	pl = pl->next;
 	/* now go up the hierarchy */
 	for(; pl; pl = pl->next) {
 	  Tcl_Command pi = FindMethod(simpleName, pl->cl->nsPtr);
 	  if (pi) {
-	    CmdListAdd(filterList, pi, /*noDuplicates*/ 0);
+	    CmdListAdd(filterList, pi, pl->cl, /*noDuplicates*/ 0);
 	    /*
 	      fprintf(stderr, " %s::%s, ", ObjStr(pl->cl->object.cmdName), simpleName);
 	    */
@@ -3666,6 +3861,7 @@
       }
     }
   }
+  /*CmdListPrint(in,"FilterComputeOrderFullList....\n", *filterList);*/
 }
 
 /*
@@ -3724,7 +3920,7 @@
       checker = checker->next;
     }
     if (checker == 0) {
-      newlist = CmdListAdd(&obj->filterOrder, filterList->cmdPtr,
+      newlist = CmdListAdd(&obj->filterOrder, filterList->cmdPtr, filterList->clorobj,
 			   /*noDuplicates*/ 0);
       GuardAddInheritedGuards(in, newlist, obj, filterList->cmdPtr);
       /*
@@ -3883,7 +4079,7 @@
  */
 static Tcl_Command
 FilterSearchProc(Tcl_Interp *in, XOTclObject *obj, Tcl_ObjCmdProc **proc, ClientData* cp,
-		 Tcl_Command* currentCmd) {
+		 Tcl_Command* currentCmd, XOTclClass **cl) {
   XOTclCmdList *cmdList;
 
   assert(obj);
@@ -3898,8 +4094,7 @@
     if(Tcl_Command_cmdEpoch(cmdList->cmdPtr)) {
       cmdList = cmdList->next;
     } else if (FilterActiveOnObj(in, obj, cmdList->cmdPtr)) {
-      /*
-      fprintf(stderr, "Filter <%s> -- Active on: %s\n",
+      /* fprintf(stderr, "Filter <%s> -- Active on: %s\n",
 	     Tcl_GetCommandName(in, (Tcl_Command)cmdList->cmdPtr), ObjStr(obj->cmdName));
       */
       obj->filterStack->currentCmdPtr = cmdList->cmdPtr;
@@ -3908,9 +4103,13 @@
       /* ok. we' ve found it */
       *proc = Tcl_Command_objProc(cmdList->cmdPtr);
       *cp   = Tcl_Command_objClientData(cmdList->cmdPtr);
+      if (cmdList->clorobj && !XOTclObjectIsClass(&cmdList->clorobj->object)) {
+	*cl = NULL;
+      } else {
+	*cl = cmdList->clorobj;
+      }
       *currentCmd = cmdList->cmdPtr;
-      /*
-      fprintf(stderr, "FilterSearchProc - found: %s, %p\n",
+      /* fprintf(stderr, "FilterSearchProc - found: %s, %p\n",
 	     Tcl_GetCommandName(in, (Tcl_Command)cmdList->cmdPtr), cmdList->cmdPtr);
       */
       return cmdList->cmdPtr;
@@ -4069,37 +4268,31 @@
 SearchDefaultValuesOnClass(Tcl_Interp *in, XOTclObject *obj,
                            XOTclClass *cmdCl, XOTclClass *targetClass) {
   int result = TCL_OK;
-  register Tcl_HashEntry *entryPtr = 0, *initcmdsPtr = 0;
-  Var *defaults = 0, *initcmds = 0;
+  Var *defaults, *initcmds;
   Tcl_Namespace *ns = targetClass->object.nsPtr;
+  TclVarHashTable *varTable = ns ? Tcl_Namespace_varTable(ns) : targetClass->object.varTable;
 
-  if (ns) {
-    Tcl_HashTable *varTable = Tcl_Namespace_varTable(ns);
-    entryPtr = Tcl_FindHashEntry(varTable, "__defaults");
-    initcmdsPtr = Tcl_FindHashEntry(varTable, "__initcmds");
-  } else if (targetClass->object.varTable) {
-    entryPtr = Tcl_FindHashEntry(targetClass->object.varTable, "__defaults");
-    initcmdsPtr = Tcl_FindHashEntry(targetClass->object.varTable, "__initcmds");
-  }
-  if (entryPtr) {
-    defaults = (Var*) Tcl_GetHashValue(entryPtr);
-  }    
-  if (initcmdsPtr) {
-    initcmds = (Var*) Tcl_GetHashValue(initcmdsPtr);
-  }
+  defaults = lookupVarFromVarTable(varTable, "__defaults",(XOTclObject*)targetClass);
+  initcmds = lookupVarFromVarTable(varTable, "__initcmds",(XOTclObject*)targetClass);
 
   if (defaults && TclIsVarArray(defaults)) {
-    Tcl_HashTable *table = defaults->value.tablePtr;
+    TclVarHashTable *tablePtr = defaults->value.tablePtr;
     Tcl_HashSearch hSrch;
-    Tcl_HashEntry* hPtr = table ? Tcl_FirstHashEntry(table, &hSrch) : 0;
+    Tcl_HashEntry* hPtr = tablePtr ? Tcl_FirstHashEntry(VarHashTable(tablePtr), &hSrch) : 0;
     
-    /*fprintf(stderr, "+++ we have defaults for <%s>\n", 
-      className(targetClass));*/
+    /*fprintf(stderr, "+++ we have defaults for <%s>\n", className(targetClass));*/
     
+    /* iterate over all elements of the defaults array */
     for (; hPtr != 0; hPtr = Tcl_NextHashEntry(&hSrch)) {
-      char *varName        = Tcl_GetHashKey(table, hPtr);
+#if defined(PRE85)
+      char *varName        = Tcl_GetHashKey(tablePtr, hPtr);
       Tcl_Obj *varNameObj  = Tcl_NewStringObj(varName,-1);
-      Var  *val            = (Var*)Tcl_GetHashValue(hPtr);
+      Var  *val            = VarHashGetValue(hPtr);
+#else
+      Var  *val            = VarHashGetValue(hPtr);
+      Tcl_Obj *varNameObj  = VarHashGetKey(val);
+#endif
+
       INCR_REF_COUNT(varNameObj);
       if (TclIsVarScalar(val)) {
 	Tcl_Obj *oldValue;
@@ -4154,18 +4347,26 @@
       DECR_REF_COUNT(varNameObj);
     }
   } 
-
+  
   if (initcmds && TclIsVarArray(initcmds)) {
-    Tcl_HashTable *table = initcmds->value.tablePtr;
+    TclVarHashTable *tablePtr = initcmds->value.tablePtr;
     Tcl_HashSearch hSrch;
-    Tcl_HashEntry* hPtr = table ? Tcl_FirstHashEntry(table, &hSrch) : 0;
-    
+    Tcl_HashEntry* hPtr = tablePtr ? Tcl_FirstHashEntry(VarHashTable(tablePtr), &hSrch) : 0;
+
     /*fprintf(stderr, "+++ we have initcmds for <%s>\n", className(targetClass));*/
-    
+      /* iterate over the elements of initcmds */
     for (; hPtr != 0; hPtr = Tcl_NextHashEntry(&hSrch)) {
-      char *varName        = Tcl_GetHashKey(table, hPtr);
+
+#if defined(PRE85)
+      char *varName        = Tcl_GetHashKey(tablePtr, hPtr);
       Tcl_Obj *varNameObj  = Tcl_NewStringObj(varName,-1);
-      Var  *val            = (Var*)Tcl_GetHashValue(hPtr);
+      Var  *val            = VarHashGetValue(hPtr);
+#else
+      Var  *val            = VarHashGetValue(hPtr);
+      Tcl_Obj *varNameObj  = VarHashGetKey(val);
+      char *varName        = ObjStr(varNameObj);
+#endif
+
       INCR_REF_COUNT(varNameObj);
       /*fprintf(stderr,"varexists(%s->%s) = %d\n", 
 	      ObjStr(obj->cmdName),
@@ -4184,8 +4385,9 @@
 	  CallStackPush(in, obj, cmdCl, 0, 1,
 			&varNameObj, XOTCL_CSC_TYPE_PLAIN); /*allow to call self*/
 	  
-	  /* fprintf(stderr,"evaluating '%s'\n",ObjStr(valueObj)); */
-	  
+	  /*fprintf(stderr,"evaluating '%s' obj=%s\n\n",ObjStr(valueObj),ObjStr(obj->cmdName));
+	    XOTclCallStackDump(in);*/
+
 	  rc = Tcl_EvalObjEx(in, valueObj, TCL_EVAL_DIRECT);
 	  CallStackPop(in);
 	  DECR_REF_COUNT(varNameObj);
@@ -4241,22 +4443,8 @@
   return result;
 }
 
-
 static int
-XOTclOInitSlotsMethod(ClientData cd, Tcl_Interp *in, int objc, Tcl_Obj *CONST objv[]) {
-  XOTclObject  *obj   = (XOTclObject*)cd;
-
-  if (objc != 1)
-    return XOTclObjErrArgCnt(in, obj->cmdName, ObjStr(objv[1]));
-
-  /*
-   *  Search for default values for vars on superclasses
-   */
-  return SearchDefaultValues(in, obj, obj->cl);
-}
-
-static int
-ParameterSearchDefaultsMethod(ClientData cd, Tcl_Interp *in, int objc, Tcl_Obj *CONST objv[]) {
+ParameterSearchDefaultsMethod(ClientData cd, Tcl_Interp *in, int objc, Tcl_Obj *objv[]) {
   XOTclClass *cl = XOTclObjectToClass(cd);
   XOTclObject *defaultObj;
 
@@ -4273,7 +4461,27 @@
   return SearchDefaultValues(in, defaultObj, defaultObj->cl);
 }
 
+static int
+callParameterMethodWithArg(XOTclObject *obj, Tcl_Interp *in, Tcl_Obj *method,
+			   Tcl_Obj *arg, int objc, Tcl_Obj *CONST objv[], int flags) {
+  XOTclClassOpt* opt = obj->cl->opt;
+  Tcl_Obj *pcl = XOTclGlobalObjects[XOTE_PARAM_CL];
+  XOTclClass *paramCl;
+  int result;
 
+  if (opt && opt->parameterClass) pcl = opt->parameterClass;
+
+  if (GetXOTclClassFromObj(in,pcl,¶mCl, 1) == TCL_OK) {
+    result = XOTclCallMethodWithArgs((ClientData)paramCl, in,
+			       method, arg, objc-2, objv, flags);
+  }
+  else
+    result = XOTclVarErrMsg(in, "create: can't find parameter class",
+                            (char *) NULL);
+  return result;
+}
+
+
 /*
  * method dispatch
  */
@@ -4300,6 +4508,7 @@
   rst->callIsDestroy = 0;
   /*fprintf(stderr,"callProcCheck: setting callIsDestroy = 0, m=%s obj=%p (%s)\n",
     methodName, obj, ObjStr(obj->cmdName));*/
+
   /*
   fprintf(stderr,"*** callProcCheck: cmd = %p\n",cmd);
   fprintf(stderr,
@@ -4309,11 +4518,10 @@
 	  Tcl_GetCommandName(in, cmd),
 	  Tcl_Command_objProc(cmd) == XOTclObjDispatch, XOTclObjDispatch,
 	  Tcl_Command_objProc(cmd) == XOTclForwardMethod, XOTclForwardMethod,
-
+XOTclObjscopedMethod
 	  objv[0], objc
 	  );
   */
-  /* XOTclObjscopedMethod,*/
 
 #ifdef CALLSTACK_TRACE
   XOTclCallStackDump(in);
@@ -4419,9 +4627,9 @@
     /* fprintf(stderr, " returnCode %d xotcl rc %d\n",
        Tcl_Interp_returnCode(in), rst->returnCode);*/
 #endif
-    if (Tcl_Interp_numLevels(in) <= 2 && rst->returnCode == TCL_BREAK)
+    /*if (Tcl_Interp_numLevels(in) <= 2 && rst->returnCode == TCL_BREAK)
       result = TCL_BREAK;
-    else if (result == TCL_BREAK && rst->returnCode == TCL_OK)
+      else*/ if (result == TCL_BREAK && rst->returnCode == TCL_OK)
       rst->returnCode = result;
 
     /* we give the information whether the call has destroyed the
@@ -4572,12 +4780,10 @@
 	
 	  filterStackPushed = FilterStackPush(in, obj, objv[1]);
 	  cmd = FilterSearchProc(in, obj, &proc, &cp,
-				 &obj->filterStack->currentCmdPtr);
+				 &obj->filterStack->currentCmdPtr,&cl);
 	  if (cmd) { /* 'proc' and the other output vars are set as well */
 	    frameType = XOTCL_CSC_TYPE_ACTIVE_FILTER;
-	    cl = GetClassFromFullName(in, NSCmdFullName(cmd));
-	    callMethod = (char *) Tcl_GetCommandName(in, cmd);
-	    /* rst->filterCalls++; */
+	    callMethod = (char *)Tcl_GetCommandName(in, cmd);
 	  } else {
 	    FilterStackPop(obj);
 	    filterStackPushed = 0;
@@ -4635,8 +4841,8 @@
 
     if (proc) {
       result = TCL_OK;
-      if (DoCallProcCheck(cp, cd, in, objc, objv, cmd, obj, cl,
-			  callMethod, frameType, 0 /* fromNext */) == TCL_ERROR) {
+      if ((result = DoCallProcCheck(cp, cd, in, objc, objv, cmd, obj, cl,
+				    callMethod, frameType, 0 /* fromNext */)) == TCL_ERROR) {
 	result = XOTclErrInProc(in, cmdName, cl ? cl->object.cmdName : NULL, callMethod);
       }
       unknown = RUNTIME_STATE(in)->unknown;
@@ -5035,7 +5241,7 @@
       /* arg = ObjStr(argsv[i]);
          fprintf(stderr, "*** argparse0 arg='%s'\n",arg);*/
       rc = Tcl_ListObjGetElements(in, argsv[i], &npac, &npav);
-      if (rc == TCL_OK) {
+      if (rc == TCL_OK && npac > 0) {
         arg = ObjStr(npav[0]);
         /*fprintf(stderr, "*** argparse1 arg='%s' rc=%d\n",arg,rc);*/
         if (*arg == '-') {
@@ -5093,7 +5299,8 @@
       procPtr->cmdPtr->nsPtr->fullName,cmd->nsPtr->fullName);*/
     /*** patch the command ****/
     if (procPtr) {
-      procPtr->cmdPtr = (Command *)obj->id;
+      /* procPtr->cmdPtr = (Command *)obj->id; OLD*/
+      procPtr->cmdPtr->nsPtr = ((Command *)obj->id)->nsPtr;
     }
   }
 #endif
@@ -5184,19 +5391,54 @@
   return TCL_OK;
 }
 
+#if !defined(PRE85)
+static int
+ListVarKeys(Tcl_Interp *in, Tcl_HashTable *tablePtr, char *pattern) {
+  Tcl_HashEntry* hPtr;
 
+  if (pattern && noMetaChars(pattern)) {
+    Tcl_Obj *patternObj = Tcl_NewStringObj(pattern, -1);
+    INCR_REF_COUNT(patternObj);
+
+    hPtr = tablePtr ? Tcl_CreateHashEntry(tablePtr, (char *)patternObj, NULL) : 0;
+    if (hPtr) {
+      Var  *val = VarHashGetValue(hPtr);
+      Tcl_SetObjResult(in, VarHashGetKey(val));
+    } else {
+      Tcl_SetObjResult(in, XOTclGlobalObjects[XOTE_EMPTY]);
+    }
+    DECR_REF_COUNT(patternObj);
+  } else {
+    Tcl_Obj *list = Tcl_NewListObj(0, NULL);
+    Tcl_HashSearch hSrch;
+    hPtr = tablePtr ? Tcl_FirstHashEntry(tablePtr, &hSrch) : 0;
+    for (; hPtr; hPtr = Tcl_NextHashEntry(&hSrch)) {
+      Var  *val = VarHashGetValue(hPtr);
+      Tcl_Obj *key  = VarHashGetKey(val);
+      if (!pattern || Tcl_StringMatch(ObjStr(key), pattern)) {
+	Tcl_ListObjAppendElement(in, list, key);
+      }
+    }
+    Tcl_SetObjResult(in, list);
+  }
+  return TCL_OK;
+}
+#endif
+
+
 static int
 ListVars(Tcl_Interp *in, XOTclObject *obj, char *pattern) {
   Tcl_Obj *varlist, *okList, *element;
   int i, length;
+  TclVarHashTable *varTable = obj->nsPtr ? Tcl_Namespace_varTable(obj->nsPtr) : obj->varTable;
 
-  if (obj->nsPtr) {
-    Tcl_HashTable *varTable = Tcl_Namespace_varTable(obj->nsPtr);
-    ListKeys(in, varTable, pattern);
-  } else {
-    ListKeys(in, obj->varTable, pattern);
-  }
+#if defined(PRE85)
+  ListKeys(in, varTable, pattern);
+#else
+  ListVarKeys(in, VarHashTable(varTable), pattern);
+#endif
   varlist = Tcl_GetObjResult(in);
+
   Tcl_ListObjLength(in, varlist, &length);
   okList = Tcl_NewListObj(0, NULL);
   for (i=0; iflags & XOTCL_FILTER_ORDER_VALID) &&
       obj->filterStack &&
       obj->filterStack->currentCmdPtr) {
-    *cmd = FilterSearchProc(in, obj, proc, cp, currentCmd);
+    *cmd = FilterSearchProc(in, obj, proc, cp, currentCmd,cl);
     /*fprintf(stderr,"EndOfChain? proc=%p, cmd=%p\n",*proc,*cmd);*/
     /*  XOTclCallStackDump(in); XOTclStackDump(in);*/
 
@@ -5786,7 +6028,6 @@
       }
     } else {
       *method = (char *) Tcl_GetCommandName(in, *cmd);
-      *cl  = GetClassFromFullName(in, NSCmdFullName(*cmd));
       *isFilterEntry = 1;
       return;
     }
@@ -6177,9 +6418,9 @@
       else if (!strcmp(option, "activemixin")) {
 	  XOTclObject *o = NULL;
 	  csc = CallStackGetTopFrame(in);
-	  CmdListPrint(in,"self a....\n", obj->mixinOrder);
+	  /*CmdListPrint(in,"self a....\n", obj->mixinOrder);
 	  fprintf(stderr,"current cmdPtr = %p cl = %p, mo=%p %p\n", csc->cmdPtr, csc->cl,
-		  obj->mixinOrder,   RUNTIME_STATE(in)->cmdPtr);
+	  obj->mixinOrder,   RUNTIME_STATE(in)->cmdPtr);*/
 	  if (RUNTIME_STATE(in)->cmdPtr) {
 	    o = XOTclGetObjectFromCmdPtr(RUNTIME_STATE(in)->cmdPtr);
 	  }
@@ -6404,9 +6645,6 @@
     obj->filterOrder = 0;
     obj->flags = 0;
   }
-  /*
-    fprintf(stderr, "cleanupInitObject %s: %p cl = %p\n",
-    obj->cmdName ? ObjStr(obj->cmdName) : "", obj, obj->cl);*/
 }
 
 /*
@@ -6569,39 +6807,17 @@
   return obj;
 }
 
-static XOTclClass *DefaultSuperClass(Tcl_Interp *in, XOTclClass *cl, XOTclClass *topcl) {
-  XOTclObject *obj = (XOTclObject*)cl;
-  XOTclClass *defaultClass = topcl;
-  if (obj->cl) {
-    int result;
-    /*fprintf(stderr, "mcl= %s\n", ObjStr(obj->cl->object.cmdName));*/
-    result = setInstVar(in, (XOTclObject *)obj->cl, 
-                        XOTclGlobalObjects[XOTE_DEFAULTSUPERCLASS], NULL);
-    if (result == TCL_OK) {
-      Tcl_Obj *nameObj = Tcl_GetObjResult(in);
-      if (GetXOTclClassFromObj(in, nameObj, &defaultClass, 0) != TCL_OK) {
-        XOTclErrMsg(in, "default superclass is not a class", TCL_STATIC);
-      }
-    }
-  } else {
-    /* during bootstrapping, there might be no meta class defined yet */
-    /*fprintf(stderr, "no meta class\n");*/
-  }
-  return defaultClass;
-}
-
 /*
  * Cleanup class: remove filters, mixins, assertions, instances ...
  * and remove class from class hierarchy
  */
 static void
 CleanupDestroyClass(Tcl_Interp *in, XOTclClass *cl, int softrecreate) {
   Tcl_HashSearch hSrch;
-  Tcl_HashEntry *hPtr;
+  Tcl_HashEntry* hPtr;
   XOTclClass *theobj = RUNTIME_STATE(in)->theObject;
   XOTclObject *obj = (XOTclObject*)cl;
-  XOTclClassOpt *opt = cl->opt;
-  XOTclClass *defaultClass = NULL;
+  XOTclClassOpt* opt = cl->opt;
 
   if (opt) {
     CmdListRemoveList(&opt->instmixins, GuardDel);
@@ -6623,7 +6839,6 @@
   NSDeleteChildren(in, cl->nsPtr);
 
   if (!softrecreate) {
-    defaultClass = DefaultSuperClass(in, cl, RUNTIME_STATE(in)->theObject);
     /* reset all instances to the class ::xotcl::Object, that makes no sense
        for ::Object itself */
     if (cl != theobj) {
@@ -6633,7 +6848,7 @@
 	if (inst && (inst != (XOTclObject*)cl) && inst->id) {
 	  if (inst != &(theobj->object)) {
 	    (void)RemoveInstance(inst, obj->cl);
-	    AddInstance(inst, defaultClass);
+	    AddInstance(inst, theobj);
 	  }
 	}
       }
@@ -6676,24 +6891,21 @@
        * -> don't do that for Object itself!
        */
       if (subClass->super == 0 && cl != theobj)
-	AddSuper(subClass, defaultClass);
+	AddSuper(subClass, theobj);
     }
     while (cl->super) (void)RemoveSuper(cl, cl->super->cl);
   }
 
 }
 
-
 /*
  * do class initialization & namespace creation
  */
 static void
 CleanupInitClass(Tcl_Interp *in, XOTclClass *cl, Tcl_Namespace *namespacePtr,
 		 int softrecreate) {
   XOTclObject *obj = (XOTclObject*)cl;
-  XOTclClass *defaultSuperclass = RUNTIME_STATE(in)->theObject;
 
-  /* fprintf(stderr,"+++ CleanupInitClass\n"); */
 #ifdef OBJDELETION_TRACE
   fprintf(stderr,"+++ CleanupInitClass\n");
 #endif
@@ -6708,19 +6920,11 @@
   XOTclObjectSetClass(obj);
 
   cl->nsPtr = namespacePtr;
+
   cl->super = 0;
   cl->sub = 0;
-  /*xxxx Look for a configured default superclass */
-  defaultSuperclass = DefaultSuperClass(in,cl,RUNTIME_STATE(in)->theObject);
-
-  /*
-  if (defaultSuperclass) {
-    fprintf(stderr, "default superclass= %s\n", ObjStr(defaultSuperclass->object.cmdName));
-  } else {
-    fprintf(stderr, "empty super class\n");
-    }*/
-
-  AddSuper(cl, defaultSuperclass);
+  AddSuper(cl, RUNTIME_STATE(in)->theObject);
+  cl->parent = RUNTIME_STATE(in)->theObject;
   cl->color = WHITE;
   cl->order = 0;
   cl->parameters = 0;
@@ -6928,9 +7132,8 @@
    * Search for default values of parameter on superclasses
    */
   if (!(obj->flags & XOTCL_INIT_CALLED)) {
-    result = callMethod((ClientData) obj, in,
-		      XOTclGlobalObjects[XOTE_INITSLOTS], 2, 0, 0);
-
+    result = callParameterMethodWithArg(obj, in, XOTclGlobalObjects[XOTE_SEARCH_DEFAULTS],
+					obj->cmdName, 3, 0, 0);
     if (result != TCL_OK)
       return result;
   }
@@ -7293,7 +7496,7 @@
   if (objc != 2) return XOTclObjErrArgCnt(in, obj->cmdName, "exists var");
 
   Tcl_SetIntObj(Tcl_GetObjResult(in), 
-		varExists(in, obj, ObjStr(objv[1]), NULL, 1,1));
+		varExists(in, obj, ObjStr(objv[1]),NULL, 1,1));
   return TCL_OK;
 }
 
@@ -7745,54 +7948,13 @@
   return result;
 }
 
-/*
- * We need NewVar from tclVar.c ... but its not exported
- */
-static Var *NewVar() {
-  register Var *varPtr;
-
-  varPtr = (Var *) ckalloc(sizeof(Var));
-  varPtr->value.objPtr = NULL;
-  varPtr->name = NULL;
-  varPtr->nsPtr = NULL;
-  varPtr->hPtr = NULL;
-  varPtr->refCount = 0;
-  varPtr->tracePtr = NULL;
-  varPtr->searchPtr = NULL;
-  varPtr->flags = (VAR_SCALAR | VAR_UNDEFINED | VAR_IN_HASHTABLE);
-  return varPtr;
-}
-
-static void
-CleanupVar(Var * varPtr, Var *arrayPtr) {
-    if (TclIsVarUndefined(varPtr) && (varPtr->refCount == 0)
-	    && (varPtr->tracePtr == NULL)
-	    && (varPtr->flags & VAR_IN_HASHTABLE)) {
-	if (varPtr->hPtr != NULL) {
-	    Tcl_DeleteHashEntry(varPtr->hPtr);
-	}
-	ckfree((char *) varPtr);
-    }
-    if (arrayPtr != NULL) {
-	if (TclIsVarUndefined(arrayPtr) && (arrayPtr->refCount == 0)
-		&& (arrayPtr->tracePtr == NULL)
-	        && (arrayPtr->flags & VAR_IN_HASHTABLE)) {
-	    if (arrayPtr->hPtr != NULL) {
-		Tcl_DeleteHashEntry(arrayPtr->hPtr);
-	    }
-	    ckfree((char *) arrayPtr);
-	}
-    }
-}
-
 static int
 GetInstVarIntoCurrentScope(Tcl_Interp *in, XOTclObject *obj,
 			   char *varName, char *newName) {
-  Var *varPtr, *otherPtr = 0, *arrayPtr;
+  Var *varPtr = NULL, *otherPtr = NULL, *arrayPtr;
   int new;
   Tcl_CallFrame *varFramePtr;
-  Tcl_HashEntry *hPtr;
-  Tcl_HashTable *tablePtr;
+  TclVarHashTable *tablePtr;
   XOTcl_FrameDecls;
 
   int flgs = TCL_LEAVE_ERR_MSG |
@@ -7839,17 +8001,19 @@
    * variable linked to the new namespace variable "varName".
    */
   if (varFramePtr != NULL && Tcl_CallFrame_isProcCallFrame(varFramePtr)) {
-    Proc *procPtr = Tcl_CallFrame_procPtr(varFramePtr);
-    int localCt = procPtr->numCompiledLocals;
+    Proc *procPtr           = Tcl_CallFrame_procPtr(varFramePtr);
+    int localCt             = procPtr->numCompiledLocals;
     CompiledLocal *localPtr = procPtr->firstLocalPtr;
-    Var *localVarPtr = Tcl_CallFrame_compiledLocals(varFramePtr);
-    int nameLen = strlen(newName);
-    int i;
+    Var *localVarPtr        = Tcl_CallFrame_compiledLocals(varFramePtr);
+    int i, nameLen          = strlen(newName);
 
-    varPtr = NULL;
     for (i = 0;  i < localCt;  i++) {    /* look in compiled locals */
       if (!TclIsVarTemporary(localPtr)) {
+#if defined(PRE85)
 	char *localName = localVarPtr->name;
+#else
+	char *localName = localPtr->name;
+#endif
 	if ((newName[0] == localName[0])
 	    && (nameLen == localPtr->nameLength)
 	    && (strcmp(newName, localName) == 0)) {
@@ -7864,20 +8028,27 @@
 
     if (varPtr == NULL) {	/* look in frame's local var hashtable */
       tablePtr = Tcl_CallFrame_varTablePtr(varFramePtr);
+#if !defined(PRE85)
+      Tcl_Obj *newNameObj = Tcl_NewStringObj(newName, -1);
+      INCR_REF_COUNT(newNameObj);
+#endif
       if (tablePtr == NULL) {
+
+#if defined(PRE85)
 	tablePtr = (Tcl_HashTable *) ckalloc(sizeof(Tcl_HashTable));
 	Tcl_InitHashTable(tablePtr, TCL_STRING_KEYS);
+#else
+	tablePtr = (TclVarHashTable *) ckalloc(sizeof(TclVarHashTable));
+	TclInitVarHashTable(tablePtr, NULL);
+#endif
 	Tcl_CallFrame_varTablePtr(varFramePtr) = tablePtr;
       }
-      hPtr = Tcl_CreateHashEntry(tablePtr, newName, &new);
-      if (new) {
-	varPtr = NewVar();
-	Tcl_SetHashValue(hPtr, varPtr);
-	varPtr->hPtr = hPtr;
-	varPtr->nsPtr = (Namespace *)varFramePtr->nsPtr;
-      } else {
-	varPtr = (Var *) Tcl_GetHashValue(hPtr);
-      }
+#if defined(PRE85)
+      varPtr = VarHashCreateVar(tablePtr, newName, &new);
+#else 
+      varPtr = VarHashCreateVar(tablePtr, newNameObj, &new);
+      DECR_REF_COUNT(newNameObj);
+#endif
     }
     /*
      * if we define an alias (newName != varName), be sure that
@@ -7894,26 +8065,38 @@
 	  return TCL_OK;
 	}
 
+#if defined(PRE85)
 	linkPtr->refCount--;
 	if (TclIsVarUndefined(linkPtr)) {
 	  CleanupVar(linkPtr, (Var *) NULL);
 	}
+#else
+	fprintf(stderr, "linkvar flags=%x\n",linkPtr->flags);
+	assert(TclIsVarInHash(linkPtr)); 
+	panic("new linkvar... When does this happen?",0);
+#endif
 
-	    /*
-	return XOTclVarErrMsg(in, "can't instvar to link", (char *) NULL);
-	    */
+	/*
+	  return XOTclVarErrMsg(in, "can't link instvar", (char *) NULL);
+	*/
       } else if (!TclIsVarUndefined(varPtr)) {
 	return XOTclVarErrMsg(in, "variable '", newName,
                               "' exists already", (char *) NULL);
-      } else if (varPtr->tracePtr != NULL) {
+      } else if (TclIsVarTraced(varPtr)) {
         return XOTclVarErrMsg(in, "variable '", newName,
                               "' has traces: can't use for instvar", (char *) NULL);
       }
     }
     TclSetVarLink(varPtr);
     TclClearVarUndefined(varPtr);
     varPtr->value.linkPtr = otherPtr;
+#if defined(PRE85)
     otherPtr->refCount++;
+#else
+    assert(TclIsVarInHash(otherPtr)); 
+    /*fprintf(stderr, "othervar flags=%x %d\n",otherPtr->flags,TclIsVarInHash(otherPtr));*/
+    VarHashRefCount(otherPtr)--;
+#endif
   }
   return TCL_OK;
 }
@@ -8022,7 +8205,7 @@
   XOTclObject *obj = (XOTclObject*)cd;
 
   if (!obj) return XOTclObjErrType(in, objv[0], "Object");
-  if (objc > 2)  XOTclObjErrArgCnt(in, obj->cmdName, "parameter ?value?");
+  if (objc > 2) return XOTclObjErrArgCnt(in, obj->cmdName, "parameter ?value?");
   return setInstVar(in, obj, objv[0], objc == 2 ? objv[1] : NULL);
 }
 
@@ -9001,7 +9184,7 @@
 static int
 XOTclOFilterSearchMethod(ClientData cd, Tcl_Interp *in, int objc, Tcl_Obj *CONST objv[]) {
   XOTclObject *obj = (XOTclObject*)cd;
-  char *methodName, *fullName;
+  char *methodName;
   XOTclCmdList *cmdList;
   XOTclClass *fcl;
   XOTclObject *fobj;
@@ -9028,11 +9211,12 @@
   if (!cmdList)
     return TCL_OK;
 
-  fullName = NSCmdFullName(cmdList->cmdPtr);
-  if ((fcl = GetClassFromFullName(in, fullName))) {
+  fcl = cmdList->clorobj;
+  if (fcl && XOTclObjectIsClass(&fcl->object)) {
     fobj = 0;
   } else {
-    fobj = XOTclpGetObject(in, fullName);
+    fobj = (XOTclObject*)fcl;
+    fcl = 0;
   }
 
   Tcl_SetObjResult(in, 
@@ -9044,7 +9228,7 @@
 static int
 XOTclOProcSearchMethod(ClientData cd, Tcl_Interp *in, int objc, Tcl_Obj *CONST objv[]) {
   XOTclObject *obj = (XOTclObject*)cd;
-  XOTclClass *cl = 0;
+  XOTclClass *pcl = NULL;
   Tcl_Command cmd = 0;
   char *simpleName, *methodName;
 
@@ -9066,23 +9250,21 @@
       XOTclCmdList* mixinList = obj->mixinOrder;
       while (mixinList) {
 	XOTclClass *mcl = XOTclpGetClass(in, (char *)Tcl_GetCommandName(in, mixinList->cmdPtr));
-	if (mcl && SearchCMethod(mcl, methodName, &cmd))
+	if (mcl && (pcl = SearchCMethod(mcl, methodName, &cmd))) {
 	  break;
+	}
 	mixinList = mixinList->next;
       }
     }
   }
 
   if (!cmd && obj->cl)
-    cl = SearchCMethod(obj->cl, methodName, &cmd);
+    pcl = SearchCMethod(obj->cl, methodName, &cmd);
 
   if (cmd) {
-    char *fullName = NSCmdFullName(cmd);
-    XOTclClass *pcl = GetClassFromFullName(in, fullName);
-    XOTclObject *pobj = pcl ? 0 : XOTclpGetObject(in, fullName);
-    simpleName = (char *) Tcl_GetCommandName(in, cmd);
-    Tcl_SetObjResult(in, getFullProcQualifier(in, simpleName, pobj, pcl,
-					      cmd));
+    XOTclObject *pobj = pcl ? NULL : obj;
+    simpleName = (char *)Tcl_GetCommandName(in, cmd);
+    Tcl_SetObjResult(in, getFullProcQualifier(in, simpleName, pobj, pcl, cmd));
   }
   return TCL_OK;
 }
@@ -9166,8 +9348,11 @@
     methodName, argc+1, obj, result);  */
 
   if (result != TCL_OK) {
-    XOTclVarErrMsg(in, " during '", ObjStr(obj->cmdName), " ",
+    Tcl_Obj *res =  Tcl_DuplicateObj(Tcl_GetObjResult(in)); /* save the result */
+    INCR_REF_COUNT(res);
+    XOTclVarErrMsg(in, ObjStr(res), " during '", ObjStr(obj->cmdName), " ",
                    methodName, "'", (char *) NULL);
+    DECR_REF_COUNT(res);
   }
   return result;
 }
@@ -9873,7 +10058,14 @@
       break;
 
     case 'p':
-      if (!strcmp(cmd, "parameter")) {
+      if (!strcmp(cmd, "parameterclass")) {
+	if (opt && opt->parameterClass) {
+	  Tcl_SetObjResult(in, opt->parameterClass);
+	} else {
+	  Tcl_SetObjResult(in, XOTclGlobalObjects[XOTE_PARAM_CL]);
+	}
+	return TCL_OK;
+      } else if (!strcmp(cmd, "parameter")) {
 
 	Tcl_DString ds, *dsPtr = &ds;
 	XOTclObject *o;
@@ -9944,6 +10136,70 @@
 }
 
 static int
+XOTclCParameterMethod(ClientData cd, Tcl_Interp *in, int objc, Tcl_Obj *CONST objv[]) {
+  XOTclClass *cl = XOTclObjectToClass(cd);
+  Tcl_Obj     **pv = 0;
+  int         elts, pc,  result;
+  char *      params;
+  if (!cl) return XOTclObjErrType(in, objv[0], "Class");
+  if (objc != 2)
+    return XOTclObjErrArgCnt(in, cl->object.cmdName, "parameter ?params?");
+  if (cl->parameters) {
+    DECR_REF_COUNT(cl->parameters);
+  }
+
+  /* did we delete the parameters ? */
+  params = ObjStr(objv[1]);
+  if ((params == NULL) || (*params == '\0')) {
+    cl->parameters = 0;
+    return TCL_OK;
+  }
+
+  /* ok, remember the params */
+  cl->parameters = objv[1];
+  INCR_REF_COUNT(cl->parameters);
+
+  /* call getter/setter methods in params */
+  result = Tcl_ListObjGetElements(in, objv[1], &pc, &pv);
+  if (result == TCL_OK) {
+    for (elts = 0; elts < pc; elts++) {
+      result = callParameterMethodWithArg(&cl->object, in,
+					  XOTclGlobalObjects[XOTE_MKGETTERSETTER],
+					  cl->object.cmdName, 3+1, &pv[elts],0);
+      if (result != TCL_OK)
+	break;
+    }
+  }
+  return result;
+}
+
+static int
+XOTclCParameterClassMethod(ClientData cd, Tcl_Interp *in, int objc, Tcl_Obj *CONST objv[]) {
+  XOTclClass *cl = XOTclObjectToClass(cd);
+  char *paramClStr;
+  XOTclClassOpt *opt;
+
+  if (!cl) return XOTclObjErrType(in, objv[0], "Class");
+  if (objc != 2)
+    return XOTclObjErrArgCnt(in, cl->object.cmdName, "parameterclass cl");
+
+  paramClStr = ObjStr(objv[1]);
+  opt = cl->opt;
+  if (opt && opt->parameterClass) {
+    DECR_REF_COUNT(opt->parameterClass);
+  }
+  if ((paramClStr == NULL) || (*paramClStr == '\0')) {
+    if (opt)
+      opt->parameterClass = 0;
+  } else {
+    opt = XOTclRequireClassOpt(cl);
+    opt->parameterClass = objv[1];
+    INCR_REF_COUNT(opt->parameterClass);
+  }
+  return TCL_OK;
+}
+
+static int
 XOTclCInstParameterCmdMethod(ClientData cd, Tcl_Interp *in,
 			     int objc, Tcl_Obj * CONST objv[]) {
   XOTclClass *cl = XOTclObjectToClass(cd);
@@ -10479,7 +10735,7 @@
         ClientData cd;
 	if (objProc) {
           cd = Tcl_Command_objClientData(cmd);
-          if (cd == 0) {
+          if (cd == 0 || cd == XOTCL_NONLEAF_METHOD) {
             /* if client data not null, we would have to copy
                the client data; we don't know its size...., so rely
                on introspection for copying */
@@ -10488,7 +10744,7 @@
           }
 	} else {
           cd = Tcl_Command_clientData(cmd);
-          if (cd == 0) {
+          if (cd == 0 || cd == XOTCL_NONLEAF_METHOD) {
             Tcl_CreateCommand(in, newName, Tcl_Command_proc(cmd),
                               Tcl_Command_clientData(cmd), deleteProc);
           }
@@ -10508,7 +10764,7 @@
   Tcl_DString ds, *dsPtr = &ds;
   Tcl_HashSearch hSrch;
   Tcl_HashEntry* hPtr;
-  Tcl_HashTable *varTable;
+  TclVarHashTable *varTable;
   int rc = TCL_OK;
   char *varName;
   XOTclObject *obj;
@@ -10540,13 +10796,19 @@
     destFullName = ObjStr(newObj->cmdName);
   }
 
-  /* copy all vars in the ns */
-  hPtr = varTable ? Tcl_FirstHashEntry(varTable, &hSrch) : 0;
+  /* copy all vars in the namespace */
+  hPtr = varTable ? Tcl_FirstHashEntry(VarHashTable(varTable), &hSrch) : 0;
   while (hPtr != NULL) {
+#if defined(PRE85)
     varPtr = (Var *) Tcl_GetHashValue(hPtr);
+    varName = Tcl_GetHashKey(VarHashTable(varTable), hPtr);
+#else
+    Tcl_Obj *varNameObj;
+    varPtr     = VarHashGetValue(hPtr);
+    varNameObj = VarHashGetKey(varPtr);
+    varName = ObjStr(varNameObj);
+#endif
     if (!TclIsVarUndefined(varPtr) && !TclIsVarLink(varPtr)) {
-      varName = Tcl_GetHashKey(varTable, hPtr);
-
       if (TclIsVarScalar(varPtr)) {
 	/* it may seem odd that we do not copy obj vars with the
 	 * same SetVar2 as normal vars, but we want to dispatch it in order to
@@ -10557,6 +10819,7 @@
 	  Tcl_DStringAppendElement(dsPtr, "set");
 	  Tcl_DStringAppendElement(dsPtr, varName);
 	  Tcl_DStringAppendElement(dsPtr, ObjStr(varPtr->value.objPtr));
+	  /*fprintf(stderr, "cmd: %s\n",Tcl_DStringValue(dsPtr));*/
 	  rc = Tcl_EvalEx(in, Tcl_DStringValue(dsPtr),Tcl_DStringLength(dsPtr),0);
 	  DSTRING_FREE(dsPtr);
 	} else {
@@ -10567,14 +10830,21 @@
 	}
       } else {
 	if (TclIsVarArray(varPtr)) {
-	  Tcl_HashTable *aTable = varPtr->value.tablePtr;
+	  TclVarHashTable *aTable = varPtr->value.tablePtr;
 	  Tcl_HashSearch ahSrch;
-	  Tcl_HashEntry* ahPtr = aTable ? Tcl_FirstHashEntry(aTable, &ahSrch) : 0;
-	
+	  Tcl_HashEntry* ahPtr = aTable ? Tcl_FirstHashEntry(VarHashTable(aTable), &ahSrch) :0;
 	  for (; ahPtr != 0; ahPtr = Tcl_NextHashEntry(&ahSrch)) {
-	    char *eltName = Tcl_GetHashKey(aTable, ahPtr);
-	    Var  *eltVar  = (Var*) Tcl_GetHashValue(ahPtr);
-	
+	    char *eltName;
+	    Var *eltVar;
+#if defined(PRE85)
+	    eltName = Tcl_GetHashKey(VarHashTable(aTable), ahPtr);
+	    eltVar = (Var *) Tcl_GetHashValue(ahPtr);
+#else
+	    Tcl_Obj *eltNameObj;
+	    eltVar     = VarHashGetValue(ahPtr);
+	    eltNameObj = VarHashGetKey(eltVar);
+	    eltName = ObjStr(eltNameObj);
+#endif
 	    if (TclIsVarScalar(eltVar)) {
 	      if (obj) {
 		Tcl_DString ds2, *ds2Ptr = &ds2;
@@ -10612,32 +10882,9 @@
 XOTclSelfDispatchCmd(ClientData cd, Tcl_Interp *in, int objc, Tcl_Obj *CONST objv[]) {
   XOTclObject *self;
   int result;
-  if (objc < 2) return XOTclObjErrArgCnt(in, objv[0], "::xotcl::my ?-local? method ?args?");
+  if (objc < 2) return XOTclObjErrArgCnt(in, objv[0], "::xotcl::my method ?args?");
   if ((self = GetSelfObj(in))) {
-    int i = 1;
-    char *arg1 = ObjStr(objv[1]);
-    if (*arg1 == '-' && !strcmp("-local",arg1)) {
-      XOTclClass *cl = GetSelfClass(in);
-      Tcl_Command cmd;
-      ClientData cp;
-      char *method;
-      if (objc < 3) return XOTclObjErrArgCnt(in, objv[0], "::xotcl::my ?-local? method ?args?");
-      method = ObjStr(objv[2]);
-      i++;
-      cmd = FindMethod(method, cl->nsPtr);
-      if (cmd == 0)
-        return XOTclVarErrMsg(in, ObjStr(self->cmdName), 
-                              ": unable to dispatch local method '",
-                              method, "' in class ", ObjStr(cl->object.cmdName), 
-                              (char *) NULL);
-      cp   = Tcl_Command_objClientData(cmd);
-      /*fprintf(stderr, "method %s, cmd = %p objc=%d\n", method, cmd, objc);
-      for (i=0; i= argsc)
 	    return XOTclVarErrMsg(in, "Non positional arg '",
 				  argStr, "': value missing", (char *) NULL);
-	  Tcl_SetVar2(in, ObjStr(var), 0, ObjStr(argsv[i]), 0);
+	  Tcl_SetVar2Ex(in, ObjStr(var), NULL, argsv[i], 0);
 	}
       } else {
 	endOfNonposArgsReached = 1;
@@ -10872,7 +11119,7 @@
 	INCR_REF_COUNT(list);
 	for(; i < argsc; i++)
 	  Tcl_ListObjAppendElement(in, list, argsv[i]);
-	Tcl_ObjSetVar2(in, ordinaryArgsDefv[ordinaryArgsCounter], 0, list, 0);
+	Tcl_SetVar2Ex(in, ObjStr(ordinaryArgsDefv[ordinaryArgsCounter]), NULL, list, 0);
 	DECR_REF_COUNT(list);
       } else {
 	/* break down this argument, if it has a default value,
@@ -10883,7 +11130,7 @@
 	if (r4 == TCL_OK && defaultValueObjc == 2) {
 	  ordinaryArg = defaultValueObjv[0];
 	}
-	Tcl_ObjSetVar2(in, ordinaryArg, 0, argsv[i], 0);
+	Tcl_SetVar2Ex(in, ObjStr(ordinaryArg), NULL, argsv[i], 0);
       }
       ordinaryArgsCounter++;
     }
@@ -10907,7 +11154,7 @@
 	      ObjStr(ordinaryArgsDefv[ordinaryArgsCounter]), 
 	      r4,defaultValueObjc);*/
       if (r4 == TCL_OK && defaultValueObjc == 2) {
-	Tcl_ObjSetVar2(in, defaultValueObjv[0], 0, defaultValueObjv[1], 0);
+	Tcl_SetVar2Ex(in, ObjStr(defaultValueObjv[0]), NULL, defaultValueObjv[1], 0);
       } else {
 	Tcl_Obj *tmp = NonposArgsFormat(in, nonposArgs->nonposArgs);
 	XOTclVarErrMsg(in, "wrong # args for method '",
@@ -11263,7 +11510,8 @@
   /*
    * evaluate user-defined exit handler
    */
-  result = Tcl_Eval(in, "::xotcl::__exitHandler");
+  result = callMethod((ClientData)RUNTIME_STATE(in)->theObject, in,
+		      XOTclGlobalObjects[XOTE_EXIT_HANDLER], 2, 0, 0);
   if (result != TCL_OK) {
     fprintf(stderr,"User defined exit handler contains errors!\n"
             "Error in line %d: %s\nExecution interrupted.\n",
@@ -11277,10 +11525,14 @@
   while (cs->top > cs->content)
     CallStackPop(in);
 
-  while (Tcl_Interp_framePtr(in))
+  while (1) {
+    Tcl_CallFrame *f = Tcl_Interp_framePtr(in);
+    if (!f) break;
+    if (Tcl_CallFrame_level(f) == 0) break;
     Tcl_PopCallFrame(in);
-  /*
-   * deleting in two rounds:
+  }
+
+  /* deleting in two rounds:
    *  (a) SOFT DESTROY: call all user-defined destroys
    *  (b) PHYSICAL DESTROY: delete the commands, user-defined
    *      destroys are not executed anymore
@@ -11386,61 +11638,18 @@
   Tcl_CreateExitHandler(XOTcl_ExitProc, cd);
 }
 
-int
-XOTclCreateObjectSystem(Tcl_Interp *in, char *Object, char *Class) {
-  XOTclClass *theobj = 0;
-  XOTclClass *thecls = 0;  
-  
-  /* create Object and Class, and store them in the RUNTIME STATE */
-  theobj = PrimitiveCCreate(in, Object, 0);
-  RUNTIME_STATE(in)->theObject = theobj;
-  if (!theobj) panic("Cannot create base Object class",0);
 
-  thecls = PrimitiveCCreate(in, Class, 0);
-  RUNTIME_STATE(in)->theClass = thecls;
-  if (!thecls) panic("Cannot create base Class",0);
 
-  /*theobj->parent = 0;
-    thecls->parent = theobj;*/
-
-  /*Tcl_AddInterpResolvers(in, "XOTcl", XOTclResolveCmd, 0, 0);*/
-
-#if defined(PROFILE)
-  XOTclProfileInit(in);
-#endif
-
-  /* test Object and Class creation */
-  if (!theobj || !thecls) {
-    int i;
-    RUNTIME_STATE(in)->callDestroy = 0;
-
-    if (thecls) PrimitiveCDestroy((ClientData) thecls);
-    if (theobj) PrimitiveCDestroy((ClientData) theobj);
-
-    for (i = 0; i < nr_elements(XOTclGlobalStrings); i++) {
-      DECR_REF_COUNT(XOTclGlobalObjects[i]);
-    }
-    FREE(Tcl_Obj**, XOTclGlobalObjects);
-    FREE(XOTclRuntimeState, RUNTIME_STATE(in));
-
-    return XOTclErrMsg(in, "Object/Class failed", TCL_STATIC);
-  }
-
-  AddInstance((XOTclObject*)theobj, thecls);
-  AddInstance((XOTclObject*)thecls, thecls);
-  AddSuper(thecls, theobj);
-  
-  return TCL_OK;
-}
-
-
-
 /*
  * Tcl extension initialization routine
  */
 
 extern int
 Xotcl_Init(Tcl_Interp *in) {
+  XOTclClass *theobj = 0;
+  XOTclClass *thecls = 0;
+  XOTclClass *paramCl = 0;
+  XOTclClass *nonposArgsCl = 0;
   ClientData runtimeState;
   int result, i;
 #ifdef XOTCL_BYTECODE
@@ -11532,26 +11741,52 @@
     XOTclGlobalObjects[i] = Tcl_NewStringObj(XOTclGlobalStrings[i],-1);
     INCR_REF_COUNT(XOTclGlobalObjects[i]);
   }
-#if defined(OO)
-  Tcl_CreateNamespace(in, "::oo", (ClientData)NULL, (Tcl_NamespaceDeleteProc*)NULL);
-  XOTclCreateObjectSystem(in, "::oo::object", "::oo::class");
-#else 
-  XOTclCreateObjectSystem(in, "::xotcl::Object", "::xotcl::Class");
+
+  /* create Object and Class, and store them in the RUNTIME STATE */
+  theobj = PrimitiveCCreate(in, "::xotcl::Object", 0);
+  RUNTIME_STATE(in)->theObject = theobj;
+  if (!theobj) panic("Cannot create ::xotcl::Object",0);
+
+  thecls = PrimitiveCCreate(in, "::xotcl::Class", 0);
+  RUNTIME_STATE(in)->theClass = thecls;
+  if (!thecls) panic("Cannot create ::xotcl::Class",0);
+
+  theobj->parent = 0;
+  thecls->parent = theobj;
+
+  Tcl_Export(in, RUNTIME_STATE(in)->XOTclNS, "Object", 0);
+  Tcl_Export(in, RUNTIME_STATE(in)->XOTclNS, "Class", 0);
+  /*Tcl_AddInterpResolvers(in, "XOTcl", XOTclResolveCmd, 0, 0);*/
+
+#if defined(PROFILE)
+  XOTclProfileInit(in);
 #endif
 
+  /* test Object and Class creation */
+  if (!theobj || !thecls) {
+    RUNTIME_STATE(in)->callDestroy = 0;
+
+    if (thecls) PrimitiveCDestroy((ClientData) thecls);
+    if (theobj) PrimitiveCDestroy((ClientData) theobj);
+
+    for (i = 0; i < nr_elements(XOTclGlobalStrings); i++) {
+      DECR_REF_COUNT(XOTclGlobalObjects[i]);
+    }
+    FREE(Tcl_Obj**, XOTclGlobalObjects);
+    FREE(XOTclRuntimeState, RUNTIME_STATE(in));
+
+    return XOTclErrMsg(in, "Object/Class failed", TCL_STATIC);
+  }
+
+  AddInstance((XOTclObject*)theobj, thecls);
+  AddInstance((XOTclObject*)thecls, thecls);
+  AddSuper(thecls, theobj);
   {
     typedef struct methodDefinition {
       char *methodName;
       Tcl_ObjCmdProc *proc;
     } methodDefinition;
-
-    char *namespace_names[] = {
-      "::xotcl::cmd::Object",
-      "::xotcl::cmd::Class", 
-      "::xotcl::cmd::NonposArgs"
-    };
-
-    methodDefinition definitions1[] = {
+    methodDefinition objInstcmds[] = {
       {"autoname",         XOTclOAutonameMethod},
       {"check",            XOTclOCheckMethod},
       {"cleanup",          XOTclOCleanupMethod},
@@ -11561,7 +11796,6 @@
       {"filterguard",      XOTclOFilterGuardMethod},
       {"filtersearch",     XOTclOFilterSearchMethod},
       {"info",             XOTclOInfoMethod},
-      {"initslots",        XOTclOInitSlotsMethod},
       {"instvar",          XOTclOInstVarMethod},
       {"invar",            XOTclOInvariantsMethod},
       {"isclass",          XOTclOIsClassMethod},
@@ -11586,8 +11820,9 @@
       {"upvar",            XOTclOUpvarMethod},
       {"volatile",         XOTclOVolatileMethod},
       {"vwait",            XOTclOVwaitMethod} 
-    };
-    methodDefinition definitions2[] = {
+    }; 
+    methodDefinition classInstcmds[] = {
+      {"autoname",         XOTclOAutonameMethod},
       {"alloc",            XOTclCAllocMethod},
       {"create",           XOTclCCreateMethod},
       {"new",              XOTclCNewMethod},
@@ -11599,39 +11834,38 @@
       {"instparametercmd", XOTclCInstParameterCmdMethod},
       {"instproc",         XOTclCInstProcMethod},
       {"instforward",      XOTclCInstForwardMethod},
+      {"parameter",        XOTclCParameterMethod},
+      {"parameterclass",   XOTclCParameterClassMethod},
       {"recreate",         XOTclCRecreateMethod},
       {"unknown",          XOTclCUnknownMethod}
     };
-    methodDefinition definitions3[] = {
-      {"required", XOTclCheckRequiredArgs},
-      {"switch",   XOTclCheckBooleanArgs},
-      {"boolean",  XOTclCheckBooleanArgs}
-    };
-    methodDefinition *definitions[] = {definitions1, definitions2, definitions3};
-    int nr_definitions[] = {nr_elements(definitions1), nr_elements(definitions2), nr_elements(definitions3)};
 
     int namespacelength;
     Tcl_DString ds, *dsPtr = &ds;
 
-    Tcl_CreateNamespace(in, "::xotcl::cmd", 0, (Tcl_NamespaceDeleteProc*)NULL);
-
     DSTRING_INIT(dsPtr);
-    for (i=0; i < nr_elements(namespace_names); i++) {
-      int j;
-      Tcl_DStringAppend(dsPtr, namespace_names[i], -1);
-      /*fprintf(stderr,"namespace '%s'\n",namespace_names[i]);*/
-      Tcl_CreateNamespace(in, Tcl_DStringValue(dsPtr), 0, (Tcl_NamespaceDeleteProc*)NULL);
-      Tcl_DStringAppend(dsPtr,"::", 2);
-      namespacelength = Tcl_DStringLength(dsPtr);
-      for (j = 0; j < nr_definitions[i]; j++) {
-	Tcl_DStringAppend(dsPtr, definitions[i][j].methodName, -1);
-        /*fprintf(stderr,"defining '%s'\n", Tcl_DStringValue(dsPtr));*/
-	Tcl_CreateObjCommand(in, Tcl_DStringValue(dsPtr), definitions[i][j].proc, 0, 0);
-	Tcl_DStringSetLength(dsPtr, namespacelength);
-      }
-      Tcl_DStringSetLength(dsPtr, 0);
+    Tcl_DStringAppend(dsPtr,"::xotcl::Object::instcmd", -1);
+    Tcl_CreateNamespace(in, Tcl_DStringValue(dsPtr), 0, (Tcl_NamespaceDeleteProc*)NULL);
+    Tcl_DStringAppend(dsPtr,"::", 2);
+    namespacelength = Tcl_DStringLength(dsPtr);
+
+    for (i = 0; i < nr_elements(objInstcmds); i++) {
+      Tcl_DStringAppend(dsPtr, objInstcmds[i].methodName, -1);
+      Tcl_CreateObjCommand(in, Tcl_DStringValue(dsPtr), objInstcmds[i].proc, 0, 0);
+      Tcl_DStringSetLength(dsPtr, namespacelength);
     }
+    Tcl_DStringSetLength(dsPtr, 0);
+    Tcl_DStringAppend(dsPtr,"::xotcl::Class::instcmd", -1);
+    Tcl_CreateNamespace(in, Tcl_DStringValue(dsPtr), 0, (Tcl_NamespaceDeleteProc*)NULL);
+    Tcl_DStringAppend(dsPtr,"::", 2);
+    namespacelength = Tcl_DStringLength(dsPtr);
 
+    for (i = 0; i < nr_elements(classInstcmds); i++) {
+      Tcl_DStringAppend(dsPtr, classInstcmds[i].methodName, -1);
+      Tcl_CreateObjCommand(in, Tcl_DStringValue(dsPtr), classInstcmds[i].proc, 0, 0);
+      Tcl_DStringSetLength(dsPtr, namespacelength);
+    }
+
     DSTRING_FREE(dsPtr);
   }
 
@@ -11684,6 +11918,37 @@
 #endif
 
   /*
+   * Non-Positional Args Object
+   */
+
+  nonposArgsCl = PrimitiveCCreate(in,
+	  XOTclGlobalStrings[XOTE_NON_POS_ARGS_CL],
+	  thecls);
+  XOTclAddIMethod(in, (XOTcl_Class*) nonposArgsCl,
+		  "required",
+		  (Tcl_ObjCmdProc*) XOTclCheckRequiredArgs, 0, 0);
+  XOTclAddIMethod(in, (XOTcl_Class*) nonposArgsCl,
+		  "switch",
+		  (Tcl_ObjCmdProc*) XOTclCheckBooleanArgs, 0, 0);
+  XOTclAddIMethod(in, (XOTcl_Class*) nonposArgsCl,
+		  "boolean",
+		  (Tcl_ObjCmdProc*) XOTclCheckBooleanArgs, 0, 0);
+  PrimitiveOCreate(in, XOTclGlobalStrings[XOTE_NON_POS_ARGS_OBJ],
+		   nonposArgsCl);
+
+  /*
+   *  Parameter Class
+   */
+  { 
+    XOTclObject *paramObject;
+    paramCl = PrimitiveCCreate(in, XOTclGlobalStrings[XOTE_PARAM_CL], thecls);
+    paramObject =  ¶mCl->object;
+    XOTclAddPMethod(in, (XOTcl_Object*) paramObject,
+		  XOTclGlobalStrings[XOTE_SEARCH_DEFAULTS],
+		  (Tcl_ObjCmdProc*) ParameterSearchDefaultsMethod, 0, 0);
+  }
+
+  /*
    * set runtime version information in Tcl variable
    */
   Tcl_SetVar(in, "::xotcl::version", XOTCLVERSION, TCL_GLOBAL_ONLY);
Index: xotcl/generic/xotclAccessInt.h
===================================================================
diff -u -rab63a4908f87f226de9730e0afa820388c93acc4 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/generic/xotclAccessInt.h	(.../xotclAccessInt.h)	(revision ab63a4908f87f226de9730e0afa820388c93acc4)
+++ xotcl/generic/xotclAccessInt.h	(.../xotclAccessInt.h)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -24,6 +24,8 @@
 #define Tcl_Namespace_activationCount(nsPtr) ((Namespace *)nsPtr)->activationCount
 #define Tcl_Namespace_deleteProc(nsPtr) ((Namespace *)nsPtr)->deleteProc
 
+
+
 #define Tcl_Command_refCount(cmd)      ((Command *)cmd)->refCount
 #define Tcl_Command_cmdEpoch(cmd)      ((Command *)cmd)->cmdEpoch
 /* the following items could be obtained from 
Index: xotcl/generic/xotclInt.h
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/generic/xotclInt.h	(.../xotclInt.h)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/generic/xotclInt.h	(.../xotclInt.h)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,5 +1,5 @@
 /* -*- Mode: c++ -*-
- *  $Id: xotclInt.h,v 1.20 2006/10/04 20:40:23 neumann Exp $
+ *  $Id: xotclInt.h,v 1.21 2007/08/06 11:35:56 neumann Exp $
  *  Extended Object Tcl (XOTcl)
  *
  *  Copyright (C) 1999-2006 Gustaf Neumann, Uwe Zdun
@@ -39,6 +39,10 @@
 /*
  * Makros
  */
+#if defined(PRE85)
+# define TclVarHashTable Tcl_HashTable
+#endif
+
 #ifdef XOTCL_MEM_COUNT
 Tcl_HashTable xotclMemCount; 
 extern int xotclMemCountInterpCounter;
@@ -289,28 +293,36 @@
      MEM_COUNT_CLOSE_FRAME()
 
 #else
-/* slightly slower version based on Tcl_PushCallFrame */
-#define XOTcl_FrameDecls Tcl_CallFrame frame
-#define XOTcl_PushFrame(in,obj) \
+/* slightly slower version based on Tcl_PushCallFrame. 
+   Note that it is possible that between push and pop
+   a obj->nsPtr can be created (e.g. during a read trace)
+*/
+#define XOTcl_FrameDecls Tcl_CallFrame frame; int frame_constructed = 1
+#define XOTcl_PushFrame(interp,obj) \
      if ((obj)->nsPtr) {				     \
-       Tcl_PushCallFrame(in, &frame, (obj)->nsPtr, 0);   \
+       frame_constructed = 0; \
+       Tcl_PushCallFrame(interp, &frame, (obj)->nsPtr, 0);   \
      } else { \
        Tcl_CallFrame *framePtr = &frame;		\
        CallFrame *myframe = (CallFrame *)framePtr;		\
-       Tcl_PushCallFrame(in, &frame, RUNTIME_STATE(in)->fakeNS, 1);	\
-       Tcl_CallFrame_procPtr(myframe) = &RUNTIME_STATE(in)->fakeProc;	\
+       Tcl_PushCallFrame(interp, &frame, RUNTIME_STATE(interp)->fakeNS, 1);	\
+       Tcl_CallFrame_procPtr(myframe) = &RUNTIME_STATE(interp)->fakeProc;	\
        Tcl_CallFrame_varTablePtr(myframe) = (obj)->varTable;	\
      }
-#define XOTcl_PopFrame(in,obj) \
+#define XOTcl_PopFrame(interp,obj) \
      if (!(obj)->nsPtr) {	       \
        Tcl_CallFrame *framePtr = &frame;		\
        CallFrame *myframe = (CallFrame *)framePtr;		\
        if ((obj)->varTable == 0)			    \
          (obj)->varTable = Tcl_CallFrame_varTablePtr(myframe);	\
+     } \
+     if (frame_constructed) { \
+       register Interp *iPtr = (Interp *) interp; \
+       register CallFrame *myframe = iPtr->framePtr; \
        Tcl_CallFrame_varTablePtr(myframe) = 0; \
        Tcl_CallFrame_procPtr(myframe) = 0; \
      } \
-     Tcl_PopCallFrame(in)
+     Tcl_PopCallFrame(interp)
 #endif
 
 
@@ -396,6 +408,7 @@
 typedef struct XOTclCmdList {
   Tcl_Command cmdPtr;
   ClientData clientData;
+  struct XOTclClass *clorobj;
   struct XOTclCmdList* next;
 } XOTclCmdList;
 
@@ -468,7 +481,7 @@
   Tcl_Command id;
   Tcl_Interp *teardown;
   struct XOTclClass *cl;
-  Tcl_HashTable *varTable;
+  TclVarHashTable *varTable;
   Tcl_Namespace *nsPtr;
   XOTclObjectOpt *opt;
   struct XOTclCmdList *filterOrder;
@@ -497,7 +510,7 @@
   struct XOTclClasses* sub;
   short color;
   struct XOTclClasses* order;
-  /*struct XOTclClass* parent;*/
+  struct XOTclClass* parent;
   Tcl_HashTable instances;
   Tcl_Namespace *nsPtr;
   Tcl_Obj* parameters;
@@ -519,13 +532,13 @@
     XOTE_EMPTY, XOTE_UNKNOWN, XOTE_CREATE, XOTE_DESTROY, XOTE_INSTDESTROY,
     XOTE_ALLOC, XOTE_INIT, XOTE_INSTVAR, XOTE_INTERP, XOTE_AUTONAMES,
     XOTE_ZERO, XOTE_ONE, XOTE_MOVE, XOTE_SELF, XOTE_CLASS, XOTE_RECREATE,
-    XOTE_SELF_CLASS, XOTE_SELF_PROC, 
-    XOTE_EXIT_HANDLER, XOTE_DEFAULTSUPERCLASS,
-    XOTE_NON_POS_ARGS_OBJ,
+    XOTE_SELF_CLASS, XOTE_SELF_PROC, XOTE_PARAM_CL,
+    XOTE_SEARCH_DEFAULTS, XOTE_EXIT_HANDLER,
+    XOTE_NON_POS_ARGS_CL, XOTE_NON_POS_ARGS_OBJ,
     XOTE_CLEANUP, XOTE_CONFIGURE, XOTE_FILTER, XOTE_INSTFILTER,
     XOTE_INSTPROC, XOTE_PROC, XOTE_INSTFORWARD, XOTE_FORWARD,
     XOTE_INSTCMD, XOTE_CMD, XOTE_INSTPARAMETERCMD, XOTE_PARAMETERCMD, 
-    XOTE_FORMAT, XOTE_INITSLOTS,
+    XOTE_MKGETTERSETTER, XOTE_FORMAT,
     XOTE_NEWOBJ, XOTE_GUARD_OPTION, XOTE_DEFAULTMETHOD,
     XOTE___UNKNOWN, XOTE_ARGS, XOTE_SPLIT, XOTE_COMMA,
     /** these are the redefined tcl commands; leave them
@@ -539,14 +552,14 @@
   "", "unknown", "create", "destroy", "instdestroy",
   "alloc", "init", "instvar", "interp", "__autonames",
   "0", "1", "move", "self", "class", "recreate",
-  "self class", "self proc", 
-  "__exitHandler", "__default_superclass",
-  "::xotcl::nonposArgs",
+  "self class", "self proc", "::xotcl::Class::Parameter",
+  "searchDefaults", "__exitHandler",
+  "::xotcl::NonposArgs", "::xotcl::nonposArgs",
   "cleanup", "configure", "filter", "instfilter",
   "instproc", "proc", "instforward", "forward",
   "instcmd", "cmd", "instparametercmd", "parametercmd",
-  "format", "initslots",
-  "__#", "-guard", "defaultmethod", 
+  "mkGetterSetter", "format",
+  "__#", "-guard", "defaultmethod",
   "__unknown", "args", "split", ",",
   "expr", "incr", "info", "rename", "subst",
 };
Index: xotcl/generic/xotclShadow.c
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/generic/xotclShadow.c	(.../xotclShadow.c)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/generic/xotclShadow.c	(.../xotclShadow.c)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,5 +1,5 @@
 /* -*- Mode: c++ -*-
- * $Id: xotclShadow.c,v 1.6 2006/10/04 20:40:23 neumann Exp $
+ * $Id: xotclShadow.c,v 1.7 2007/08/06 11:35:56 neumann Exp $
  *  
  *  Extended Object Tcl (XOTcl)
  *
@@ -153,7 +153,9 @@
     rc|= XOTclReplaceCommand(in, XOTE_SUBST,    0, initialized);
 #endif
     /* for the following commands, we have to add our own semantics */
+#if 1
     rc|= XOTclReplaceCommand(in, XOTE_INFO,     XOTcl_InfoObjCmd, initialized);
+#endif
     rc|= XOTclReplaceCommand(in, XOTE_RENAME,   XOTcl_RenameObjCmd, initialized);
     
   } else if (load == SHADOW_REFETCH) {
Index: xotcl/library/actiweb/WebDocument.xotcl
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/actiweb/WebDocument.xotcl	(.../WebDocument.xotcl)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/library/actiweb/WebDocument.xotcl	(.../WebDocument.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# $Id: WebDocument.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $
+# $Id: WebDocument.xotcl,v 1.7 2007/08/06 11:35:56 neumann Exp $
 
 package provide xotcl::actiweb::webDocument 0.8
 
@@ -136,7 +136,7 @@
 
 
     Class GraphicDirectoryObjectifier -superclass FileObjectifier \
-	-parameter {{thumbnaildir /tmp}}
+	-parameter {{thumbnaildir [::xotcl::tmpdir]}}
     GraphicDirectoryObjectifier instproc objectifyTree {place dir {prefix ""}} {
 	if {[file isdirectory $dir]} {
 	    set indexpage ""
Index: xotcl/library/comm/Access.xotcl
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/comm/Access.xotcl	(.../Access.xotcl)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/library/comm/Access.xotcl	(.../Access.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# -*- tcl -*- $Id: Access.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $
+# -*- tcl -*- $Id: Access.xotcl,v 1.7 2007/08/06 11:35:56 neumann Exp $
 
 set httpAccessVersion 0.91
 package provide xotcl::comm::httpAccess $httpAccessVersion
@@ -1027,7 +1027,7 @@
 	my instvar S chunkLength totalsize
 	set length [$S gets lengthString]
 	if {$length > 0} {
-	    set chunkLength [expr {0x$lengthString}]
+	    set chunkLength [expr 0x$lengthString]
 	    #my showVars lengthString chunkLength
 	    if {$chunkLength == 0} {
 		$S event readable [self] readChunkedTrailer
Index: xotcl/library/comm/Httpd.xotcl
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/comm/Httpd.xotcl	(.../Httpd.xotcl)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/library/comm/Httpd.xotcl	(.../Httpd.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# -*- tcl -*- $Id: Httpd.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $
+# -*- tcl -*- $Id: Httpd.xotcl,v 1.7 2007/08/06 11:35:56 neumann Exp $
 #
 # The XOTcl class Httpd implements an HTTP/1.0 and HTTP/1.1 server with  
 # basic functionality.
@@ -45,7 +45,7 @@
   }
 
   proc ! string {
-    set f [open /tmp/log w+]; 
+    set f [open [::xotcl::tmpdir]log w+]; 
     puts $f "[clock format [clock seconds]] $string"
     close $f}
 
Index: xotcl/library/comm/PCache.xotcl
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/comm/PCache.xotcl	(.../PCache.xotcl)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/library/comm/PCache.xotcl	(.../PCache.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# -*- Tcl -*- $Id: PCache.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $
+# -*- Tcl -*- $Id: PCache.xotcl,v 1.7 2007/08/06 11:35:56 neumann Exp $
 # Persistent Cache object, using gdbm
 
 # Configuration:
@@ -10,7 +10,7 @@
 # 2) If "CACHE_DIR" is not set, the global variable "homedir"
 #    is checked, which is assumed to be the home directory
 #    of the Cineast browser
-# 3) As a last resource the /tmp directory is used as the cache directory
+# 3) As a last resource the tmp directory is used as the cache directory
 #
 # Additionally, the cache directory can be specified after loading of this
 # file (before the first open) through the instance variable "dir"
@@ -29,7 +29,7 @@
 
     if {![info exists CACHE_DIR]} {
 	if {![info exists homeDir]} {
-	    set homeDir /tmp
+	    set homeDir [::xotcl::tmpdir]
 	}
 	set CACHE_DIR $homeDir/cache2
     }
Index: xotcl/library/lib/changeXOTclVersion.xotcl
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/lib/changeXOTclVersion.xotcl	(.../changeXOTclVersion.xotcl)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/library/lib/changeXOTclVersion.xotcl	(.../changeXOTclVersion.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -6,7 +6,7 @@
 #
 set XOTCL_MAJOR_VERSION 1
 set XOTCL_MINOR_VERSION 5
-set XOTCL_RELEASE_LEVEL .3
+set XOTCL_RELEASE_LEVEL .4
 
 # example settings: 
 # 1.0
Index: xotcl/library/lib/trace.xotcl
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/lib/trace.xotcl	(.../trace.xotcl)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/library/lib/trace.xotcl	(.../trace.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# -*- Tcl -*- $Id: trace.xotcl,v 1.9 2006/10/04 20:40:23 neumann Exp $
+# -*- Tcl -*- $Id: trace.xotcl,v 1.10 2007/08/06 11:35:56 neumann Exp $
 package provide xotcl::trace 0.91
 package require XOTcl
 
@@ -118,14 +118,12 @@
   Trace proc statReport {} {
     my statReportClass Object
   }
-  Trace proc statCount {key} {
-    puts stderr "[self] [self proc] '$key'"
+  Trace proc statCount key {
     if {[my exists stat($key)]} {
       my incr stat($key)
     } else {
-      my set stat($key) 1
+      my incr set stat($key) 1
     }
-    puts stderr "[self] [self proc] '$key' => [my set stat($key)]"
   }
   Trace proc deprecated-function {name} {
     puts stderr "Function <$name> is deprecated. Use method with same name instead."
@@ -135,11 +133,9 @@
 
   Object instproc traceFilter args {
     # don't trace the Trace object
-    if {[self] eq "::xotcl::trace::Trace"} {return [next]}
-    set method [self calledproc]
-    if {$method eq [self proc]} {return [next]}
+    if {[self] eq "::Trace"} {return [next]}
     set context "[self callingclass]->[self callingproc]"
-
+    set method [self calledproc]
     switch -- $method {
       proc -
       instproc {set dargs [list [lindex $args 0] [lindex $args 1] ...] }
@@ -188,7 +184,7 @@
   Object instproc statFilter args {
     # don't return statistics from the Trace object
     #puts stderr "self=[self]"
-    if {[self] eq "::xotcl::trace::Trace"} {return [next]}
+    if {[self] eq "::Trace"} {return [next]}
     set ccls [self callingclass]
     set cmet [self callingproc]
     set met [self calledproc]
Index: xotcl/library/serialize/Serializer.xotcl
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/serialize/Serializer.xotcl	(.../Serializer.xotcl)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/library/serialize/Serializer.xotcl	(.../Serializer.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,5 +1,5 @@
-# $Id: Serializer.xotcl,v 1.15 2006/09/27 08:12:40 neumann Exp $
-package require XOTcl 1.3
+# $Id: Serializer.xotcl,v 1.16 2007/08/06 11:35:56 neumann Exp $
+package require XOTcl 1.5
 package provide xotcl::serializer 1.0
 
 namespace eval ::xotcl::serializer {
@@ -15,7 +15,7 @@
     authors {
       Gustaf Neumann, Gustaf.Neumann@wu-wien.ac.at
     }
-    date { $Date: 2006/09/27 08:12:40 $ }
+    date { $Date: 2007/08/06 11:35:56 $ }
   }
   
   @ Serializer proc all {
@@ -181,7 +181,23 @@
       return -$list
     }
   }
+  Serializer instproc collect-var-traces o {
+    my instvar traces
+    foreach v [$o info vars] {
+      set t [$o trace info variable $v]
+      if {$t ne ""} {
+	foreach ops $t { 
+	  foreach {op cmd} $ops break
+	  # save traces in post_cmds
+	  my append post_cmds [list $o trace add variable $v $op $cmd] "\n"
+	  # remove trace from object
+	  $o trace remove variable $v $op $cmd
+	}
+      }
+    }
+  }
   Serializer instproc Object-serialize o {
+    my collect-var-traces $o
     append cmd [list [$o info class] create [$o self]]
     # slots needs to be initialized when optimized, since
     # parametercmds are not serialized
@@ -211,7 +227,7 @@
     }
     foreach x {mixin invar} {
       set v [$o info $x]
-      if {$v ne ""} {my append postcmd [list $o $x set $v] "\n"}
+      if {$v ne ""} {my append post_cmds [list $o $x set $v] "\n"}
     }
     set v [$o info filter -guards]
     if {$v ne ""} {append cmd [my pcmd [list filter $v]] " \\\n"}
@@ -239,7 +255,7 @@
     foreach x {instmixin} {
       set v [$o info $x]
       if {$v ne "" && "::xotcl::Object" ne $v } {
-        my append postcmd [list $o $x set $v] "\n"
+        my append post_cmds [list $o $x set $v] "\n"
 	#append cmd " " [my pcmd [list $x $v]] " \\\n"
       }
     }
@@ -350,7 +366,9 @@
     string trimright [my [my category $objectOrClass]-serialize $objectOrClass] "\\\n"
   }
   Serializer instproc serialize-objects {list all} {
-    my set postcmd ""
+    my instvar post_cmds
+    set post_cmds ""
+
     my topoSort $list $all
     #foreach i [lsort [my array names level]] {my warn "$i: [my set level($i)]"}
     set result ""
@@ -366,23 +384,34 @@
       set namespace([namespace qualifiers $e]) 1
     }
 
+    # Handling of variable traces: traces might require a 
+    # different topological sort, which is hard to handle.
+    # Similar as with filters, we deactivate the variable
+    # traces during initialization. This happens by
+    # (1) replacing the XOTcl's trace method by a no-op
+    # (2) collecting variable traces through collect-var-traces
+    # (3) re-activating the traces after variable initialization
+
     set exports ""
-    set nsdefines ""
+    set pre_cmds "::xotcl::Object instproc trace args {}\n"
+
     # delete ::xotcl from the namespace list, if it exists...
     catch {unset namespace(::xotcl)}
     foreach ns [array name namespace] {
       if {![namespace exists $ns]} continue
       if {![my isobject $ns]} {
-	append nsdefines "namespace eval $ns {}\n"
+	append pre_cmds "namespace eval $ns {}\n"
       } elseif {$ns ne [namespace origin $ns] } {
-	append nsdefines "namespace eval $ns {}\n"
+	append pre_cmds "namespace eval $ns {}\n"
       }
       set exp [namespace eval $ns {namespace export}]
       if {$exp ne ""} {
 	append exports "namespace eval $ns {namespace export $exp}" \n
       }
     }
-    return $nsdefines$result[my set postcmd]$exports
+
+    append post_cmds "::xotcl::alias ::xotcl::Object trace -objscope ::trace\n"
+    return $pre_cmds$result$post_cmds$exports
   }
   Serializer instproc deepSerialize o {
     # assumes $o to be fully qualified
Index: xotcl/library/store/XOTclGdbm/Makefile.in
===================================================================
diff -u -r78e82b3563a644f2df47320eacc693f1b788b03c -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/store/XOTclGdbm/Makefile.in	(.../Makefile.in)	(revision 78e82b3563a644f2df47320eacc693f1b788b03c)
+++ xotcl/library/store/XOTclGdbm/Makefile.in	(.../Makefile.in)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -12,7 +12,7 @@
 # See the file "license.terms" for information on usage and redistribution
 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 #
-# RCS: @(#) $Id: Makefile.in,v 1.2 2006/02/18 22:17:33 neumann Exp $
+# RCS: @(#) $Id: Makefile.in,v 1.3 2007/08/06 11:35:56 neumann Exp $
 
 #========================================================================
 # Add additional lines to handle any additional AC_SUBST cases that
@@ -200,10 +200,12 @@
 install-libraries: libraries
 	@mkdir -p $(DESTDIR)$(includedir)
 	@echo "Installing header files in $(DESTDIR)$(includedir)"
-	@for i in $(PKG_HEADERS) ; do \
+	@if test -n "$(PKG_HEADERS)" ; then \
+	  for i in "$(PKG_HEADERS)" ; do \
 	    echo "Installing $(srcdir)/$$i" ; \
 	    $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \
-	done;
+	  done; \
+	fi
 
 #========================================================================
 # Install documentation.  Unix manpages should go in the $(mandir)
Index: xotcl/library/store/XOTclGdbm/configure
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/store/XOTclGdbm/configure	(.../configure)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/library/store/XOTclGdbm/configure	(.../configure)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -6150,7 +6150,7 @@
 # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS
 # and PKG_TCL_SOURCES.
 #-----------------------------------------------------------------------
-if test ! "${with_gdbm}" == no; then
+if test ! "${with_gdbm}" = no; then
         GDBM_INC_DIR="`echo $with_gdbm |cut -f1 -d,`"
         GDBM_LIB_DIR="`echo $with_gdbm |cut -f2 -d, -s`"
 fi
@@ -10778,3 +10778,5 @@
 
 
 
+
+
Index: xotcl/library/store/XOTclGdbm/configure.in
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/store/XOTclGdbm/configure.in	(.../configure.in)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/library/store/XOTclGdbm/configure.in	(.../configure.in)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -3,7 +3,7 @@
 dnl	generate the file "configure", which is run during Tcl installation
 dnl	to configure the system for the local environment.
 #
-# RCS: @(#) $Id: configure.in,v 1.14 2006/10/04 20:40:23 neumann Exp $
+# RCS: @(#) $Id: configure.in,v 1.15 2007/08/06 11:35:56 neumann Exp $
 
 #-----------------------------------------------------------------------
 # Sample configure.in for Tcl Extensions.  The only places you should
@@ -87,7 +87,7 @@
 # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS
 # and PKG_TCL_SOURCES.
 #-----------------------------------------------------------------------
-if test ! "${with_gdbm}" == no; then
+if test ! "${with_gdbm}" = no; then
         GDBM_INC_DIR="`echo $with_gdbm |cut -f1 -d,`"
         GDBM_LIB_DIR="`echo $with_gdbm |cut -f2 -d, -s`"
 fi
@@ -277,3 +277,5 @@
 
 
 
+
+
Index: xotcl/library/store/XOTclSdbm/Makefile
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/store/XOTclSdbm/Makefile	(.../Makefile)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/library/store/XOTclSdbm/Makefile	(.../Makefile)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -12,7 +12,7 @@
 # See the file "license.terms" for information on usage and redistribution
 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 #
-# RCS: @(#) $Id: Makefile,v 1.26 2006/09/27 08:12:40 neumann Exp $
+# RCS: @(#) $Id: Makefile,v 1.27 2007/08/06 11:35:56 neumann Exp $
 
 #========================================================================
 # Add additional lines to handle any additional AC_SUBST cases that
@@ -135,7 +135,7 @@
 TCLSH		= $(TCLSH_ENV) $(TCLSH_PROG)
 SHARED_BUILD	= 1
 
-INCLUDES	=  -I/Users/neumann/src/xotcl-1.5.1/generic -I./generic -I"/Library/Frameworks/Tcl.framework/Headers"
+INCLUDES	=  -I/Users/neumann/src/xotcl-1.5.3/generic -I./generic -I"/Library/Frameworks/Tcl.framework/Headers"
 
 EXTRA_CFLAGS	=  
 
@@ -150,7 +150,7 @@
 CONFIG_CLEAN_FILES = Makefile
 
 CPPFLAGS	= 
-LIBS		=  -L/Users/neumann/src/xotcl-1.5.1 -lxotclstub1.5.1 -L/Users/neumann/src/xotcl-1.5.1 -lxotcl1.5.1 
+LIBS		=  -L/Users/neumann/src/xotcl-1.5.3 -lxotclstub1.5.3 -L/Users/neumann/src/xotcl-1.5.3 -lxotcl1.5.3 
 AR		= ar
 CFLAGS		=  ${CFLAGS_DEFAULT} ${CFLAGS_WARNING} ${SHLIB_CFLAGS}
 COMPILE		= $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
Index: xotcl/library/store/XOTclSdbm/Makefile.in
===================================================================
diff -u -r78e82b3563a644f2df47320eacc693f1b788b03c -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/store/XOTclSdbm/Makefile.in	(.../Makefile.in)	(revision 78e82b3563a644f2df47320eacc693f1b788b03c)
+++ xotcl/library/store/XOTclSdbm/Makefile.in	(.../Makefile.in)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -12,7 +12,7 @@
 # See the file "license.terms" for information on usage and redistribution
 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 #
-# RCS: @(#) $Id: Makefile.in,v 1.2 2006/02/18 22:17:33 neumann Exp $
+# RCS: @(#) $Id: Makefile.in,v 1.3 2007/08/06 11:35:56 neumann Exp $
 
 #========================================================================
 # Add additional lines to handle any additional AC_SUBST cases that
@@ -200,10 +200,12 @@
 install-libraries: libraries
 	@mkdir -p $(DESTDIR)$(includedir)
 	@echo "Installing header files in $(DESTDIR)$(includedir)"
-	@for i in $(PKG_HEADERS) ; do \
+	@if test -n "$(PKG_HEADERS)" ; then \
+	  for i in "$(PKG_HEADERS)" ; do \
 	    echo "Installing $(srcdir)/$$i" ; \
 	    $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \
-	done;
+	  done; \
+	fi
 
 #========================================================================
 # Install documentation.  Unix manpages should go in the $(mandir)
Index: xotcl/library/store/XOTclSdbm/configure
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/store/XOTclSdbm/configure	(.../configure)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/library/store/XOTclSdbm/configure	(.../configure)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -10724,3 +10724,5 @@
 
 
 
+
+
Index: xotcl/library/store/XOTclSdbm/configure.in
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/store/XOTclSdbm/configure.in	(.../configure.in)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/library/store/XOTclSdbm/configure.in	(.../configure.in)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -3,7 +3,7 @@
 dnl	generate the file "configure", which is run during Tcl installation
 dnl	to configure the system for the local environment.
 #
-# RCS: @(#) $Id: configure.in,v 1.14 2006/10/04 20:40:24 neumann Exp $
+# RCS: @(#) $Id: configure.in,v 1.15 2007/08/06 11:35:56 neumann Exp $
 
 #-----------------------------------------------------------------------
 # Sample configure.in for Tcl Extensions.  The only places you should
@@ -236,3 +236,5 @@
 
 
 
+
+
Index: xotcl/library/xml/TclExpat-1.1/Makefile
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/xml/TclExpat-1.1/Makefile	(.../Makefile)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/library/xml/TclExpat-1.1/Makefile	(.../Makefile)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -12,7 +12,7 @@
 # See the file "license.terms" for information on usage and redistribution
 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 #
-# RCS: @(#) $Id: Makefile,v 1.26 2006/09/27 08:12:40 neumann Exp $
+# RCS: @(#) $Id: Makefile,v 1.27 2007/08/06 11:35:56 neumann Exp $
 
 #========================================================================
 # Add additional lines to handle any additional AC_SUBST cases that
@@ -135,7 +135,7 @@
 TCLSH		= $(TCLSH_ENV) $(TCLSH_PROG)
 SHARED_BUILD	= 1
 
-INCLUDES	=  -I/Users/neumann/src/xotcl-1.5.1/generic -I./generic -I"/Library/Frameworks/Tcl.framework/Headers"
+INCLUDES	=  -I/Users/neumann/src/xotcl-1.5.3/generic -I./generic -I"/Library/Frameworks/Tcl.framework/Headers"
 
 EXTRA_CFLAGS	=  
 
@@ -150,7 +150,7 @@
 CONFIG_CLEAN_FILES = Makefile
 
 CPPFLAGS	= 
-LIBS		=  -L/Users/neumann/src/xotcl-1.5.1 -lxotclstub1.5.1 
+LIBS		=  -L/Users/neumann/src/xotcl-1.5.3 -lxotclstub1.5.3 
 AR		= ar
 CFLAGS		=  ${CFLAGS_DEFAULT} ${CFLAGS_WARNING} ${SHLIB_CFLAGS}
 COMPILE		= $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
Index: xotcl/library/xml/TclExpat-1.1/Makefile.in
===================================================================
diff -u -r78e82b3563a644f2df47320eacc693f1b788b03c -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/xml/TclExpat-1.1/Makefile.in	(.../Makefile.in)	(revision 78e82b3563a644f2df47320eacc693f1b788b03c)
+++ xotcl/library/xml/TclExpat-1.1/Makefile.in	(.../Makefile.in)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -12,7 +12,7 @@
 # See the file "license.terms" for information on usage and redistribution
 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 #
-# RCS: @(#) $Id: Makefile.in,v 1.2 2006/02/18 22:17:33 neumann Exp $
+# RCS: @(#) $Id: Makefile.in,v 1.3 2007/08/06 11:35:56 neumann Exp $
 
 #========================================================================
 # Add additional lines to handle any additional AC_SUBST cases that
@@ -200,10 +200,12 @@
 install-libraries: libraries
 	@mkdir -p $(DESTDIR)$(includedir)
 	@echo "Installing header files in $(DESTDIR)$(includedir)"
-	@for i in $(PKG_HEADERS) ; do \
+	@if test -n "$(PKG_HEADERS)" ; then \
+	for i in "$(PKG_HEADERS)" ; do \
 	    echo "Installing $(srcdir)/$$i" ; \
 	    $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \
-	done;
+	done; \
+	fi
 
 #========================================================================
 # Install documentation.  Unix manpages should go in the $(mandir)
Index: xotcl/library/xml/TclExpat-1.1/configure
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/xml/TclExpat-1.1/configure	(.../configure)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/library/xml/TclExpat-1.1/configure	(.../configure)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -6148,7 +6148,43 @@
 # and PKG_TCL_SOURCES.
 #-----------------------------------------------------------------------
 
+if test "${TEA_PLATFORM}" = "windows" ; then
 
+    vars="xmltok.c win32filemap.c xmlrole.c xmlwf.c codepage.c xmlparse.c hashtable.c tclexpat.c"
+    for i in $vars; do
+	case $i in
+	    \$*)
+		# allow $-var names
+		PKG_SOURCES="$PKG_SOURCES $i"
+		PKG_OBJECTS="$PKG_OBJECTS $i"
+		;;
+	    *)
+		# check for existence - allows for generic/win/unix VPATH
+		if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
+		    -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
+		    ; then
+		    { { echo "$as_me:$LINENO: error: could not find source file '$i'" >&5
+echo "$as_me: error: could not find source file '$i'" >&2;}
+   { (exit 1); exit 1; }; }
+		fi
+		PKG_SOURCES="$PKG_SOURCES $i"
+		# this assumes it is in a VPATH dir
+		i=`basename $i`
+		# handle user calling this before or after TEA_SETUP_COMPILER
+		if test x"${OBJEXT}" != x ; then
+		    j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
+		else
+		    j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
+		fi
+		PKG_OBJECTS="$PKG_OBJECTS $j"
+		;;
+	esac
+    done
+
+
+
+else
+
     vars="xmltok.c unixfilemap.c xmlrole.c xmlwf.c codepage.c xmlparse.c hashtable.c tclexpat.c"
     for i in $vars; do
 	case $i in
@@ -6182,7 +6218,9 @@
 
 
 
+fi
 
+
     vars=""
     for i in $vars; do
 	# check for existence, be strict because it is installed
@@ -10724,3 +10762,5 @@
 
 
 
+
+
Index: xotcl/library/xml/TclExpat-1.1/configure.in
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/library/xml/TclExpat-1.1/configure.in	(.../configure.in)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/library/xml/TclExpat-1.1/configure.in	(.../configure.in)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -3,7 +3,7 @@
 dnl	generate the file "configure", which is run during Tcl installation
 dnl	to configure the system for the local environment.
 #
-# RCS: @(#) $Id: configure.in,v 1.14 2006/10/04 20:40:24 neumann Exp $
+# RCS: @(#) $Id: configure.in,v 1.15 2007/08/06 11:35:56 neumann Exp $
 
 #-----------------------------------------------------------------------
 # Sample configure.in for Tcl Extensions.  The only places you should
@@ -90,7 +90,12 @@
 # and PKG_TCL_SOURCES.
 #-----------------------------------------------------------------------
 
-TEA_ADD_SOURCES([xmltok.c unixfilemap.c xmlrole.c xmlwf.c codepage.c xmlparse.c hashtable.c tclexpat.c])
+if test "${TEA_PLATFORM}" = "windows" ; then
+    TEA_ADD_SOURCES([xmltok.c win32filemap.c xmlrole.c xmlwf.c codepage.c xmlparse.c hashtable.c tclexpat.c])
+else
+    TEA_ADD_SOURCES([xmltok.c unixfilemap.c xmlrole.c xmlwf.c codepage.c xmlparse.c hashtable.c tclexpat.c])
+fi
+
 TEA_ADD_HEADERS([])
 TEA_ADD_INCLUDES([-I${with_xotcl}/generic ${XOTCL_BUILD_INCLUDE_SPEC}])
 TEA_ADD_LIBS([$XOTCL_BUILD_STUB_LIB_SPEC])
@@ -236,3 +241,5 @@
 
 
 
+
+
Index: xotcl/tests/forwardtest.xotcl
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/tests/forwardtest.xotcl	(.../forwardtest.xotcl)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/tests/forwardtest.xotcl	(.../forwardtest.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# $Id: forwardtest.xotcl,v 1.9 2006/10/04 20:40:24 neumann Exp $
+# $Id: forwardtest.xotcl,v 1.10 2007/08/06 11:35:56 neumann Exp $
 package require XOTcl
 namespace import -force xotcl::*
 package require xotcl::test
Index: xotcl/tests/slottest.xotcl
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/tests/slottest.xotcl	(.../slottest.xotcl)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/tests/slottest.xotcl	(.../slottest.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# $Id: slottest.xotcl,v 1.2 2006/10/04 20:40:24 neumann Exp $
+# $Id: slottest.xotcl,v 1.3 2007/08/06 11:35:56 neumann Exp $
 package require XOTcl
 namespace import -force xotcl::*
 package require xotcl::test
@@ -424,12 +424,12 @@
 
 set ::hu 0
 Class C -slots {
-  Attribute x -initcmd {incr ::hu; set _ 101}
+  Attribute x -initcmd {incr ::hu; set x 101}
 }
 C c1
 ? {c1 info vars} ""
 ? {c1 set x} 101
-? {c1 info vars} x
+? {c1 info vars} "x"
 ? {set ::hu 1} 1
 
 
Index: xotcl/tests/speedtest.xotcl
===================================================================
diff -u -r1aa7246cc8e44078c9dbd33e03992478615f314f -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/tests/speedtest.xotcl	(.../speedtest.xotcl)	(revision 1aa7246cc8e44078c9dbd33e03992478615f314f)
+++ xotcl/tests/speedtest.xotcl	(.../speedtest.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,5 +1,5 @@
 #memory trace on
-# $Id: speedtest.xotcl,v 1.7 2006/09/27 08:12:40 neumann Exp $
+# $Id: speedtest.xotcl,v 1.8 2007/08/06 11:35:56 neumann Exp $
 package require XOTcl
 namespace import -force xotcl::*
 lappend auto_path [file dirname [info script]]/..
@@ -394,7 +394,11 @@
       Class C -instmixin N; C create o} \
     -cmd {o x self} -expected ::n::x -count $cnt \
     -post {o destroy}
-    
+Test new -msg {return -code break} \
+    -pre {Class A -instproc br {} {return -code break}; A create a1} \
+    -cmd {catch {a1 br}} -expected 3 -count 2 \
+    -post {A destroy; a1 destroy}
+     
 
 Test run; exit
 
Index: xotcl/tests/testo.xotcl
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/tests/testo.xotcl	(.../testo.xotcl)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/tests/testo.xotcl	(.../testo.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-# $Id: testo.xotcl,v 1.6 2006/10/04 20:40:24 neumann Exp $
+# $Id: testo.xotcl,v 1.7 2007/08/06 11:35:56 neumann Exp $
 # 
 # Copyright 1993 Massachusetts Institute of Technology
 #
@@ -173,12 +173,16 @@
 
 classcreate proc factorgraph {{n 3600}} {
   TestClass $n
+
+
   for {set i [expr {$n/2}]} {$i>1} {incr i -1} {
     if {($n % $i) == 0} then {
       
       #
       # factors become subclasses, direct or indirect
       #
+
+
       if {[TestClass info instances $i] eq ""} then {
 	my factorgraph $i
 	$i superclass $n
@@ -240,7 +244,6 @@
     #
     
     $i anumber
-
     set obj [lrange [anumber combineforobj] 1 end]
     set h [$i info heritage]
     my meshes $obj $h
@@ -443,12 +446,11 @@
     #
     # set up some variables
     #
-    
     $obj set scalar 0
     $obj set array() {}
-    ${obj} unset array()
+    $obj unset array()
     $obj set unset.$n {}
-    
+
     #
     # mess with them recursively
     #
@@ -466,8 +468,7 @@
 	my recurse $n
       }
     }
-    
-    
+
     $obj recurse $n
 
     #
@@ -477,15 +478,15 @@
     if {[$obj set scalar] != $n} then {
       error "FAILED [self] - scalar"
     }
+
     $obj unset scalar
 
     for {set i $n} {$i > 0} {incr i -1} {
       if {[$obj set array($i)] != $i} then {
 	error "FAILED [self] - array"
       }
-    }    
+    }
     $obj unset array
-
     if {[$obj info vars "unset.0"] eq ""} then {
       error "FAILED [self] - unset: [$obj info vars]"
     }
@@ -494,7 +495,6 @@
   #
   # trace variables
   #
-
   Variables avar2
 
   avar2 proc trace {var ops} {
Index: xotcl/tests/testx.xotcl
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/tests/testx.xotcl	(.../testx.xotcl)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/tests/testx.xotcl	(.../testx.xotcl)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-#$Id: testx.xotcl,v 1.31 2006/10/04 20:40:24 neumann Exp $
+#$Id: testx.xotcl,v 1.32 2007/08/06 11:35:56 neumann Exp $
 package require XOTcl
 namespace import -force xotcl::*
 
@@ -368,7 +368,7 @@
     SC($i) destroy
   }
 
-  ::errorCheck $::filterCount 1080 \
+  ::errorCheck $::filterCount 960 \
     "Filter Test  - Filter Count -- Got: $::filterCount"
   
   #
@@ -521,7 +521,7 @@
       F instproc testf {} {}
       ::errorCheck [f1 set r 45] "45" "Deleting a filter proc ... after"
 
-      # testing deleting a superclass
+      # testing remove a superclass
       Class F1
       Class F2 -superclass F1
       Class F3 -superclass F2
@@ -534,9 +534,10 @@
       ::errorCheck [f2 filtersearch testf2] "::F2 instproc testf2-filtered-filtered" "filtersearch 2"
 
       ::errorCheck [f2 set r 45] "45-filtered-filtered" \
-	  "Deleting a superclass ... before"
+	  "Removing a superclass ... before"
       F3 superclass [F1 info superclass]
-      ::errorCheck [f2 set r 45] "45" "Deleting a superclass ... after"
+      ::errorCheck [f2 filtersearch testf2] "" "filtersearch 2 after"
+      ::errorCheck [f2 set r 45] "45" "Class F2 removed from classtree ... after"
     }
     B destroy
     for {set i 0} {$i < $n} {incr i} {A($i) destroy}
@@ -588,15 +589,15 @@
       b destroy
       set filterResult ""
       B b
-      ::errorCheck $filterResult "-::b-f1-::A-initslots-::b-f1-::A-configure-::b-f1-::A-init" \
+      ::errorCheck $filterResult "-::b-f1-::A-configure-::b-f1-::A-init" \
 	"Filter guard: two different filters, same name + different class, one guarded, one not"
 
       # two filter w/o guard -> both have to be applied
       B instfilter f1
       b destroy
       set filterResult ""
       B b
-      ::errorCheck $filterResult "-::b-f1-::B-initslots-::b-f1-::A-initslots-::b-f1-::B-configure-::b-f1-::A-configure-::b-f1-::B-init-::b-f1-::A-init" \
+      ::errorCheck $filterResult "-::b-f1-::B-configure-::b-f1-::A-configure-::b-f1-::B-init-::b-f1-::A-init" \
 	"Filter guard: two different filters, both not guarded anymore"
 
       # three filters with guards, not to be applied, in one chain
@@ -615,10 +616,10 @@
 
       B b2
       if {$i == 0} {
-	::errorCheck $filterResult "-::b2-f2-::A-initslots-::b2-f2-::A-configure-::b2-f2-::A-init" \
+	::errorCheck $filterResult "-::b2-f2-::A-configure-::b2-f2-::A-init" \
 	  "Filter guard: creation with less restrictive guards"
       } else {
-	::errorCheck $filterResult "-::b2-f2-::A-cleanup-::b2-f2-::A-initslots-::b2-f2-::A-configure-::b2-f2-::A-init" \
+	::errorCheck $filterResult "-::b2-f2-::A-cleanup-::b2-f2-::A-configure-::b2-f2-::A-init" \
 	  "Filter guard: creation with less restrictive guards (b)"
       }
       set filterResult ""
@@ -709,8 +710,7 @@
 	lappend ::r [f baz] [f set r 1]
 	f filterguard myFilter {}
 	lappend ::r [f baz] [f set r 1]
-	::errorCheck $::r [list myFilter->initslots \
-                               myFilter->configure myFilter->init \
+	::errorCheck $::r [list myFilter->configure myFilter->init \
 			       myFilter->set myFilter->filter \
 			       myFilter->filterguard myFilter->baz \
 			       hello 1 myFilter->baz \
@@ -1013,7 +1013,7 @@
 	TransferDialog$i destroy
     }
 
-    ::errorCheck  $::filterCount 240 \
+    ::errorCheck  $::filterCount 220 \
 	"Simple Observer - Filter Count" 
 }
 
@@ -1143,11 +1143,11 @@
 
       if {$i == 0} {
 	::errorCheck "$FInfo" \
-	    "{callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc initslots} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r {}} {callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc configure} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 0} {callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc init} {callingclass ::C1 filterreg {::C0 instfilter infoFilter} callingobject ::c1 callingproc init calledproc set} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 1} {callingclass ::C1 filterreg {::C0 instfilter infoFilter} callingobject ::c1 callingproc init calledproc set} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 22} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r {}}" \
+	    "{callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc configure} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 0} {callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc init} {callingclass ::C1 filterreg {::C0 instfilter infoFilter} callingobject ::c1 callingproc init calledproc set} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 1} {callingclass ::C1 filterreg {::C0 instfilter infoFilter} callingobject ::c1 callingproc init calledproc set} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 22} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r {}}" \
 	    "Wrong filtering of instproc creation C/C1"
       } else {
 	::errorCheck "$FInfo" \
-	    "{callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc cleanup} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r {}} {callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc initslots} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r {}} {callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc configure} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 0} {callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc init} {callingclass ::C1 filterreg {::C0 instfilter infoFilter} callingobject ::c1 callingproc init calledproc set} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 1} {callingclass ::C1 filterreg {::C0 instfilter infoFilter} callingobject ::c1 callingproc init calledproc set} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 22} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r {}}" \
+	    "{callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc cleanup} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r {}} {callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc configure} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 0} {callingclass {} filterreg {::C0 instfilter infoFilter} callingobject ::filterInfo callingproc run calledproc init} {callingclass ::C1 filterreg {::C0 instfilter infoFilter} callingobject ::c1 callingproc init calledproc set} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 1} {callingclass ::C1 filterreg {::C0 instfilter infoFilter} callingobject ::c1 callingproc init calledproc set} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r 22} {self ::c1 proc infoFilter class ::C0 infoclass ::C1 r {}}" \
 	"Wrong filtering of instproc creation C/C1 (b)"
       }
 
@@ -1234,11 +1234,11 @@
       set r [anObject aProc]
       if {$i > 0} {
 	::errorCheck $InfoTraceResult \
-	    "{-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-cleanup aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-initslots aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {0-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-configure aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-init aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::aClass-infoTraceFilter-::xotcl::Object ::xotcl::Class-recreate aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::aClass-infoTraceFilter-::xotcl::Object ::xotcl::Class-create aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::anObject-infoTraceFilter-::xotcl::Object ::ObjectsClass-aProc run-::filterInfo {-::xotcl::Object instfilter infoTraceFilter}}" \
+	    "{-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-cleanup aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {-::xotcl::Class::Parameter-infoTraceFilter-::xotcl::Object ::xotcl::Class-searchDefaults aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {0-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-configure aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-init aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::aClass-infoTraceFilter-::xotcl::Object ::xotcl::Class-recreate aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::aClass-infoTraceFilter-::xotcl::Object ::xotcl::Class-create aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::anObject-infoTraceFilter-::xotcl::Object ::ObjectsClass-aProc run-::filterInfo {-::xotcl::Object instfilter infoTraceFilter}}" \
 	"FilterInfo InfoTrace: Filter information wrong (b)"
       } else {
 	::errorCheck $InfoTraceResult \
-	    "{::anotherObject-::aClass-infoTraceFilter-::xotcl::Object ::xotcl::Class-alloc aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-initslots aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {0-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-configure aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-init aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::aClass-infoTraceFilter-::xotcl::Object ::xotcl::Class-create aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::anObject-infoTraceFilter-::xotcl::Object ::ObjectsClass-aProc run-::filterInfo {-::xotcl::Object instfilter infoTraceFilter}}" \
+	    "{::anotherObject-::aClass-infoTraceFilter-::xotcl::Object ::xotcl::Class-alloc aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {-::xotcl::Class::Parameter-infoTraceFilter-::xotcl::Object ::xotcl::Class-searchDefaults aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {0-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-configure aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {-::anotherObject-infoTraceFilter-::xotcl::Object ::aClass-init aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::aClass-infoTraceFilter-::xotcl::Object ::xotcl::Class-create aProc-::anObject {::ObjectsClass-::xotcl::Object instfilter infoTraceFilter}} {::anotherObject-::anObject-infoTraceFilter-::xotcl::Object ::ObjectsClass-aProc run-::filterInfo {-::xotcl::Object instfilter infoTraceFilter}}" \
 	  "FilterInfo InfoTrace: Filter information wrong"
       }
     }
@@ -1425,9 +1425,13 @@
 	::errorCheck $dashResultEnd \
 	    "::a ::a ::a ::a ::a " \
 	    "Init Dash Test fails -- result"
+
+         Class Foo -parameter {{match -exact}}
+         Foo ff
+       	 ::errorCheck [ff match] "-exact" "default with dash"
     }
 
-    # paramter/defaults test
+    # parameter/defaults test
 
     proc ::cmd {a b} {
 	return in-cmd-${a}-${b}
@@ -2642,7 +2646,7 @@
   Recreated recreateObj
   recreateObj destroy
   errorCheck [set ::recreateFilterResult] \
-    " ::recreateObj+::xotcl::Object->initslots ::recreateObj+::xotcl::Object->configure ::recreateObj+::xotcl::Object->init ::recreateObj+::xotcl::Object->cleanup ::recreateObj+::xotcl::Object->initslots ::recreateObj+::xotcl::Object->configure ::recreateObj+::xotcl::Object->init ::recreateObj+::xotcl::Object->destroy" \
+    " ::recreateObj+::xotcl::Object->configure ::recreateObj+::xotcl::Object->init ::recreateObj+::xotcl::Object->cleanup ::recreateObj+::xotcl::Object->configure ::recreateObj+::xotcl::Object->init ::recreateObj+::xotcl::Object->destroy" \
     "recreateObj - recreateFilterResult"
    if {$i == 0} {
      errorCheck [set ::recreateMixinResult] \
@@ -2828,11 +2832,11 @@
     ::errorCheck [b info procs] objproc "info procs"
     ::errorCheck [B info instprocs] myProc2 "info instprocs"
 
-    ::errorCheck [lsort [b info methods]] "__next abstract append array autoname check class cleanup configure contains copy defaultmethod destroy eval exists extractConfigureArg f filter filterguard filtersearch forward hasclass incr info infoTraceFilter init initslots instvar invar isclass ismetaclass ismixin isobject istype lappend method mixin mixinguard move myProc myProc2 myProcMix1 myProcMix2 noinit objproc parametercmd proc procsearch requireNamespace self set setFilter signature subst trace unset uplevel upvar volatile vwait"  "b info methods"
+    ::errorCheck [lsort [b info methods]] "__next abstract append array autoname check class cleanup configure contains copy defaultmethod destroy eval exists extractConfigureArg f filter filterguard filtersearch forward hasclass incr info infoTraceFilter init instvar invar isclass ismetaclass ismixin isobject istype lappend method mixin mixinguard move myProc myProc2 myProcMix1 myProcMix2 noinit objproc parametercmd proc procsearch requireNamespace self set setFilter signature subst trace unset uplevel upvar volatile vwait"  "b info methods"
 
     ::errorCheck [lsort [b info methods -nocmds]] "abstract contains copy defaultmethod extractConfigureArg f hasclass infoTraceFilter init method move myProc myProc2 myProcMix1 myProcMix2 objproc self setFilter signature" "b info methods -nocmds"
 
-    ::errorCheck [lsort [b info methods -noprocs]] "__next append array autoname check class cleanup configure destroy eval exists filter filterguard filtersearch forward incr info initslots instvar invar isclass ismetaclass ismixin isobject istype lappend mixin mixinguard noinit parametercmd proc procsearch requireNamespace set subst trace unset uplevel upvar volatile vwait" "b info methods -noprocs"
+    ::errorCheck [lsort [b info methods -noprocs]] "__next append array autoname check class cleanup configure destroy eval exists filter filterguard filtersearch forward incr info instvar invar isclass ismetaclass ismixin isobject istype lappend mixin mixinguard noinit parametercmd proc procsearch requireNamespace set subst trace unset uplevel upvar volatile vwait" "b info methods -noprocs"
     ::errorCheck [lsort [b info methods -nocmds -nomixins]] "abstract contains copy defaultmethod extractConfigureArg f hasclass infoTraceFilter init method move myProc myProc2 objproc self setFilter signature" "b info methods -nocmds -nomixins"
 
     ::errorCheck [b info methods -nocmds -noprocs] "" "b info methods -nocmds -noprocs"
@@ -3051,6 +3055,7 @@
   }
 
 
+
   ::errorCheck [lsort [UnknownClass info info]] {args body children class classchildren classparent commands default filter filterguard forward heritage info instances instbody instcommands instdefault instfilter instfilterguard instforward instinvar instmixin instpost instpre instprocs invar methods mixin parameter parent post pre precedence procs subclass superclass vars} "info info"
 
   ::errorCheck [Class info instances *Unk*] ::UnknownClass "match in info instances"
@@ -3153,9 +3158,9 @@
 
   set ::context payrollApp
 
-  ::errorCheck [lsort [jim info methods]] "__next abstract age append array autoname check class cleanup configure contains copy defaultmethod destroy driving-license eval exists extractConfigureArg filter filterguard filtersearch forward hasclass id incr info init initslots instvar invar isclass ismetaclass ismixin isobject istype lappend method mixin mixinguard move name noinit parametercmd print proc procsearch requireNamespace salary self set signature subst trace unset uplevel upvar volatile vwait" "condmixin all methods"
+  ::errorCheck [lsort [jim info methods]] "__next abstract age append array autoname check class cleanup configure contains copy defaultmethod destroy driving-license eval exists extractConfigureArg filter filterguard filtersearch forward hasclass id incr info init instvar invar isclass ismetaclass ismixin isobject istype lappend method mixin mixinguard move name noinit parametercmd print proc procsearch requireNamespace salary self set signature subst trace unset uplevel upvar volatile vwait" "condmixin all methods"
 
-  ::errorCheck "[lsort [jim info methods -incontext]]" "__next abstract age append array autoname check class cleanup configure contains copy defaultmethod destroy eval exists extractConfigureArg filter filterguard filtersearch forward hasclass id incr info init initslots instvar invar isclass ismetaclass ismixin isobject istype lappend method mixin mixinguard move name noinit parametercmd print proc procsearch requireNamespace salary self set signature subst trace unset uplevel upvar volatile vwait" "all methods in context"
+  ::errorCheck "[lsort [jim info methods -incontext]]" "__next abstract age append array autoname check class cleanup configure contains copy defaultmethod destroy eval exists extractConfigureArg filter filterguard filtersearch forward hasclass id incr info init instvar invar isclass ismetaclass ismixin isobject istype lappend method mixin mixinguard move name noinit parametercmd print proc procsearch requireNamespace salary self set signature subst trace unset uplevel upvar volatile vwait" "all methods in context"
 
   ::errorCheck [my show payrollApp jim] "{payrollApp:  jim info methods salary => salary} {payrollApp:  jim info methods -incontext salary => salary} {payrollApp:  jim info methods driv* => driving-license} {payrollApp:  jim info methods -incontext driv* => }" "payrollApp jim"
   ::errorCheck [my show shipmentApp jim] "{shipmentApp:  jim info methods salary => salary} {shipmentApp:  jim info methods -incontext salary => } {shipmentApp:  jim info methods driv* => driving-license} {shipmentApp:  jim info methods -incontext driv* => driving-license}" "shipmentApp jim"
@@ -3868,15 +3873,13 @@
 # toplevel tests #################################################
 Class instmixin {}
 C instmixin {}
-
 set o [C new -volatile];errorCheck [Object isobject $o] 1 "topLevel, check object 1 - $o"
 Class instmixin ::xotcl::_creator
 set o [C new -volatile];errorCheck [Object isobject $o] 1 "topLevel, check object 2 - $o"
 C instmixin ::xotcl::I
 set o [C new -volatile];errorCheck [Object isobject $o] 1 "topLevel, check object 3 - $o"
 foreach i [C info instances] {$i destroy}
 
-
 proc x {} {
   Class instmixin {}
   C instmixin {}
Index: xotcl/unix/pkgIndex.unix
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/unix/pkgIndex.unix	(.../pkgIndex.unix)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/unix/pkgIndex.unix	(.../pkgIndex.unix)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,4 +1,4 @@
-  package ifneeded XOTcl 1.5.3 [list load \
-    [file join $dir libxotcl1.5.3.dylib] XOTcl]
+  package ifneeded XOTcl 1.5.4 [list load \
+    [file join $dir libxotcl1.5.4.dylib] XOTcl]
 
 
Index: xotcl/unix/xotcl.spec
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/unix/xotcl.spec	(.../xotcl.spec)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/unix/xotcl.spec	(.../xotcl.spec)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -1,10 +1,10 @@
 Summary: Object Oriented Extension for Tcl
 Name: xotcl
-Version: 1.5.3
+Version: 1.5.4
 Release: 0
 License: bsd style open source
 Group: Development/Languages
-Source:  http://www.xotcl.org/xotcl-1.5.3.tar.gz
+Source:  http://www.xotcl.org/xotcl-1.5.4.tar.gz
 URL: http://www.xotcl.org
 Packager: Gustaf.Neumann@wu-wien.ac.at
 Distribution: Fedorea Core 3
@@ -23,28 +23,28 @@
 consult http://www.xotcl.org
 
 %prep
-%setup -q -n xotcl-1.5.3
+%setup -q -n xotcl-1.5.4
 
 
 %build
 autoconf
-./configure --with-tcl=/usr/lib --with-all --prefix=/usr/local --exec-prefix=/usr/local
+./configure --with-tcl=/usr/lib --with-all --prefix=/usr/local/aolserver45 --exec-prefix=/usr/local/aolserver45
 #make CFLAGS_DEFAULT='-O3 -mcpu=i686 -Wall -fomit-frame-pointer'
 make CFLAGS_DEFAULT='-O3 -Wall -fomit-frame-pointer'
 
 %install
 rm -rf $RPM_BUILD_ROOT
 make DESTDIR=$RPM_BUILD_ROOT install
-rm -f $RPM_BUILD_ROOT/usr/lib/libxotcl1.5.3.so
-ln -s xotcl1.5.3/libxotcl1.5.3.so $RPM_BUILD_ROOT/usr/lib
+rm -f $RPM_BUILD_ROOT/usr/lib/libxotcl1.5.4.so
+ln -s xotcl1.5.4/libxotcl1.5.4.so $RPM_BUILD_ROOT/usr/lib
 
 %files
 %defattr(-, root, root)
 %doc doc
 %_bindir/xotclsh
 %_bindir/xowish
-%_prefix/lib/xotcl1.5.3
-%_prefix/lib/libxotcl1.5.3.so
+%_prefix/lib/xotcl1.5.4
+%_prefix/lib/libxotcl1.5.4.so
 %_prefix/lib/xotclexpat*
 %_prefix/lib/xotclgdbm*
 %_prefix/lib/xotclsdbm*
Index: xotcl/xotclConfig.sh
===================================================================
diff -u -r20e421dc641dc39b53106b1296ac7e09d0b206f2 -r99a7a21854051cd691029b15ef8877aa9e86cf44
--- xotcl/xotclConfig.sh	(.../xotclConfig.sh)	(revision 20e421dc641dc39b53106b1296ac7e09d0b206f2)
+++ xotcl/xotclConfig.sh	(.../xotclConfig.sh)	(revision 99a7a21854051cd691029b15ef8877aa9e86cf44)
@@ -15,7 +15,7 @@
 XOTCL_VERSION='1.5'
 XOTCL_MAJOR_VERSION='1'
 XOTCL_MINOR_VERSION='5'
-XOTCL_RELEASE_LEVEL='.3'
+XOTCL_RELEASE_LEVEL='.4'
 
 # String to pass to compiles to pick up includes during build
 # (i.e., assuming nothing has been installed)
@@ -24,34 +24,34 @@
 
 # String to pass to compiles to pick up the XOTcl includes from their
 # installed directory.
-XOTCL_INCLUDE_DIR="/usr/local/include/xotcl1.5.3"
+XOTCL_INCLUDE_DIR="/usr/local/aolserver45/include/xotcl1.5.4"
 XOTCL_INCLUDE_SPEC="-I$XOTCL_INCLUDE_DIR"
 
 # The name of the XOTcl library (may be either a .a file or a shared library):
-XOTCL_LIB_FILE=libxotcl1.5.3.dylib
+XOTCL_LIB_FILE=libxotcl1.5.4.dylib
 
 # String to pass to linker to pick up the XOTcl library from its
 # build directory.
-XOTCL_BUILD_LIB_SPEC='-L/Users/neumann/src/xotcl-1.5.3 -lxotcl1.5.3'
+XOTCL_BUILD_LIB_SPEC='-L/Users/neumann/src/xotcl-1.5.4 -lxotcl1.5.4'
 
 # String to pass to linker to pick up the XOTcl library from its
 # installed directory.
-XOTCL_LIB_SPEC='-L/usr/local/lib/xotcl1.5.3 -lxotcl1.5.3'
+XOTCL_LIB_SPEC='-L/usr/local/aolserver45/lib/xotcl1.5.4 -lxotcl1.5.4'
 
 # The name of the XOTcl stub library (a .a file):
-# XOTCL_STUB_LIB_FILE=libxotclstub1.5.3.a
+# XOTCL_STUB_LIB_FILE=libxotclstub1.5.4.a
 
 # String to pass to linker to pick up the XOTcl stub library from its
 # build directory.
-XOTCL_BUILD_STUB_LIB_SPEC='-L/Users/neumann/src/xotcl-1.5.3 -lxotclstub1.5.3'
+XOTCL_BUILD_STUB_LIB_SPEC='-L/Users/neumann/src/xotcl-1.5.4 -lxotclstub1.5.4'
 
 # String to pass to linker to pick up the XOTcl stub library from its
 # installed directory.
-XOTCL_STUB_LIB_SPEC='-L/usr/local/lib/xotcl1.5.3 -lxotclstub1.5.3'
+XOTCL_STUB_LIB_SPEC='-L/usr/local/aolserver45/lib/xotcl1.5.4 -lxotclstub1.5.4'
 
 # Name of the xotcl stub library with full path in build and install directory
-XOTCL_BUILD_STUB_LIB_PATH='/Users/neumann/src/xotcl-1.5.3/libxotclstub1.5.3.a'
-XOTCL_STUB_LIB_PATH='/usr/local/lib/xotcl1.5.3/libxotclstub1.5.3.a'
+XOTCL_BUILD_STUB_LIB_PATH='/Users/neumann/src/xotcl-1.5.4/libxotclstub1.5.4.a'
+XOTCL_STUB_LIB_PATH='/usr/local/aolserver45/lib/xotcl1.5.4/libxotclstub1.5.4.a'
 
 # Location of the top-level source directories from which XOTcl
 # was built.  This is the directory that contains generic, unix, etc.
@@ -61,9 +61,9 @@
 XOTCL_SRC_DIR='.'
 
 # shared and unshared library suffix
-XOTCL_SHARED_LIB_SUFFIX=1.5.3.dylib
-XOTCL_UNSHARED_LIB_SUFFIX=1.5.3.a
+XOTCL_SHARED_LIB_SUFFIX=1.5.4.dylib
+XOTCL_UNSHARED_LIB_SUFFIX=1.5.4.a
 
 # the shell in whose installation dirs the xotcl package is installed
-XOTCL_COMPATIBLE_TCLSH=/Users/neumann/src/tcl8.4.12/unix/tclsh
+XOTCL_COMPATIBLE_TCLSH=/usr/local/aolserver45/bin/tclsh8.4