From 0b35e9e5ddb329dac027d72851db015a738852d7 Mon Sep 17 00:00:00 2001 From: shugo Date: Wed, 14 Mar 2012 10:29:25 +0000 Subject: * enumerator.c (lazy_take): add Enumerable::Lazy#take. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35018 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- node.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'node.h') diff --git a/node.h b/node.h index f9571c7c08..16343c78c3 100644 --- a/node.h +++ b/node.h @@ -451,6 +451,14 @@ typedef struct RNode { #define NEW_ATTRASGN(r,m,a) NEW_NODE(NODE_ATTRASGN,r,m,a) #define NEW_PRELUDE(p,b) NEW_NODE(NODE_PRELUDE,p,b,0) #define NEW_OPTBLOCK(a) NEW_NODE(NODE_OPTBLOCK,a,0,0) +#define NEW_MEMO(a,b,c) NEW_NODE(NODE_MEMO,a,b,c) + +#define roomof(x, y) ((sizeof(x) + sizeof(y) - 1) / sizeof(y)) +#define MEMO_FOR(type, value) ((type *)RARRAY_PTR(value)) +#define NEW_MEMO_FOR(type, value) \ + (rb_ary_set_len(((value) = rb_ary_tmp_new(roomof(type, VALUE))), \ + roomof(type, VALUE)), \ + MEMO_FOR(type, value)) #if defined __GNUC__ && __GNUC__ >= 4 #pragma GCC visibility push(default) -- cgit v1.2.3