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

ruby-changes:52281

From: normal <ko1@a...>
Date: Tue, 21 Aug 2018 10:01:42 +0900 (JST)
Subject: [ruby-changes:52281] normal:r64489 (trunk): cont.c: replace "GetFooPtr" macros with "foo_ptr" functions

normal	2018-08-21 10:01:37 +0900 (Tue, 21 Aug 2018)

  New Revision: 64489

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

  Log:
    cont.c: replace "GetFooPtr" macros with "foo_ptr" functions
    
    Following ko1's lead in r59192, this gets rid of non-obvious
    assignments which happen inside macros.

  Modified files:
    trunk/cont.c
Index: cont.c
===================================================================
--- cont.c	(revision 64488)
+++ cont.c	(revision 64489)
@@ -281,13 +281,26 @@ static VALUE rb_cContinuation; https://github.com/ruby/ruby/blob/trunk/cont.c#L281
 static VALUE rb_cFiber;
 static VALUE rb_eFiberError;
 
-#define GetContPtr(obj, ptr)  \
-    TypedData_Get_Struct((obj), rb_context_t, &cont_data_type, (ptr))
+static rb_context_t *
+cont_ptr(VALUE obj)
+{
+    rb_context_t *cont;
+
+    TypedData_Get_Struct(obj, rb_context_t, &cont_data_type, cont);
+
+    return cont;
+}
 
-#define GetFiberPtr(obj, ptr)  do {\
-    TypedData_Get_Struct((obj), rb_fiber_t, &fiber_data_type, (ptr)); \
-    if (!(ptr)) rb_raise(rb_eFiberError, "uninitialized fiber"); \
-} while (0)
+static rb_fiber_t *
+fiber_ptr(VALUE obj)
+{
+    rb_fiber_t *fib;
+
+    TypedData_Get_Struct(obj, rb_fiber_t, &fiber_data_type, fib);
+    if (!fib) rb_raise(rb_eFiberError, "uninitialized fiber");
+
+    return fib;
+}
 
 NOINLINE(static VALUE cont_capture(volatile int *volatile stat));
 
@@ -1251,9 +1264,8 @@ rollback_ensure_stack(VALUE self,rb_ensu https://github.com/ruby/ruby/blob/trunk/cont.c#L1264
 static VALUE
 rb_cont_call(int argc, VALUE *argv, VALUE contval)
 {
-    rb_context_t *cont;
+    rb_context_t *cont = cont_ptr(contval);
     rb_thread_t *th = GET_THREAD();
-    GetContPtr(contval, cont);
 
     if (cont_thread_value(cont) != th->self) {
 	rb_raise(rb_eRuntimeError, "continuation called across threads");
@@ -1741,9 +1753,7 @@ fiber_switch(rb_fiber_t *fib, int argc, https://github.com/ruby/ruby/blob/trunk/cont.c#L1753
 VALUE
 rb_fiber_transfer(VALUE fibval, int argc, const VALUE *argv)
 {
-    rb_fiber_t *fib;
-    GetFiberPtr(fibval, fib);
-    return fiber_switch(fib, argc, argv, 0);
+    return fiber_switch(fiber_ptr(fibval), argc, argv, 0);
 }
 
 void
@@ -1794,8 +1804,7 @@ rb_fiber_terminate(rb_fiber_t *fib, int https://github.com/ruby/ruby/blob/trunk/cont.c#L1804
 VALUE
 rb_fiber_resume(VALUE fibval, int argc, const VALUE *argv)
 {
-    rb_fiber_t *fib;
-    GetFiberPtr(fibval, fib);
+    rb_fiber_t *fib = fiber_ptr(fibval);
 
     if (fib->prev != 0 || fib->cont.type == ROOT_FIBER_CONTEXT) {
 	rb_raise(rb_eFiberError, "double resume");
@@ -1835,9 +1844,7 @@ rb_fiber_reset_root_local_storage(VALUE https://github.com/ruby/ruby/blob/trunk/cont.c#L1844
 VALUE
 rb_fiber_alive_p(VALUE fibval)
 {
-    const rb_fiber_t *fib;
-    GetFiberPtr(fibval, fib);
-    return FIBER_TERMINATED_P(fib) ? Qfalse : Qtrue;
+    return FIBER_TERMINATED_P(fiber_ptr(fibval)) ? Qfalse : Qtrue;
 }
 
 /*
@@ -1909,8 +1916,7 @@ rb_fiber_m_resume(int argc, VALUE *argv, https://github.com/ruby/ruby/blob/trunk/cont.c#L1916
 static VALUE
 rb_fiber_m_transfer(int argc, VALUE *argv, VALUE fibval)
 {
-    rb_fiber_t *fib;
-    GetFiberPtr(fibval, fib);
+    rb_fiber_t *fib = fiber_ptr(fibval);
     fib->transferred = 1;
     return fiber_switch(fib, argc, argv, 0);
 }
@@ -1956,11 +1962,10 @@ rb_fiber_s_current(VALUE klass) https://github.com/ruby/ruby/blob/trunk/cont.c#L1962
 static VALUE
 fiber_to_s(VALUE fibval)
 {
-    const rb_fiber_t *fib;
+    const rb_fiber_t *fib = fiber_ptr(fibval);
     const rb_proc_t *proc;
     char status_info[0x10];
 
-    GetFiberPtr(fibval, fib);
     snprintf(status_info, 0x10, " (%s)", fiber_status_name(fib->status));
     if (!rb_obj_is_proc(fib->first_proc)) {
 	VALUE str = rb_any_to_s(fibval);

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

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