From a4c9f5bd436dae1d99845f50da55bae733129f56 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Mon, 4 Aug 2008 16:20:18 +0200 Subject: Add fixnum-aware macros LRETAIN, LRELEASE, LDESTROY, LAUTORELEASE, LASSIGN_COPY, and LASSIGN. --- util.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'util.h') diff --git a/util.h b/util.h index 91cd92c..fbde2b2 100644 --- a/util.h +++ b/util.h @@ -19,6 +19,39 @@ } +// Read this as “Lisp ASSIGN” etc.. +#define LASSIGN(VAR, VALUE) \ + ({ LRELEASE (VAR); VAR = VALUE; LRETAIN (VAR); }) + +#define LASSIGN_COPY(VAR, VALUE) \ + ({ \ + id ___object = VALUE; \ + LRELEASE (VAR); \ + if (MLKInstanceP (___object)) \ + { \ + VAR = [___object copy]; \ + RETAIN (VAR); \ + } \ + else \ + VAR = ___object; \ + }) + +#define LAUTORELEASE(VALUE) \ + ({ id __object = VALUE; \ + MLKInstanceP (__object) ? (id)AUTORELEASE(__object) : (id)__object; }) + +#define LDESTROY(VAR) \ + ({ LRELEASE (VAR); VAR = nil; }) + +#define LRELEASE(VALUE) \ + ({ id __object = VALUE; \ + if (__object) RELEASE(__object); }) + +#define LRETAIN(VALUE) \ + ({ id __object = VALUE; \ + MLKInstanceP (__object) ? (id)RETAIN(__object) : (id)__object; }) + + static id nullify (id value) __attribute__ ((pure, unused)); static id denullify (id value) __attribute__ ((pure, unused)); static id stringify (id value) __attribute__ ((pure, unused)); -- cgit v1.2.3