diff --git a/bin/pre.slime b/bin/pre.slime index 7ac5e01..664a33a 100644 --- a/bin/pre.slime +++ b/bin/pre.slime @@ -17,6 +17,8 @@ (define (force promise) (promise)) +(define-syntax (mac a) (list + 1 1)) + (define-syntax (when condition . body) :doc "Special form for when multiple actions should be done if a condition is true. diff --git a/bin/slime.rdbg b/bin/slime.rdbg index 2e9e6c8..30b5991 100644 Binary files a/bin/slime.rdbg and b/bin/slime.rdbg differ diff --git a/src/eval.cpp b/src/eval.cpp index fe453ec..c3e888b 100644 --- a/src/eval.cpp +++ b/src/eval.cpp @@ -687,6 +687,7 @@ namespace Slime { case Action::Pop: return "Pop"; case Action::If: return "If"; } + return "??"; }()); } printf("\nams:\n "); @@ -696,6 +697,13 @@ namespace Slime { pause(); }; + proc push_pc_on_cs = [&] { + for_lisp_list (pcs.data[pcs.next_index-1]) { + cs.append(it); + } + pcs.data[pcs.next_index-1] = Memory::nil; + }; + proc handle_if = [&] { /* | | | | | | -> | | @@ -831,7 +839,8 @@ namespace Slime { else if (pc == Memory::_begin) try handle_begin(); else if (pc == Memory::_define) try handle_define(); else { - // push_pc_on_cs(); + push_pc_on_cs(); + nas.append(Action::Step); } } else { nas.append(Action::Step); @@ -839,7 +848,9 @@ namespace Slime { } break; case Lisp_Object_Type::Function: { if (pc->value.function->type == Function_Type::Macro) { - // push_pc_on_cs(); + push_pc_on_cs(); + nas.append(Action::Eval); + nas.append(Action::Step); } else { nas.append(Action::Step); }