From 461c0f29cf0fb70a9890e8eb61e1c1707eac182d Mon Sep 17 00:00:00 2001 From: Bernd Jendrissek Date: Mon, 28 Jan 2008 01:37:27 +0000 Subject: [PATCH] lisp_pair(), lisp_opaque(): Further simplify code. --- lisp/lisp.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/lisp/lisp.c b/lisp/lisp.c index b4016c5..8a96dc7 100644 --- a/lisp/lisp.c +++ b/lisp/lisp.c @@ -151,6 +151,25 @@ union value_pointer lisp_cons(union value_pointer left, union value_pointer righ return retval; } +union value_pointer lisp_pair(struct pair *p) +{ + union value_pointer retval; + + retval.vp_pair = p; + pointer_mark(&retval, 3); + + return retval; +} + +union value_pointer lisp_opaque(char const *cookie) +{ + union value_pointer retval; + + retval.vp_opaque = cookie; + + return retval; +} + struct binding *binding_new(struct environment *env, char const *name, union value_pointer value) @@ -188,8 +207,7 @@ void binding_builtin(struct environment *env, type_dot_value = pair_new(); type_dot_value->car.vp_opaque = opaque_type; type_dot_value->cdr.vp_builtin = builtin; - v.vp_pair = type_dot_value; - pointer_mark(&v, 3); + v = lisp_pair(type_dot_value); binding_new(env, name, v); } @@ -263,8 +281,7 @@ size_t parse_forms(char const *buf, size_t len, union value_pointer *form) char const c = buf[i]; union value_pointer u, v; - v.vp_pair = NULL; - pointer_mark(&v, 3); + v = lisp_pair(NULL); switch (c) { case '(': @@ -548,10 +565,7 @@ union value_pointer builtin_lambda(struct environment *env, { union value_pointer retval; - retval.vp_pair = pair_new(); - retval.vp_pair->car.vp_opaque = opaque_user_function; - retval.vp_pair->cdr.vp_pair = rest; - pointer_mark(&retval.vp_pair->cdr, 3); + retval = lisp_cons(lisp_opaque(opaque_user_function), lisp_pair(rest)); pointer_mark(&retval, 3); return retval; -- 2.11.4.GIT