Index: modules/struct/pool.tcl ================================================================== --- modules/struct/pool.tcl +++ modules/struct/pool.tcl @@ -56,15 +56,29 @@ namespace export pool } # A small helper routine to generate structured errors -proc ::struct::pool::Error {error args} { - variable Errors - return -code error -level 1 \ - -errorcode [list STRUCT POOL $error {*}$args] \ - [format $Errors($error) {*}$args] + +if {[package vsatisfies [package present Tcl] 8.5]} { + # Tcl 8.5+, have expansion operator and syntax. And option -level. + proc ::struct::pool::Error {error args} { + variable Errors + return -code error -level 1 \ + -errorcode [list STRUCT POOL $error {*}$args] \ + [format $Errors($error) {*}$args] + } +} else { + # Tcl 8.4. No expansion operator available. Nor -level. + # Construct the pieces explicitly, via linsert/eval hop&dance. + proc ::struct::pool::Error {error args} { + variable Errors + lappend code STRUCT POOL $error + eval [linsert $args 0 lappend code] + set msg [eval [linsert $args 0 format $Errors($error)]] + return -code error -errorcode $code $msg + } } # A small helper routine to check list membership proc ::struct::pool::lmember {list element} { if { [lsearch -exact $list $element] >= 0 } { @@ -71,11 +85,10 @@ return 1 } else { return 0 } } - # General note # ============ # # All procedures below use the following method to reference