aboutsummaryrefslogtreecommitdiff
path: root/ps
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-23 21:59:50 -0500
committerJoel Martin <github@martintribe.org>2014-04-23 21:59:50 -0500
commit6301e0b6374cecc5599665be14d6ddc6a31ce1e8 (patch)
treedbf1dc2ff6c682fd87c72a7907e7f6e59c8d4c03 /ps
parent89bd4de1e2704c1bc562788b2c5e4fc08b71a538 (diff)
downloadmal-6301e0b6374cecc5599665be14d6ddc6a31ce1e8.tar.gz
mal-6301e0b6374cecc5599665be14d6ddc6a31ce1e8.zip
All: TCO let* and quasiquote.
Diffstat (limited to 'ps')
-rw-r--r--ps/step5_tco.ps4
-rw-r--r--ps/step6_file.ps4
-rw-r--r--ps/step7_quote.ps8
-rw-r--r--ps/step8_macros.ps8
-rw-r--r--ps/step9_interop.ps8
-rw-r--r--ps/stepA_more.ps8
6 files changed, 30 insertions, 10 deletions
diff --git a/ps/step5_tco.ps b/ps/step5_tco.ps
index c1698d6..83fd43b 100644
--- a/ps/step5_tco.ps
+++ b/ps/step5_tco.ps
@@ -65,7 +65,9 @@ end } def
env_set
pop % discard the return value
} for
- a2 let_env EVAL
+ a2
+ let_env
+ /loop? true def % loop
}{ /do a0 eq { %if do
ast _count 2 gt { %if ast has more than 2 elements
ast 1 ast _count 2 sub _slice env eval_ast pop
diff --git a/ps/step6_file.ps b/ps/step6_file.ps
index 00598be..7d1c876 100644
--- a/ps/step6_file.ps
+++ b/ps/step6_file.ps
@@ -65,7 +65,9 @@ end } def
env_set
pop % discard the return value
} for
- a2 let_env EVAL
+ a2
+ let_env
+ /loop? true def % loop
}{ /do a0 eq { %if do
ast _count 2 gt { %if ast has more than 2 elements
ast 1 ast _count 2 sub _slice env eval_ast pop
diff --git a/ps/step7_quote.ps b/ps/step7_quote.ps
index 10c8089..d7340fd 100644
--- a/ps/step7_quote.ps
+++ b/ps/step7_quote.ps
@@ -93,11 +93,15 @@ end } def
env_set
pop % discard the return value
} for
- a2 let_env EVAL
+ a2
+ let_env
+ /loop? true def % loop
}{ /quote a0 eq { %if quote
ast 1 _nth
}{ /quasiquote a0 eq { %if quasiquote
- ast 1 _nth quasiquote env EVAL
+ ast 1 _nth quasiquote
+ env
+ /loop? true def % loop
}{ /do a0 eq { %if do
ast _count 2 gt { %if ast has more than 2 elements
ast 1 ast _count 2 sub _slice env eval_ast pop
diff --git a/ps/step8_macros.ps b/ps/step8_macros.ps
index 74cf50f..3bf304c 100644
--- a/ps/step8_macros.ps
+++ b/ps/step8_macros.ps
@@ -126,11 +126,15 @@ end } def
env_set
pop % discard the return value
} for
- a2 let_env EVAL
+ a2
+ let_env
+ /loop? true def % loop
}{ /quote a0 eq { %if quote
ast 1 _nth
}{ /quasiquote a0 eq { %if quasiquote
- ast 1 _nth quasiquote env EVAL
+ ast 1 _nth quasiquote
+ env
+ /loop? true def % loop
}{ /defmacro! a0 eq { %if defmacro!
/a1 ast 1 _nth def
/a2 ast 2 _nth def
diff --git a/ps/step9_interop.ps b/ps/step9_interop.ps
index 4f324d5..de3d2af 100644
--- a/ps/step9_interop.ps
+++ b/ps/step9_interop.ps
@@ -126,11 +126,15 @@ end } def
env_set
pop % discard the return value
} for
- a2 let_env EVAL
+ a2
+ let_env
+ /loop? true def % loop
}{ /quote a0 eq { %if quote
ast 1 _nth
}{ /quasiquote a0 eq { %if quasiquote
- ast 1 _nth quasiquote env EVAL
+ ast 1 _nth quasiquote
+ env
+ /loop? true def % loop
}{ /defmacro! a0 eq { %if defmacro!
/a1 ast 1 _nth def
/a2 ast 2 _nth def
diff --git a/ps/stepA_more.ps b/ps/stepA_more.ps
index 744a092..76d0a86 100644
--- a/ps/stepA_more.ps
+++ b/ps/stepA_more.ps
@@ -126,11 +126,15 @@ end } def
env_set
pop % discard the return value
} for
- a2 let_env EVAL
+ a2
+ let_env
+ /loop? true def % loop
}{ /quote a0 eq { %if quote
ast 1 _nth
}{ /quasiquote a0 eq { %if quasiquote
- ast 1 _nth quasiquote env EVAL
+ ast 1 _nth quasiquote
+ env
+ /loop? true def % loop
}{ /defmacro! a0 eq { %if defmacro!
/a1 ast 1 _nth def
/a2 ast 2 _nth def