##
## Compiler2 - Stack
##
## (C) IPN - Ingenieurbuero fuer Praezisionsnumerik
##
## Dipl.-Ing. Andreas Otto
## Ulmenstrasse 3
## D-34289 Zierenberg
## mailto:aotto@t-online.de
## http://tclcompiler.sourceforge.net
##
## Alle Rechte vorbehalten
##
package require StdLib
PkgProvide StackLib
##
## ---------------------------------------------------
## List Functions
##
namespace eval ::Stack {
}
proc ::Stack::Push { stack Val } {
upvar $stack Stack
lappend Stack $Val
}
proc ::Stack::Pop { stack } {
upvar $stack Stack
set RET [ lindex $Stack end ]
set Stack [ lrange $Stack 0 end-1 ]
return $RET
}
proc ::Stack::Last { stack } {
upvar $stack Stack
return [ lindex $Stack end ]
}
proc ::Stack::LPush { stack Val } {
upvar __$stack LStack $stack Stack
Push LStack $Stack
set Stack $Val
}
proc ::Stack::LPop { stack } {
upvar __$stack LStack $stack Stack
set Stack [ Pop LStack ]
}
proc ::Stack::Reverse { stack } {
upvar $stack Stack
set RET {}
set End [ expr { [ llength $Stack ] - 1 } ]
for {} { $End > -1 } { incr End -1 } {
lappend RET [ lindex $Stack $End ]
}
return $RET
}