From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: spew@80x24.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id E1BAB200FF; Wed, 16 Sep 2015 09:26:12 +0000 (UTC) Date: Wed, 16 Sep 2015 09:26:12 +0000 From: Eric Wong To: spew@80x24.org Subject: Re: [PATCH] pathname: reduce object allocation Message-ID: <20150916-Feature-11375-interdiff@v1> References: <20150916-Feature-11375-tweak@v1> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150916-Feature-11375-tweak@v1> List-Id: diff -u b/ext/pathname/lib/pathname.rb b/ext/pathname/lib/pathname.rb --- b/ext/pathname/lib/pathname.rb +++ b/ext/pathname/lib/pathname.rb @@ -61,7 +61,9 @@ File.dirname(prefix) elsif /#{SEPARATOR_PAT}/o =~ prefix prefix = File.dirname(prefix) - prefix = File.join(prefix, "".freeze) if File.basename(prefix + 'a'.freeze) != 'a'.freeze + if File.basename("#{prefix}a") != 'a'.freeze + prefix = File.join(prefix, "".freeze) + end prefix + relpath else prefix + relpath @@ -98,8 +100,8 @@ while r = chop_basename(pre) pre, base = r case base - when '.'.freeze - when '..'.freeze + when '.' + when '..' names.unshift base else if names[0] == '..'.freeze @@ -130,10 +132,11 @@ # add_trailing_separator(path) -> path def add_trailing_separator(path) # :nodoc: - if File.basename(path + 'a'.freeze) == 'a'.freeze + if File.basename("#{path}a") == 'a'.freeze path else - File.join(path, "".freeze) # xxx: Is File.join is appropriate to add separator? + # xxx: Is File.join is appropriate to add separator? + File.join(path, "".freeze) end end private :add_trailing_separator @@ -369,7 +372,9 @@ break unless r1 = chop_basename(prefix1) prefix1, basename1 = r1 next if basename1 == '.'.freeze - if basename1 == '..'.freeze || basename_list2.empty? || basename_list2.first != '..'.freeze + if basename1 == '..'.freeze || + basename_list2.empty? || + basename_list2.first != '..'.freeze prefix1 = prefix1 + basename1 break end @@ -557,7 +562,9 @@ return to_enum(__method__, ignore_error: ignore_error) unless block_given? require 'find' if @path == '.'.freeze - Find.find(@path, ignore_error: ignore_error) {|f| yield self.class.new(f.sub(%r{\A\./}, ''.freeze)) } + Find.find(@path, ignore_error: ignore_error) do |f| + yield self.class.new(f.sub(%r{\A\./}, ''.freeze)) + end else Find.find(@path, ignore_error: ignore_error) {|f| yield self.class.new(f) } end