diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2014-03-07 00:03:48 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2014-03-07 00:03:48 -0800 |
commit | 82a698d3339cfd92912d02484e1d67e792212ecf (patch) | |
tree | 785e85c5e71536ab19929f4043205c593857db66 /lib.c | |
parent | e729bd054e479bae074ed46df06f0c169db2fcc7 (diff) | |
download | txr-82a698d3339cfd92912d02484e1d67e792212ecf.tar.gz txr-82a698d3339cfd92912d02484e1d67e792212ecf.tar.bz2 txr-82a698d3339cfd92912d02484e1d67e792212ecf.zip |
* lib.c (upop): New function.
* lib.h (upop): Declared.
* txr.c (txr_main): Two bugfixes. One is that the argument -
was being pushed back twice resulting in *args* being ("-" "-").
This is because the option processing loop checked for "-" and pushed
it back into args, and then some logic after the loop pushed arg back
into args again. But, these pushes were wrong because they push
back a different cons cell; we would like to be able to
do (ldiff *full-args* *args*). This is solved by upop, which provides
one element of undo. After upop, we can restore the prior list
from the undo save location.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -426,6 +426,12 @@ val pop(val *plist) return ret; } +val upop(val *plist, val *pundo) +{ + *pundo = *plist; + return pop(plist); +} + val push(val value, val *plist) { /* Unsafe for mutating object fields: use mpush macro. */ |