summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-03-07 00:03:48 -0800
committerKaz Kylheku <kaz@kylheku.com>2014-03-07 00:03:48 -0800
commit82a698d3339cfd92912d02484e1d67e792212ecf (patch)
tree785e85c5e71536ab19929f4043205c593857db66 /lib.c
parente729bd054e479bae074ed46df06f0c169db2fcc7 (diff)
downloadtxr-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.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 4365c4b8..2b5bd031 100644
--- a/lib.c
+++ b/lib.c
@@ -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. */