Forum: Ruby-core [ruby-trunk - Bug #8149][Open] [patch] iseq: remove duplicate strings for file paths

Posted by tmm1 (Aman Gupta) (Guest)
on 2013-03-22 12:13
(Received via mailing list)
Issue #8149 has been reported by tmm1 (Aman Gupta).

----------------------------------------
Bug #8149: [patch] iseq: remove duplicate strings for file paths
https://bugs.ruby-lang.org/issues/8149

Author: tmm1 (Aman Gupta)
Status: Open
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category:
Target version:
ruby -v: ruby 2.1.0dev (2013-03-22 trunk 39875) [x86_64-darwin12.2.1]


with:
    ./ruby -Ilib -e' GC.start; p 
ObjectSpace.each_object(String).to_a.select{ |s| s =~ 
/rubygems\/defaults/ }.inject(Hash.new 0){|h,s| h[s]+=1; h} '

before:
    {"/Users/test/code/ruby-trunk/lib/rubygems/defaults.rb"=>3}

after:
    {"/Users/test/code/ruby-trunk/lib/rubygems/defaults.rb"=>1}

diff --git a/iseq.c b/iseq.c
index 288d3bf..72c92bd 100644
--- a/iseq.c
+++ b/iseq.c
@@ -188,7 +188,10 @@ iseq_location_setup(rb_iseq_t *iseq, VALUE path, 
VALUE absolute_path, VALUE name
 {
     rb_iseq_location_t *loc = &iseq->location;
     loc->path = path;
-    loc->absolute_path = absolute_path;
+    if (RTEST(absolute_path) && rb_str_cmp(path, absolute_path) == 0)
+        loc->absolute_path = path;
+    else
+        loc->absolute_path = absolute_path;
     loc->label = loc->base_label = name;
     loc->first_lineno = first_lineno;
     return loc;
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.