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

ruby-changes:37691

From: ko1 <ko1@a...>
Date: Fri, 27 Feb 2015 17:10:16 +0900 (JST)
Subject: [ruby-changes:37691] ko1:r49772 (trunk): * vm_core.h: define vm_svar_index.

ko1	2015-02-27 17:10:04 +0900 (Fri, 27 Feb 2015)

  New Revision: 49772

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

  Log:
    * vm_core.h: define vm_svar_index.
    * vm_insnhelper.c, vm.c, compile.c: use vm_svar_index names.
    * iseq.h: remove DEFAULT_SPECIAL_VAR_COUNT.
      use VM_SVAR_FLIPFLOP_START instead.

  Modified files:
    trunk/ChangeLog
    trunk/compile.c
    trunk/iseq.h
    trunk/vm.c
    trunk/vm_core.h
    trunk/vm_insnhelper.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 49771)
+++ ChangeLog	(revision 49772)
@@ -1,3 +1,12 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Fri Feb 27 17:06:44 2015  Koichi Sasada  <ko1@a...>
+
+	* vm_core.h: define vm_svar_index.
+
+	* vm_insnhelper.c, vm.c, compile.c: use vm_svar_index names.
+
+	* iseq.h: remove DEFAULT_SPECIAL_VAR_COUNT.
+	  use VM_SVAR_FLIPFLOP_START instead.
+
 Fri Feb 27 13:57:48 2015  Nobuyoshi Nakada  <nobu@r...>
 
 	* io.c (setup_narg): wipe away expanded part of buffer to get rid
Index: vm_core.h
===================================================================
--- vm_core.h	(revision 49771)
+++ vm_core.h	(revision 49772)
@@ -838,6 +838,14 @@ enum vm_special_object_type { https://github.com/ruby/ruby/blob/trunk/vm_core.h#L838
     VM_SPECIAL_OBJECT_CONST_BASE
 };
 
+enum vm_svar_index {
+    VM_SVAR_LASTLINE = 0,      /* $_ */
+    VM_SVAR_BACKREF = 1,       /* $~ */
+
+    VM_SVAR_EXTRA_START = 2,
+    VM_SVAR_FLIPFLOP_START = 2 /* flipflop */
+};
+
 #define VM_FRAME_MAGIC_METHOD 0x11
 #define VM_FRAME_MAGIC_BLOCK  0x21
 #define VM_FRAME_MAGIC_CLASS  0x31
