[前][次][番号順一覧][スレッド一覧]

ruby-changes:36469

From: nobu <ko1@a...>
Date: Mon, 24 Nov 2014 12:44:50 +0900 (JST)
Subject: [ruby-changes:36469] nobu:r48551 (trunk): process.c: intern IDs

nobu	2014-11-24 12:44:24 +0900 (Mon, 24 Nov 2014)

  New Revision: 48551

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=48551

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

  Modified files:
    trunk/process.c
Index: process.c
===================================================================
--- process.c	(revision 48550)
+++ process.c	(revision 48551)
@@ -255,6 +255,31 @@ typedef unsigned long unsigned_clock_t; https://github.com/ruby/ruby/blob/trunk/process.c#L255
 typedef unsigned LONG_LONG unsigned_clock_t;
 #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:
  *     Process.pid   -> fixnum
@@ -340,8 +365,8 @@ rb_last_status_set(int status, rb_pid_t https://github.com/ruby/ruby/blob/trunk/process.c#L365
 {
     rb_thread_t *th = GET_THREAD();
     th->last_status = rb_obj_alloc(rb_cProcessStatus);
-    rb_iv_set(th->last_status, "status", INT2FIX(status));
-    rb_iv_set(th->last_status, "pid", PIDT2NUM(pid));
+    rb_ivar_set(th->last_status, id_status, INT2FIX(status));
+    rb_ivar_set(th->last_status, id_pid, PIDT2NUM(pid));
 }
 
 void
@@ -366,7 +391,7 @@ rb_last_status_clear(void) https://github.com/ruby/ruby/blob/trunk/process.c#L391
 static VALUE
 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))
@@ -385,7 +410,7 @@ pst_to_i(VALUE st) https://github.com/ruby/ruby/blob/trunk/process.c#L410
 static VALUE
 pst_pid(VALUE st)
 {
-    return rb_attr_get(st, rb_intern("pid"));
+    return rb_attr_get(st, id_pid);
 }
 
 static void
@@ -1011,18 +1036,10 @@ proc_waitall(void) https://github.com/ruby/ruby/blob/trunk/process.c#L1036
 
 static VALUE rb_cWaiter;
 
-static inline ID
-id_pid(void)
-{
-    ID pid;
-    CONST_ID(pid, "pid");
-    return pid;
-}
-
 static VALUE
 detach_process_pid(VALUE thread)
 {
-    return rb_thread_local_aref(thread, id_pid());
+    return rb_thread_local_aref(thread, id_pid);
 }
 
 static VALUE
@@ -1041,7 +1058,7 @@ VALUE https://github.com/ruby/ruby/blob/trunk/process.c#L1058
 rb_detach_process(rb_pid_t 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);
     return watcher;
 }
@@ -1473,11 +1490,11 @@ check_exec_redirect_fd(VALUE v, int iske https://github.com/ruby/ruby/blob/trunk/process.c#L1490
     }
     else if (SYMBOL_P(v)) {
         ID id = SYM2ID(v);
-        if (id == rb_intern("in"))
+        if (id == id_in)
             fd = 0;
-        else if (id == rb_intern("out"))
+        else if (id == id_out)
             fd = 1;
-        else if (id == rb_intern("err"))
+        else if (id == id_err)
             fd = 2;
         else
             goto wrong;
@@ -1537,19 +1554,19 @@ check_exec_redirect(VALUE key, VALUE val https://github.com/ruby/ruby/blob/trunk/process.c#L1554
     switch (TYPE(val)) {
       case T_SYMBOL:
         id = SYM2ID(val);
-        if (id == rb_intern("close")) {
+        if (id == id_close) {
             param = Qnil;
             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);
             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);
             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);
             eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param);
         }
@@ -1571,7 +1588,7 @@ check_exec_redirect(VALUE key, VALUE val https://github.com/ruby/ruby/blob/trunk/process.c#L1588
       case T_ARRAY:
         path = rb_ary_entry(val, 0);
         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);
             eargp->fd_dup2_child = check_exec_redirect1(eargp->fd_dup2_child, key, param);
         }
