From 3c6e957edadd896e15c32c5f7765913c8ad4d63c Mon Sep 17 00:00:00 2001 From: Teddy Date: Thu, 15 Aug 2013 08:30:12 +0800 Subject: tail-recursion opt in user-def call --- model.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'model.h') diff --git a/model.h b/model.h index 8d272f8..964d68b 100644 --- a/model.h +++ b/model.h @@ -21,16 +21,25 @@ const int CLS_CONTAINER = 1 << 20; #define TO_PAIR(ptr) \ (static_cast(ptr)) -#define EXIT_CURRENT_CONT(lenvt, cont) \ +#define EXIT_CURRENT_ENVT(lenvt) \ do { \ gc.expose(lenvt); \ lenvt = cont->envt; \ gc.attach(lenvt); \ + } while (0) +#define EXIT_CURRENT_CONT(cont) \ + do { \ gc.expose(cont); \ cont = cont->prev_cont; \ gc.attach(cont); \ } while (0) +#define EXIT_CURRENT_EXEC(lenvt, cont) \ + do { \ + EXIT_CURRENT_ENVT(lenvt); \ + EXIT_CURRENT_CONT(cont); \ + } while (0) + /** @class FrameObj * Objects that can be held in the evaluation stack */ -- cgit v1.2.3