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

ruby-changes:50732

From: nobu <ko1@a...>
Date: Sat, 24 Mar 2018 20:15:16 +0900 (JST)
Subject: [ruby-changes:50732] nobu:r62908 (trunk): compile.c: split add_insn_info

nobu	2018-03-24 20:15:10 +0900 (Sat, 24 Mar 2018)

  New Revision: 62908

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

  Log:
    compile.c: split add_insn_info
    
    * compile.c (add_insn_info, add_adjust_info): split for each
      list->type, to remove unnecessary repeated conditions and casts.

  Modified files:
    trunk/compile.c
Index: compile.c
===================================================================
--- compile.c	(revision 62907)
+++ compile.c	(revision 62908)
@@ -1933,31 +1933,30 @@ fix_sp_depth(rb_iseq_t *iseq, LINK_ANCHO https://github.com/ruby/ruby/blob/trunk/compile.c#L1933
 }
 
 static int
-add_insn_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions, int insns_info_index, int code_index, LINK_ELEMENT *list)
+add_insn_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions,
+              int insns_info_index, int code_index, const INSN *iobj)
 {
-    if (list->type == ISEQ_ELEMENT_INSN) {
-	INSN *iobj = (INSN *)list;
-	if (insns_info_index == 0 ||
-	    insns_info[insns_info_index-1].line_no != iobj->insn_info.line_no ||
-	    insns_info[insns_info_index-1].events  != iobj->insn_info.events) {
-	    insns_info[insns_info_index].line_no    = iobj->insn_info.line_no;
-	    insns_info[insns_info_index].events     = iobj->insn_info.events;
-	    positions[insns_info_index]             = code_index;
-	    return TRUE;
-	}
-    }
-    else if (list->type == ISEQ_ELEMENT_ADJUST) {
-	ADJUST *adjust = (ADJUST *)list;
-	if (insns_info_index > 0 ||
-	    insns_info[insns_info_index-1].line_no != adjust->line_no) {
-	    insns_info[insns_info_index].line_no    = adjust->line_no;
-	    insns_info[insns_info_index].events     = 0;
-	    positions[insns_info_index]             = code_index;
-	    return TRUE;
-	}
+    if (insns_info_index == 0 ||
+        insns_info[insns_info_index-1].line_no != iobj->insn_info.line_no ||
+        insns_info[insns_info_index-1].events  != iobj->insn_info.events) {
+        insns_info[insns_info_index].line_no    = iobj->insn_info.line_no;
+        insns_info[insns_info_index].events     = iobj->insn_info.events;
+        positions[insns_info_index]             = code_index;
+        return TRUE;
     }
-    else {
-	VM_UNREACHABLE(add_insn_info);
+    return FALSE;
+}
+
+static int
+add_adjust_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions,
+                int insns_info_index, int code_index, const ADJUST *adjust)
+{
+    if (insns_info_index > 0 ||
+        insns_info[insns_info_index-1].line_no != adjust->line_no) {
+        insns_info[insns_info_index].line_no    = adjust->line_no;
+        insns_info[insns_info_index].events     = 0;
+        positions[insns_info_index]             = code_index;
+        return TRUE;
     }
     return FALSE;
 }
@@ -2176,7 +2175,7 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/compile.c#L2175
 			return COMPILE_NG;
 		    }
 		}
-		if (add_insn_info(insns_info, positions, insns_info_index, code_index, (LINK_ELEMENT *)iobj)) insns_info_index++;
+		if (add_insn_info(insns_info, positions, insns_info_index, code_index, iobj)) insns_info_index++;
 		code_index += len;
 		break;
 	    }
@@ -2201,7 +2200,7 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/compile.c#L2200
 		if (adjust->line_no != -1) {
 		    const int diff = orig_sp - sp;
 		    if (diff > 0) {
-			if (add_insn_info(insns_info, positions, insns_info_index, code_index, (LINK_ELEMENT *)adjust)) insns_info_index++;
+			if (add_adjust_info(insns_info, positions, insns_info_index, code_index, adjust)) insns_info_index++;
 		    }
 		    if (diff > 1) {
 			generated_iseq[code_index++] = BIN(adjuststack);

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

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