aboutsummaryrefslogtreecommitdiffstats
path: root/examples/lisp
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2024-07-16 14:46:27 -0400
committerGravatar Peter McGoron 2024-07-16 14:46:27 -0400
commitf440716bf9564f0cbb0c72f73a23df5e447171db (patch)
tree6d33176cba6e1ebd8fec59dca3688a3338be1652 /examples/lisp
parentuns_lisp: change cps-list transformation to make it respect scope (diff)
uns_lisp: swap
Diffstat (limited to 'examples/lisp')
-rw-r--r--examples/lisp/uns_lisp.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/examples/lisp/uns_lisp.c b/examples/lisp/uns_lisp.c
index f6760a9..d58b0c9 100644
--- a/examples/lisp/uns_lisp.c
+++ b/examples/lisp/uns_lisp.c
@@ -1035,6 +1035,7 @@ enum cps_return {
CPS_EXEC_INVALID_APPL_LIST,
CPS_APP_UNDERFLOW,
CPS_FCALL_IMPROPER_LIST,
+ CPS_SWAP_UNDERFLOW,
CPS_RETURN_LEN
};
@@ -1071,6 +1072,7 @@ static const char *cps_return_to_string[CPS_RETURN_LEN] = {
"CPS_EXEC_INVALID_APPL_LIST",
"CPS_APP_UNDERFLOW",
"CPS_FCALL_IMPROPER_LIST",
+ "CPS_SWAP_UNDERFLOW"
};
/* {K (quote QUOTED)} {cps} = {(-> (quote QUOTED) K)} */
@@ -1738,6 +1740,49 @@ end:
return r;
}
+static enum cps_return cps_swap(struct uns_ctr *prevstack,
+ int places,
+ struct uns_ctr *readstack
+ )
+{
+ struct uns_ctr top = {0};
+ struct uns_ctr tmp = {0};
+ struct uns_ctr tmpstack = {0};
+ enum cps_return r = CPS_CONTINUE;
+ int i;
+
+ uns_root_add(gc, &top);
+ uns_root_add(gc, &tmp);
+ uns_root_add(gc, &tmpstack);
+
+ if (!stack_pop(prevstack, &top)) {
+ r = CPS_SWAP_UNDERFLOW;
+ goto end;
+ }
+
+ tmpstack.p = empty_list.p;
+ for (i = 0; i < places; i++) {
+ if (!stack_pop(prevstack, &tmp)) {
+ r = CPS_SWAP_UNDERFLOW;
+ goto end;
+ }
+ stack_push(&tmpstack, &tmp);
+ }
+
+ tmp.p = tmpstack.p;
+ stack_push(prevstack, &top);
+ for (i = 0; i < places; i++) {
+ stack_pop(&tmpstack, &tmp);
+ stack_push(prevstack, &tmp);
+ }
+
+end:
+ uns_root_remove(gc, &top);
+ uns_root_remove(gc, &tmp);
+ uns_root_remove(gc, &tmpstack);
+ return r;
+}
+
static enum cps_return cps(struct uns_ctr *prevstack,
struct uns_ctr *readstack)
{
@@ -1762,6 +1807,8 @@ static enum cps_return cps(struct uns_ctr *prevstack,
r = cps_exec(prevstack, readstack);
} else if (strcmp(cmd, "cps-list") == 0) {
r = cps_list(prevstack, readstack);
+ } else if (strcmp(cmd, "swap2") == 0) {
+ r = cps_swap(prevstack, 2, readstack);
} else {
r = CPS_INVALID_CMD;
}
9e986dae5522f2a&follow=1'>Generate and install the pdf in the Debian package.Gravatar bencollins 3-3/+4 2003-07-13Don't run configure at the end of autogen.sh. Also, remove autom4te.cache.Gravatar bencollins 1-1/+1 2003-07-13Update Debian maintainerGravatar bencollins 1-1/+2 2003-07-13Update Debian changelog.Gravatar bencollins 1-0/+8 2003-07-13File doesn't really seem needed. The NEWS file gives a good overview, andGravatar bencollins 1-4/+0 2003-07-13Fix compiler warnings.Gravatar bencollins 4-12/+22 2003-07-13Updates from 0.10.0 release.Gravatar bencollins 4-5/+14 2003-04-23add libtoolize to bootstrapGravatar ddennedy 1-1/+10 2003-04-21added Dan Maas' rawiso docsGravatar ddennedy 1-32/+295 2003-04-07new_handle_on_port() error path fix from Jim RadfordGravatar dmaas 1-1/+3 2003-03-26add raw1394_new_handle_on_port() convenience functionGravatar dmaas 2-1/+41 2003-02-22Updates for new rawiso ioctl interface.Gravatar bencollins 3-37/+125 2003-01-15add iso_xmit_sync() and iso_xmit_write(); clean up iso handling a bitGravatar dmaas 5-39/+161 2003-01-15implement tag matching for rawiso receptionGravatar dmaas 3-4/+12 2003-01-06back out previous commit - don't drop the legacy API just yetGravatar dmaas 6-173/+130 2003-01-05emulate legacy ISO reception API on top of new rawiso APIGravatar dmaas 7-131/+174 2002-12-24update iso API for multi-channel reception and new packet buffer layoutGravatar dmaas 4-123/+236 2002-12-20oops, irq_interval needs to be signedGravatar anonymous 1-1/+1 2002-12-20dmaas - renamed exported arm definitions into the raw1394_ namespace; brought...Gravatar anonymous 3-124/+48 2002-12-16rawiso updates:Gravatar dmaas 3-18/+25 2002-11-18fix cplusplus extern C blockGravatar ddennedy 1-4/+4 2002-11-18merged rawiso branchGravatar ddennedy 7-6/+488