Index: iseq.h
===================================================================
--- iseq.h	(revision 49771)
+++ iseq.h	(revision 49772)
@@ -151,8 +151,6 @@ enum defined_type { https://github.com/ruby/ruby/blob/trunk/iseq.h#L151
 
 VALUE rb_iseq_defined_string(enum defined_type type);
 
-#define DEFAULT_SPECIAL_VAR_COUNT 2
-
 RUBY_SYMBOL_EXPORT_END
 
 #endif /* RUBY_COMPILE_H */
Index: compile.c
===================================================================
--- compile.c	(revision 49771)
+++ compile.c	(revision 49772)
@@ -5288,7 +5288,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/compile.c#L5288
 	rb_num_t cnt;
 	VALUE key;
 
-	cnt = local_iseq->flip_cnt++ + DEFAULT_SPECIAL_VAR_COUNT;
+	cnt = local_iseq->flip_cnt++ + VM_SVAR_FLIPFLOP_START;
 	key = INT2FIX(cnt);
 
 	ADD_INSN2(ret, line, getspecial, key, INT2FIX(0));
Index: vm.c
===================================================================
--- vm.c	(revision 49771)
+++ vm.c	(revision 49772)
@@ -943,25 +943,25 @@ vm_svar_set(VALUE key, VALUE val) https://github.com/ruby/ruby/blob/trunk/vm.c#L943
 VALUE
 rb_backref_get(void)
 {
-    return vm_svar_get(1);
+    return vm_svar_get(VM_SVAR_BACKREF);
 }
 
 void
 rb_backref_set(VALUE val)
 {
-    vm_svar_set(1, val);
+    vm_svar_set(VM_SVAR_BACKREF, val);
 }
 
 VALUE
 rb_lastline_get(void)
 {
-    return vm_svar_get(0);
+    return vm_svar_get(VM_SVAR_LASTLINE);
 }
 
 void
 rb_lastline_set(VALUE val)
 {
-    vm_svar_set(0, val);
+    vm_svar_set(VM_SVAR_LASTLINE, val);
 }
 
 /* misc */
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 49771)
+++ vm_insnhelper.c	(revision 49772)
@@ -140,11 +140,11 @@ rb_error_arity(int argc, int min, int ma https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L140
 /* svar */
 
 static inline NODE **
-lep_svar_place(rb_thread_t *th, VALUE *lep)
+lep_svar_place(rb_thread_t *th, const VALUE *lep)
 {
-    VALUE *svar;
+    const VALUE *svar;
 
-    if (lep && th->root_lep != lep) {
+    if (lep && (th == NULL || th->root_lep != lep)) {
 	svar = &lep[-1];
     }
     else {
@@ -155,17 +155,17 @@ lep_svar_place(rb_thread_t *th, VALUE *l https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L155
 }
 
 static VALUE
-lep_svar_get(rb_thread_t *th, VALUE *lep, rb_num_t key)
+lep_svar_get(rb_thread_t *th, const VALUE *lep, rb_num_t key)
 {
-    NODE **svar_place = lep_svar_place(th, lep);
-    NODE *svar = *svar_place;
+    NODE ** const svar_place = lep_svar_place(th, lep);
+    const NODE * const svar = *svar_place;
 
     if (NIL_P((VALUE)svar)) return Qnil;
 
     switch (key) {
-      case 0:
+      case VM_SVAR_LASTLINE:
 	return svar->u1.value;
-      case 1:
+      case VM_SVAR_BACKREF:
 	return svar->u2.value;
       default: {
 	const VALUE ary = svar->u3.value;
@@ -174,7 +174,7 @@ lep_svar_get(rb_thread_t *th, VALUE *lep https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L174
 	    return Qnil;
 	}
 	else {
-	    return rb_ary_entry(ary, key - DEFAULT_SPECIAL_VAR_COUNT);
+	    return rb_ary_entry(ary, key - VM_SVAR_EXTRA_START);
 	}
       }
     }
@@ -183,7 +183,7 @@ lep_svar_get(rb_thread_t *th, VALUE *lep https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L183
 static void
 lep_svar_set(rb_thread_t *th, VALUE *lep, rb_num_t key, VALUE val)
 {
-    NODE **svar_place = lep_svar_place(th, lep);
+    NODE **svar_place = (NODE **)lep_svar_place(th, lep);
     NODE *svar = *svar_place;
 
     if (NIL_P((VALUE)svar)) {
@@ -191,10 +191,10 @@ lep_svar_set(rb_thread_t *th, VALUE *lep https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L191
     }
 
     switch (key) {
-      case 0:
+      case VM_SVAR_LASTLINE:
 	svar->u1.value = val;
 	return;
-      case 1:
+      case VM_SVAR_BACKREF:
 	svar->u2.value = val;
 	return;
       default: {
@@ -203,7 +203,7 @@ lep_svar_set(rb_thread_t *th, VALUE *lep https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L203
 	if (NIL_P(ary)) {
 	    svar->u3.value = ary = rb_ary_new();
 	}
-	rb_ary_store(ary, key - DEFAULT_SPECIAL_VAR_COUNT, val);
+	rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val);
       }
     }
 }
@@ -217,7 +217,7 @@ vm_getspecial(rb_thread_t *th, VALUE *le https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L217
 	val = lep_svar_get(th, lep, key);
     }
     else {
-	VALUE backref = lep_svar_get(th, lep, 1);
+	VALUE backref = lep_svar_get(th, lep, VM_SVAR_BACKREF);
 
 	if (type & 0x01) {
 	    switch (type >> 1) {

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

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