@@ -1648,7 +1665,7 @@ rb_execarg_addopt(VALUE execarg_obj, VAL https://github.com/ruby/ruby/blob/trunk/process.c#L1665
       case T_SYMBOL:
         id = SYM2ID(key);
 #ifdef HAVE_SETPGID
-        if (id == rb_intern("pgroup")) {
+        if (id == id_pgroup) {
             rb_pid_t pgroup;
             if (eargp->pgroup_given) {
                 rb_raise(rb_eArgError, "pgroup option specified twice");
@@ -1669,7 +1686,7 @@ rb_execarg_addopt(VALUE execarg_obj, VAL https://github.com/ruby/ruby/blob/trunk/process.c#L1686
         else
 #endif
 #ifdef _WIN32
-        if (id == rb_intern("new_pgroup")) {
+        if (id == id_new_pgroup) {
             if (eargp->new_pgroup_given) {
                 rb_raise(rb_eArgError, "new_pgroup option specified twice");
             }
@@ -1707,14 +1724,14 @@ rb_execarg_addopt(VALUE execarg_obj, VAL https://github.com/ruby/ruby/blob/trunk/process.c#L1724
         }
         else
 #endif
-        if (id == rb_intern("unsetenv_others")) {
+        if (id == id_unsetenv_others) {
             if (eargp->unsetenv_others_given) {
                 rb_raise(rb_eArgError, "unsetenv_others option specified twice");
             }
             eargp->unsetenv_others_given = 1;
             eargp->unsetenv_others_do = RTEST(val) ? 1 : 0;
         }
-        else if (id == rb_intern("chdir")) {
+        else if (id == id_chdir) {
             if (eargp->chdir_given) {
                 rb_raise(rb_eArgError, "chdir option specified twice");
             }
@@ -1722,7 +1739,7 @@ rb_execarg_addopt(VALUE execarg_obj, VAL https://github.com/ruby/ruby/blob/trunk/process.c#L1739
             eargp->chdir_given = 1;
             eargp->chdir_dir = hide_obj(EXPORT_DUP(val));
         }
-        else if (id == rb_intern("umask")) {
+        else if (id == id_umask) {
 	    mode_t cmask = NUM2MODET(val);
             if (eargp->umask_given) {
                 rb_raise(rb_eArgError, "umask option specified twice");
@@ -1730,26 +1747,26 @@ rb_execarg_addopt(VALUE execarg_obj, VAL https://github.com/ruby/ruby/blob/trunk/process.c#L1747
             eargp->umask_given = 1;
             eargp->umask_mask = cmask;
         }
-        else if (id == rb_intern("close_others")) {
+        else if (id == id_close_others) {
             if (eargp->close_others_given) {
                 rb_raise(rb_eArgError, "close_others option specified twice");
             }
             eargp->close_others_given = 1;
             eargp->close_others_do = RTEST(val) ? 1 : 0;
         }
-        else if (id == rb_intern("in")) {
+        else if (id == id_in) {
             key = INT2FIX(0);
             goto redirect;
         }
-        else if (id == rb_intern("out")) {
+        else if (id == id_out) {
             key = INT2FIX(1);
             goto redirect;
         }
-        else if (id == rb_intern("err")) {
+        else if (id == id_err) {
             key = INT2FIX(2);
             goto redirect;
         }
-	else if (id == rb_intern("uid")) {
+	else if (id == id_uid) {
 #ifdef HAVE_SETUID
 	    if (eargp->uid_given) {
 		rb_raise(rb_eArgError, "uid option specified twice");
@@ -1764,7 +1781,7 @@ rb_execarg_addopt(VALUE execarg_obj, VAL https://github.com/ruby/ruby/blob/trunk/process.c#L1781
 		     "uid option is unimplemented on this machine");
 #endif
 	}
-	else if (id == rb_intern("gid")) {
+	else if (id == id_gid) {
 #ifdef HAVE_SETGID
 	    if (eargp->gid_given) {
 		rb_raise(rb_eArgError, "gid option specified twice");
@@ -2306,7 +2323,7 @@ rb_execarg_fixup(VALUE execarg_obj) https://github.com/ruby/ruby/blob/trunk/process.c#L2323
             envtbl = rb_hash_new();
         }
         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");
         }
         hide_obj(envtbl);
@@ -2897,7 +2914,7 @@ save_env(struct rb_execarg *sargp) https://github.com/ruby/ruby/blob/trunk/process.c#L2914
     if (!sargp)
         return;
     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)) {
             VALUE ary = hide_obj(rb_ary_new());
             rb_block_call(env, idEach, 0, 0, save_env_i,
@@ -7020,30 +7037,30 @@ make_clock_result(struct timetick *ttp, https://github.com/ruby/ruby/blob/trunk/process.c#L7037
         timetick_int_t *denominators, int num_denominators,
         VALUE unit)
 {
-    if (unit == ID2SYM(rb_intern("nanosecond"))) {
+    if (unit == ID2SYM(id_nanosecond)) {
         numerators[num_numerators++] = 1000000000;
         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;
         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;
         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);
     }
-    else if (unit == ID2SYM(rb_intern("float_microsecond"))) {
+    else if (unit == ID2SYM(id_float_microsecond)) {
         numerators[num_numerators++] = 1000000;
         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;
         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);
     }
     else
@@ -7209,7 +7226,7 @@ rb_clock_gettime(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L7226
          * GETTIMEOFDAY_BASED_CLOCK_REALTIME is used for
          * 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) {
             struct timeval tv;
             ret = gettimeofday(&tv, 0);
@@ -7221,7 +7238,7 @@ rb_clock_gettime(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L7238
             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) {
             time_t t;
             t = time(NULL);
@@ -7235,7 +7252,7 @@ rb_clock_gettime(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L7252
 
 #ifdef HAVE_TIMES
 #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) {
             struct tms buf;
             clock_t c;
@@ -7253,7 +7270,7 @@ rb_clock_gettime(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L7270
 
 #ifdef RUSAGE_SELF
 #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) {
             struct rusage usage;
             int32_t usec;
@@ -7274,7 +7291,7 @@ rb_clock_gettime(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L7291
 
 #ifdef HAVE_TIMES
 #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) {
             struct tms buf;
             unsigned_clock_t utime, stime;
@@ -7294,7 +7311,7 @@ rb_clock_gettime(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L7311
 #endif
 
 #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) {
             clock_t c;
             unsigned_clock_t uc;
@@ -7310,7 +7327,7 @@ rb_clock_gettime(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L7327
         }
 
 #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) {
 	    mach_timebase_info_data_t *info = get_mach_timebase_info();
             uint64_t t = mach_absolute_time();
@@ -7481,7 +7498,7 @@ rb_clock_getres(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L7498
     rb_sys_fail(0);
 
   success:
-    if (unit == ID2SYM(rb_intern("hertz"))) {
+    if (unit == ID2SYM(id_hertz)) {
         return timetick2dblnum_reciprocal(&tt, numerators, num_numerators, denominators, num_denominators);
     }
     else {
@@ -7881,4 +7898,46 @@ Init_process(void) https://github.com/ruby/ruby/blob/trunk/process.c#L7898
     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, "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");
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]