File: bug-14384.c

package info (click to toggle)
ruby3.3 3.3.8-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,620 kB
  • sloc: ruby: 1,244,308; ansic: 836,474; yacc: 28,074; pascal: 6,748; sh: 3,913; python: 1,719; cpp: 1,158; makefile: 742; asm: 712; javascript: 394; lisp: 97; perl: 62; awk: 36; sed: 23; xml: 4
file content (39 lines) | stat: -rw-r--r-- 801 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <ruby/ruby.h>
#include <ruby/debug.h>

#ifndef MAYBE_UNUSED
# define MAYBE_UNUSED(x) x
#endif

static NOINLINE(VALUE f(VALUE));
static NOINLINE(void g(VALUE, void*));
extern NOINLINE(void Init_bug_14384(void));

void
Init_bug_14834(void)
{
    VALUE q = rb_define_module("Bug");
    rb_define_module_function(q, "bug_14834", f, 0);
}

VALUE
f(VALUE q)
{
    int   w[] = { 0, 1024 };
    VALUE e   = rb_tracepoint_new(Qnil, RUBY_INTERNAL_EVENT_NEWOBJ, g, w);

    rb_tracepoint_enable(e);
    return rb_ensure(rb_yield, q, rb_tracepoint_disable, e);
}

void
g(MAYBE_UNUSED(VALUE q), void* w)
{
    const int *e = (const int *)w;
    const int  r = *e++;
    const int  t = *e++;
    VALUE     *y = ALLOCA_N(VALUE, t);
    int       *u = ALLOCA_N(int, t);

    rb_profile_frames(r, t, y, u);
}