        make_header_operands   insn
 Index: template/insns_info.inc.tmpl
 ===================================================================
---- template/insns_info.inc.tmpl	(revision 25565)
+--- template/insns_info.inc.tmpl	(revision 26649)
 +++ template/insns_info.inc.tmpl	(working copy)
 @@ -46,38 +46,6 @@
  }

 #ifdef USE_INSN_RET_NUM
 static int
 insn_ret_num(VALUE insn)


 static size_t
 iseq_memsize(const void *ptr)
 {
@@ -384,6 +427,24 @@
 				parent, ISEQ_TYPE_MAIN, &COMPILE_OPTION_DEFAULT);
 }
 
+static void
+update_file_iseq(VALUE filename, VALUE iseq)
+{
+    ID script_lines;
+    CONST_ID(script_lines, "SCRIPT_ISEQS__");
+    if (rb_const_defined_at(rb_cObject, script_lines)) {
+	VALUE hash = rb_const_get_at(rb_cObject, script_lines);
+	if (TYPE(hash) == T_HASH) {
+	    VALUE iseqs = rb_hash_aref(hash, filename);
+	    if (TYPE(iseqs) == T_ARRAY)
+		rb_ary_push(iseqs, iseq);
+	    else
+		rb_hash_aset(hash, filename, rb_ary_new3(1, iseq));
+	}
+    }
+}
+
+
 static VALUE
 rb_iseq_new_with_bopt_and_opt(NODE *node, VALUE name, VALUE filename, VALUE line_no,
 				VALUE parent, VALUE type, VALUE bopt,
@@ -398,6 +459,7 @@
     prepare_iseq_build(iseq, name, filename, line_no, parent, type, bopt, option);
     rb_iseq_compile_node(self, node);
     cleanup_iseq_build(iseq);
+    update_file_iseq(filename, self);
     return self;
 }
 
@@ -712,6 +774,117 @@
     return 0;
 }
 
