process.c: intern IDs

* process.c (Init_process): intern IDs at initialization.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-11-24 03:44:24 +00:00
parent ec81f9c4cd
commit a6755b6e5f

159
process.c
View File

@ -255,6 +255,31 @@ typedef unsigned long unsigned_clock_t;
typedef unsigned LONG_LONG unsigned_clock_t; typedef unsigned LONG_LONG unsigned_clock_t;
#endif #endif
static ID id_in, id_out, id_err, id_pid, id_uid, id_gid;
static ID id_close, id_child, id_status;
#ifdef HAVE_SETPGID
static ID id_pgroup;
#endif
#ifdef _WIN32
static ID id_new_pgroup;
#endif
static ID id_unsetenv_others, id_chdir, id_umask, id_close_others, id_ENV;
static ID id_nanosecond, id_microsecond, id_millisecond, id_second;
static ID id_float_microsecond, id_float_millisecond, id_float_second;
static ID id_GETTIMEOFDAY_BASED_CLOCK_REALTIME, id_TIME_BASED_CLOCK_REALTIME;
#ifdef HAVE_TIMES
static ID id_TIMES_BASED_CLOCK_MONOTONIC;
static ID id_TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID;
#endif
#ifdef RUSAGE_SELF
static ID id_GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID;
#endif
static ID id_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID;
#ifdef __APPLE__
static ID id_MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC;
#endif
static ID id_hertz;
/* /*
* call-seq: * call-seq:
* Process.pid -> fixnum * Process.pid -> fixnum
@ -340,8 +365,8 @@ rb_last_status_set(int status, rb_pid_t pid)
{ {
rb_thread_t *th = GET_THREAD(); rb_thread_t *th = GET_THREAD();
th->last_status = rb_obj_alloc(rb_cProcessStatus); th->last_status = rb_obj_alloc(rb_cProcessStatus);
rb_iv_set(th->last_status, "status", INT2FIX(status)); rb_ivar_set(th->last_status, id_status, INT2FIX(status));
rb_iv_set(th->last_status, "pid", PIDT2NUM(pid)); rb_ivar_set(th->last_status, id_pid, PIDT2NUM(pid));
} }
void void
@ -366,7 +391,7 @@ rb_last_status_clear(void)
static VALUE static VALUE
pst_to_i(VALUE st) pst_to_i(VALUE st)
{ {
return rb_iv_get(st, "status"); return rb_ivar_get(st, id_status);
} }
#define PST2INT(st) NUM2INT(pst_to_i(st)) #define PST2INT(st) NUM2INT(pst_to_i(st))
@ -385,7 +410,7 @@ pst_to_i(VALUE st)
static VALUE static VALUE
pst_pid(VALUE st) pst_pid(VALUE st)
{ {
return rb_attr_get(st, rb_intern("pid")); return rb_attr_get(st, id_pid);
} }
static void static void
@ -1011,18 +1036,10 @@ proc_waitall(void)
static VALUE rb_cWaiter; static VALUE rb_cWaiter;
static inline ID
id_pid(void)
{
ID pid;
CONST_ID(pid, "pid");
return pid;
}
static VALUE static VALUE
detach_process_pid(VALUE thread) detach_process_pid(VALUE thread)
{ {
return rb_thread_local_aref(thread, id_pid()); return rb_thread_local_aref(thread, id_pid);
} }
static VALUE static VALUE
@ -1041,7 +1058,7 @@ VALUE
rb_detach_process(rb_pid_t pid) rb_detach_process(rb_pid_t pid)
{ {
VALUE watcher = rb_thread_create(detach_process_watcher, (void*)(VALUE)pid); VALUE watcher = rb_thread_create(detach_process_watcher, (void*)(VALUE)pid);
rb_thread_local_aset(watcher, id_pid(), PIDT2NUM(pid)); rb_thread_local_aset(watcher, id_pid, PIDT2NUM(pid));
RBASIC_SET_CLASS(watcher, rb_cWaiter); RBASIC_SET_CLASS(watcher, rb_cWaiter);
return watcher; return watcher;
} }
@ -1473,11 +1490,11 @@ check_exec_redirect_fd(VALUE v, int iskey)
} }
else if (SYMBOL_P(v)) { else if (SYMBOL_P(v)) {
ID id = SYM2ID(v); ID id = SYM2ID(v);
if (id == rb_intern("in")) if (id == id_in)
fd = 0; fd = 0;
else if (id == rb_intern("out")) else if (id == id_out)
fd = 1; fd = 1;
else if (id == rb_intern("err")) else if (id == id_err)
fd = 2; fd = 2;
else else
goto wrong; goto wrong;
@ -1537,19 +1554,19 @@ check_exec_redirect(VALUE key, VALUE val, struct rb_execarg *eargp)
switch (TYPE(val)) { switch (TYPE(val)) {
case T_SYMBOL: case T_SYMBOL:
id = SYM2ID(val); id = SYM2ID(val);
if (id == rb_intern("close")) { if (id == id_close) {
param = Qnil; param = Qnil;
eargp->fd_close = check_exec_redirect1(eargp->fd_close, key, param); eargp->fd_close = check_exec_redirect1(eargp->fd_close, key, param);
} }
else if (id == rb_intern("in")) { else if (id == id_in) {
param = INT2FIX(0); param = INT2FIX(0);
eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param); eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param);
} }
else if (id == rb_intern("out")) { else if (id == id_out) {
param = INT2FIX(1); param = INT2FIX(1);
eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param); eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param);
} }
else if (id == rb_intern("err")) { else if (id == id_err) {
param = INT2FIX(2); param = INT2FIX(2);
eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param); eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param);
} }
@ -1571,7 +1588,7 @@ check_exec_redirect(VALUE key, VALUE val, struct rb_execarg *eargp)
case T_ARRAY: case T_ARRAY:
path = rb_ary_entry(val, 0); path = rb_ary_entry(val, 0);
if (RARRAY_LEN(val) == 2 && SYMBOL_P(path) && if (RARRAY_LEN(val) == 2 && SYMBOL_P(path) &&
SYM2ID(path) == rb_intern("child")) { SYM2ID(path) == id_child) {
param = check_exec_redirect_fd(rb_ary_entry(val, 1), 0); param = check_exec_redirect_fd(rb_ary_entry(val, 1), 0);
eargp->fd_dup2_child = check_exec_redirect1(eargp->fd_dup2_child, key, param); eargp->fd_dup2_child = check_exec_redirect1(eargp->fd_dup2_child, key, param);
} }
@ -1648,7 +1665,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
case T_SYMBOL: case T_SYMBOL:
id = SYM2ID(key); id = SYM2ID(key);
#ifdef HAVE_SETPGID #ifdef HAVE_SETPGID
if (id == rb_intern("pgroup")) { if (id == id_pgroup) {
rb_pid_t pgroup; rb_pid_t pgroup;
if (eargp->pgroup_given) { if (eargp->pgroup_given) {
rb_raise(rb_eArgError, "pgroup option specified twice"); rb_raise(rb_eArgError, "pgroup option specified twice");
@ -1669,7 +1686,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
else else
#endif #endif
#ifdef _WIN32 #ifdef _WIN32
if (id == rb_intern("new_pgroup")) { if (id == id_new_pgroup) {
if (eargp->new_pgroup_given) { if (eargp->new_pgroup_given) {
rb_raise(rb_eArgError, "new_pgroup option specified twice"); rb_raise(rb_eArgError, "new_pgroup option specified twice");
} }
@ -1707,14 +1724,14 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
} }
else else
#endif #endif
if (id == rb_intern("unsetenv_others")) { if (id == id_unsetenv_others) {
if (eargp->unsetenv_others_given) { if (eargp->unsetenv_others_given) {
rb_raise(rb_eArgError, "unsetenv_others option specified twice"); rb_raise(rb_eArgError, "unsetenv_others option specified twice");
} }
eargp->unsetenv_others_given = 1; eargp->unsetenv_others_given = 1;
eargp->unsetenv_others_do = RTEST(val) ? 1 : 0; eargp->unsetenv_others_do = RTEST(val) ? 1 : 0;
} }
else if (id == rb_intern("chdir")) { else if (id == id_chdir) {
if (eargp->chdir_given) { if (eargp->chdir_given) {
rb_raise(rb_eArgError, "chdir option specified twice"); rb_raise(rb_eArgError, "chdir option specified twice");
} }
@ -1722,7 +1739,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
eargp->chdir_given = 1; eargp->chdir_given = 1;
eargp->chdir_dir = hide_obj(EXPORT_DUP(val)); eargp->chdir_dir = hide_obj(EXPORT_DUP(val));
} }
else if (id == rb_intern("umask")) { else if (id == id_umask) {
mode_t cmask = NUM2MODET(val); mode_t cmask = NUM2MODET(val);
if (eargp->umask_given) { if (eargp->umask_given) {
rb_raise(rb_eArgError, "umask option specified twice"); rb_raise(rb_eArgError, "umask option specified twice");
@ -1730,26 +1747,26 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
eargp->umask_given = 1; eargp->umask_given = 1;
eargp->umask_mask = cmask; eargp->umask_mask = cmask;
} }
else if (id == rb_intern("close_others")) { else if (id == id_close_others) {
if (eargp->close_others_given) { if (eargp->close_others_given) {
rb_raise(rb_eArgError, "close_others option specified twice"); rb_raise(rb_eArgError, "close_others option specified twice");
} }
eargp->close_others_given = 1; eargp->close_others_given = 1;
eargp->close_others_do = RTEST(val) ? 1 : 0; eargp->close_others_do = RTEST(val) ? 1 : 0;
} }
else if (id == rb_intern("in")) { else if (id == id_in) {
key = INT2FIX(0); key = INT2FIX(0);
goto redirect; goto redirect;
} }
else if (id == rb_intern("out")) { else if (id == id_out) {
key = INT2FIX(1); key = INT2FIX(1);
goto redirect; goto redirect;
} }
else if (id == rb_intern("err")) { else if (id == id_err) {
key = INT2FIX(2); key = INT2FIX(2);
goto redirect; goto redirect;
} }
else if (id == rb_intern("uid")) { else if (id == id_uid) {
#ifdef HAVE_SETUID #ifdef HAVE_SETUID
if (eargp->uid_given) { if (eargp->uid_given) {
rb_raise(rb_eArgError, "uid option specified twice"); rb_raise(rb_eArgError, "uid option specified twice");
@ -1764,7 +1781,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
"uid option is unimplemented on this machine"); "uid option is unimplemented on this machine");
#endif #endif
} }
else if (id == rb_intern("gid")) { else if (id == id_gid) {
#ifdef HAVE_SETGID #ifdef HAVE_SETGID
if (eargp->gid_given) { if (eargp->gid_given) {
rb_raise(rb_eArgError, "gid option specified twice"); rb_raise(rb_eArgError, "gid option specified twice");
@ -2306,7 +2323,7 @@ rb_execarg_fixup(VALUE execarg_obj)
envtbl = rb_hash_new(); envtbl = rb_hash_new();
} }
else { else {
envtbl = rb_const_get(rb_cObject, rb_intern("ENV")); envtbl = rb_const_get(rb_cObject, id_ENV);
envtbl = rb_convert_type(envtbl, T_HASH, "Hash", "to_hash"); envtbl = rb_convert_type(envtbl, T_HASH, "Hash", "to_hash");
} }
hide_obj(envtbl); hide_obj(envtbl);
@ -2897,7 +2914,7 @@ save_env(struct rb_execarg *sargp)
if (!sargp) if (!sargp)
return; return;
if (sargp->env_modification == Qfalse) { if (sargp->env_modification == Qfalse) {
VALUE env = rb_const_get(rb_cObject, rb_intern("ENV")); VALUE env = rb_const_get(rb_cObject, id_ENV);
if (RTEST(env)) { if (RTEST(env)) {
VALUE ary = hide_obj(rb_ary_new()); VALUE ary = hide_obj(rb_ary_new());
rb_block_call(env, idEach, 0, 0, save_env_i, rb_block_call(env, idEach, 0, 0, save_env_i,
@ -7020,30 +7037,30 @@ make_clock_result(struct timetick *ttp,
timetick_int_t *denominators, int num_denominators, timetick_int_t *denominators, int num_denominators,
VALUE unit) VALUE unit)
{ {
if (unit == ID2SYM(rb_intern("nanosecond"))) { if (unit == ID2SYM(id_nanosecond)) {
numerators[num_numerators++] = 1000000000; numerators[num_numerators++] = 1000000000;
return timetick2integer(ttp, numerators, num_numerators, denominators, num_denominators); return timetick2integer(ttp, numerators, num_numerators, denominators, num_denominators);
} }
else if (unit == ID2SYM(rb_intern("microsecond"))) { else if (unit == ID2SYM(id_microsecond)) {
numerators[num_numerators++] = 1000000; numerators[num_numerators++] = 1000000;
return timetick2integer(ttp, numerators, num_numerators, denominators, num_denominators); return timetick2integer(ttp, numerators, num_numerators, denominators, num_denominators);
} }
else if (unit == ID2SYM(rb_intern("millisecond"))) { else if (unit == ID2SYM(id_millisecond)) {
numerators[num_numerators++] = 1000; numerators[num_numerators++] = 1000;
return timetick2integer(ttp, numerators, num_numerators, denominators, num_denominators); return timetick2integer(ttp, numerators, num_numerators, denominators, num_denominators);
} }
else if (unit == ID2SYM(rb_intern("second"))) { else if (unit == ID2SYM(id_second)) {
return timetick2integer(ttp, numerators, num_numerators, denominators, num_denominators); return timetick2integer(ttp, numerators, num_numerators, denominators, num_denominators);
} }
else if (unit == ID2SYM(rb_intern("float_microsecond"))) { else if (unit == ID2SYM(id_float_microsecond)) {
numerators[num_numerators++] = 1000000; numerators[num_numerators++] = 1000000;
return timetick2dblnum(ttp, numerators, num_numerators, denominators, num_denominators); return timetick2dblnum(ttp, numerators, num_numerators, denominators, num_denominators);
} }
else if (unit == ID2SYM(rb_intern("float_millisecond"))) { else if (unit == ID2SYM(id_float_millisecond)) {
numerators[num_numerators++] = 1000; numerators[num_numerators++] = 1000;
return timetick2dblnum(ttp, numerators, num_numerators, denominators, num_denominators); return timetick2dblnum(ttp, numerators, num_numerators, denominators, num_denominators);
} }
else if (NIL_P(unit) || unit == ID2SYM(rb_intern("float_second"))) { else if (NIL_P(unit) || unit == ID2SYM(id_float_second)) {
return timetick2dblnum(ttp, numerators, num_numerators, denominators, num_denominators); return timetick2dblnum(ttp, numerators, num_numerators, denominators, num_denominators);
} }
else else
@ -7209,7 +7226,7 @@ rb_clock_gettime(int argc, VALUE *argv)
* GETTIMEOFDAY_BASED_CLOCK_REALTIME is used for * GETTIMEOFDAY_BASED_CLOCK_REALTIME is used for
* CLOCK_REALTIME if clock_gettime is not available. * CLOCK_REALTIME if clock_gettime is not available.
*/ */
#define RUBY_GETTIMEOFDAY_BASED_CLOCK_REALTIME ID2SYM(rb_intern("GETTIMEOFDAY_BASED_CLOCK_REALTIME")) #define RUBY_GETTIMEOFDAY_BASED_CLOCK_REALTIME ID2SYM(id_GETTIMEOFDAY_BASED_CLOCK_REALTIME)
if (clk_id == RUBY_GETTIMEOFDAY_BASED_CLOCK_REALTIME) { if (clk_id == RUBY_GETTIMEOFDAY_BASED_CLOCK_REALTIME) {
struct timeval tv; struct timeval tv;
ret = gettimeofday(&tv, 0); ret = gettimeofday(&tv, 0);
@ -7221,7 +7238,7 @@ rb_clock_gettime(int argc, VALUE *argv)
goto success; goto success;
} }
#define RUBY_TIME_BASED_CLOCK_REALTIME ID2SYM(rb_intern("TIME_BASED_CLOCK_REALTIME")) #define RUBY_TIME_BASED_CLOCK_REALTIME ID2SYM(id_TIME_BASED_CLOCK_REALTIME)
if (clk_id == RUBY_TIME_BASED_CLOCK_REALTIME) { if (clk_id == RUBY_TIME_BASED_CLOCK_REALTIME) {
time_t t; time_t t;
t = time(NULL); t = time(NULL);
@ -7235,7 +7252,7 @@ rb_clock_gettime(int argc, VALUE *argv)
#ifdef HAVE_TIMES #ifdef HAVE_TIMES
#define RUBY_TIMES_BASED_CLOCK_MONOTONIC \ #define RUBY_TIMES_BASED_CLOCK_MONOTONIC \
ID2SYM(rb_intern("TIMES_BASED_CLOCK_MONOTONIC")) ID2SYM(id_TIMES_BASED_CLOCK_MONOTONIC)
if (clk_id == RUBY_TIMES_BASED_CLOCK_MONOTONIC) { if (clk_id == RUBY_TIMES_BASED_CLOCK_MONOTONIC) {
struct tms buf; struct tms buf;
clock_t c; clock_t c;
@ -7253,7 +7270,7 @@ rb_clock_gettime(int argc, VALUE *argv)
#ifdef RUSAGE_SELF #ifdef RUSAGE_SELF
#define RUBY_GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID \ #define RUBY_GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID \
ID2SYM(rb_intern("GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID")) ID2SYM(id_GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID)
if (clk_id == RUBY_GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID) { if (clk_id == RUBY_GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID) {
struct rusage usage; struct rusage usage;
int32_t usec; int32_t usec;
@ -7274,7 +7291,7 @@ rb_clock_gettime(int argc, VALUE *argv)
#ifdef HAVE_TIMES #ifdef HAVE_TIMES
#define RUBY_TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID \ #define RUBY_TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID \
ID2SYM(rb_intern("TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID")) ID2SYM(id_TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID)
if (clk_id == RUBY_TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID) { if (clk_id == RUBY_TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID) {
struct tms buf; struct tms buf;
unsigned_clock_t utime, stime; unsigned_clock_t utime, stime;
@ -7294,7 +7311,7 @@ rb_clock_gettime(int argc, VALUE *argv)
#endif #endif
#define RUBY_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID \ #define RUBY_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID \
ID2SYM(rb_intern("CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID")) ID2SYM(id_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID)
if (clk_id == RUBY_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID) { if (clk_id == RUBY_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID) {
clock_t c; clock_t c;
unsigned_clock_t uc; unsigned_clock_t uc;
@ -7310,7 +7327,7 @@ rb_clock_gettime(int argc, VALUE *argv)
} }
#ifdef __APPLE__ #ifdef __APPLE__
#define RUBY_MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC ID2SYM(rb_intern("MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC")) #define RUBY_MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC ID2SYM(id_MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC)
if (clk_id == RUBY_MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC) { if (clk_id == RUBY_MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC) {
mach_timebase_info_data_t *info = get_mach_timebase_info(); mach_timebase_info_data_t *info = get_mach_timebase_info();
uint64_t t = mach_absolute_time(); uint64_t t = mach_absolute_time();
@ -7481,7 +7498,7 @@ rb_clock_getres(int argc, VALUE *argv)
rb_sys_fail(0); rb_sys_fail(0);
success: success:
if (unit == ID2SYM(rb_intern("hertz"))) { if (unit == ID2SYM(id_hertz)) {
return timetick2dblnum_reciprocal(&tt, numerators, num_numerators, denominators, num_denominators); return timetick2dblnum_reciprocal(&tt, numerators, num_numerators, denominators, num_denominators);
} }
else { else {
@ -7881,4 +7898,46 @@ Init_process(void)
rb_define_module_function(rb_mProcID_Syscall, "setresuid", p_sys_setresuid, 3); rb_define_module_function(rb_mProcID_Syscall, "setresuid", p_sys_setresuid, 3);
rb_define_module_function(rb_mProcID_Syscall, "setresgid", p_sys_setresgid, 3); rb_define_module_function(rb_mProcID_Syscall, "setresgid", p_sys_setresgid, 3);
rb_define_module_function(rb_mProcID_Syscall, "issetugid", p_sys_issetugid, 0); rb_define_module_function(rb_mProcID_Syscall, "issetugid", p_sys_issetugid, 0);
id_in = rb_intern("in");
id_out = rb_intern("out");
id_err = rb_intern("err");
id_pid = rb_intern("pid");
id_uid = rb_intern("uid");
id_gid = rb_intern("gid");
id_close = rb_intern("close");
id_child = rb_intern("child");
id_status = rb_intern("status");
#ifdef HAVE_SETPGID
id_pgroup = rb_intern("pgroup");
#endif
#ifdef _WIN32
id_new_pgroup = rb_intern("new_pgroup");
#endif
id_unsetenv_others = rb_intern("unsetenv_others");
id_chdir = rb_intern("chdir");
id_umask = rb_intern("umask");
id_close_others = rb_intern("close_others");
id_ENV = rb_intern("ENV");
id_nanosecond = rb_intern("nanosecond");
id_microsecond = rb_intern("microsecond");
id_millisecond = rb_intern("millisecond");
id_second = rb_intern("second");
id_float_microsecond = rb_intern("float_microsecond");
id_float_millisecond = rb_intern("float_millisecond");
id_float_second = rb_intern("float_second");
id_GETTIMEOFDAY_BASED_CLOCK_REALTIME = rb_intern("GETTIMEOFDAY_BASED_CLOCK_REALTIME");
id_TIME_BASED_CLOCK_REALTIME = rb_intern("TIME_BASED_CLOCK_REALTIME");
#ifdef HAVE_TIMES
id_TIMES_BASED_CLOCK_MONOTONIC = rb_intern("TIMES_BASED_CLOCK_MONOTONIC");
id_TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID = rb_intern("TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID");
#endif
#ifdef RUSAGE_SELF
id_GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID = rb_intern("GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID");
#endif
id_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID = rb_intern("CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID");
#ifdef __APPLE__
id_MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC = rb_intern("MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC");
#endif
id_hertz = rb_intern("hertz");
} }