From bb8abf62d3cb783b6b8ffeffb67c5ff519332c20 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 14 Jul 2015 23:59:23 +0000 Subject: gc.h: evaluate the macro argument only once * gc.h (RUBY_MARK_UNLESS_NULL): evaluate the argument only once to get rid of inadvertent side effects. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- gc.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'gc.h') diff --git a/gc.h b/gc.h index 19c712b44d..d1021df444 100644 --- a/gc.h +++ b/gc.h @@ -57,7 +57,10 @@ rb_gc_debug_body(const char *mode, const char *msg, int st, void *ptr) #define RUBY_GC_INFO if(0)printf #endif -#define RUBY_MARK_UNLESS_NULL(ptr) if(RTEST(ptr)){rb_gc_mark(ptr);} +#define RUBY_MARK_UNLESS_NULL(ptr) do { \ + VALUE markobj = (ptr); \ + if (RTEST(markobj)) {rb_gc_mark(markobj);} \ +} while (0) #define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;} #if STACK_GROW_DIRECTION > 0 -- cgit v1.2.3