From fb25833690a4e75bf3eb1d8afa65a2334d7282b1 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 5 Aug 2015 17:25:35 +0000 Subject: node.c: NODE_ALLOCA for ALLOCV * node.c (rb_alloc_tmp_buffer): use NODE_ALLOCA to mark locations like as builtin alloca. [ruby-core:70251] [Bug #11418] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- node.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'node.c') diff --git a/node.c b/node.c index 79f65ec684..7551a811c8 100644 --- a/node.c +++ b/node.c @@ -1075,3 +1075,27 @@ rb_gc_mark_node(NODE *obj) } return 0; } + +void * +rb_alloc_tmp_buffer(volatile VALUE *store, long len) +{ + NODE *s = rb_node_newnode(NODE_ALLOCA, 0, 0, 0); + void *ptr = xmalloc(len); + s->u1.node = ptr; + s->u3.cnt = len / sizeof(VALUE); + *store = (VALUE)s; + return ptr; +} + +void +rb_free_tmp_buffer(volatile VALUE *store) +{ + VALUE s = *store; + *store = 0; + if (s) { + void *ptr = RNODE(s)->u1.node; + RNODE(s)->u1.node = 0; + RNODE(s)->u3.cnt = 0; + xfree(ptr); + } +} -- cgit v1.2.3