1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-30 05:40:58 +01:00

38783: zcalc tweaks for RPN mode.

Make it more straightforward to exchange variables with stack.
This commit is contained in:
Peter Stephenson 2016-07-04 12:08:14 +01:00
parent a73ae70e82
commit a7d5d239e6
3 changed files with 35 additions and 12 deletions

View file

@ -94,7 +94,7 @@
# sequentially just as if read automatically.
emulate -L zsh
setopt extendedglob
setopt extendedglob typesetsilent
zcalc_show_value() {
if [[ -n $_base ]]; then
@ -301,7 +301,7 @@ while (( _expression_mode )) ||
;;
((:|)local([[:blank:]]##*|))
eval $_line
eval ${_line##:}
_line=
continue
;;
@ -333,7 +333,11 @@ while (( _expression_mode )) ||
_push=1
_matched=1
case $_line in
(\=|pop|\<[[:IDENT:]]#)
(\<[[:IDENT:]]##)
ans=${(P)${_line##\<}}
;;
(\=|pop|\>[[:IDENT:]]#)
if (( ${#stack} < 1 )); then
print -r -- "${_line}: not enough values on stack" >&2
_line=
@ -343,12 +347,18 @@ while (( _expression_mode )) ||
(=)
ans=${stack[1]}
;;
(pop|\<)
(pop|\>)
_push=0
shift stack
;;
(\<[[:IDENT:]]##)
(( ${_line##\<} = ${stack[1]} ))
(\>[[:IDENT:]]##)
if [[ ${_line##\>} = (_*|stack|ans|PI|E) ]]; then
print "${_line##\>}: reserved variable" >&2
_line=
continue
fi
local ${_line##\>}
(( ${_line##\>} = ${stack[1]} ))
_push=0
shift stack
;;
@ -371,14 +381,14 @@ while (( _expression_mode )) ||
shift 2 stack
;;
(ldexp|jn|yn|scalb|xy)
(ldexp|jn|yn|scalb|xy|\<\>)
# Functions with two arguments
if (( ${#stack} < 2 )); then
print -r -- "${_line}: not enough values on stack" >&2
_line=
continue
fi
if [[ $_line = xy ]]; then
if [[ $_line = (xy|\<\>) ]]; then
_tmp=${stack[1]}
stack[1]=${stack[2]}
stack[2]=$_tmp