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

ruby-changes:25928

From: nobu <ko1@a...>
Date: Thu, 29 Nov 2012 17:12:40 +0900 (JST)
Subject: [ruby-changes:25928] nobu:r37985 (trunk): tool/vpath.rb

nobu	2012-11-29 17:12:29 +0900 (Thu, 29 Nov 2012)

  New Revision: 37985

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

  Log:
    tool/vpath.rb
    
    * tool/generic_erb.rb, tool/id2token.rb: add --path-separator option
      for mingw where make and built ruby live in different world.
    * tool/vpath.rb: extract from tool/instruction.rb.

  Added files:
    trunk/tool/vpath.rb
  Modified files:
    trunk/ChangeLog
    trunk/common.mk
    trunk/tool/generic_erb.rb
    trunk/tool/id2token.rb
    trunk/tool/instruction.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37984)
+++ ChangeLog	(revision 37985)
@@ -1,3 +1,10 @@
+Thu Nov 29 17:12:26 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* tool/generic_erb.rb, tool/id2token.rb: add --path-separator option
+	  for mingw where make and built ruby live in different world.
+
+	* tool/vpath.rb: extract from tool/instruction.rb.
+
 Thu Nov 29 17:11:06 2012  Nobuyoshi Nakada  <nobu@r...>
 
 	* test/io/wait/test_io_wait.rb (TestIOWait#fill_pipe):
Index: common.mk
===================================================================
--- common.mk	(revision 37984)
+++ common.mk	(revision 37985)
@@ -565,7 +565,7 @@
 
 {$(srcdir)}.y.c:
 	$(ECHO) generating $@
-	$(Q)$(BASERUBY) $(srcdir)/tool/id2token.rb --vpath=$(VPATH) id.h $(SRC_FILE) > parse.tmp.y
+	$(Q)$(BASERUBY) $(srcdir)/tool/id2token.rb --path-separator=$(PATH_SEPARATOR) --vpath=$(VPATH) id.h $(SRC_FILE) > parse.tmp.y
 	$(Q)$(YACC) -d $(YFLAGS) -o y.tab.c parse.tmp.y
 	$(Q)$(RM) parse.tmp.y
 	$(Q)sed -f $(srcdir)/tool/ytab.sed -e "/^#/s!parse\.tmp\.[iy]!parse.y!" -e "/^#/s!y\.tab\.c!$@!" y.tab.c > $@.new
Index: tool/id2token.rb
===================================================================
--- tool/id2token.rb	(revision 37984)
+++ tool/id2token.rb	(revision 37985)
@@ -1,27 +1,22 @@
 #! /usr/bin/ruby -p
+# -*- coding: us-ascii -*-
 BEGIN {
   require 'optparse'
-  vpath = ["."]
+  $:.unshift(File.dirname(__FILE__))
+  require 'vpath'
+  vpath = VPath.new
   header = nil
 
   opt = OptionParser.new do |o|
-    o.on('-v', '--vpath=DIR') {|dirs| vpath.concat dirs.split(File::PATH_SEPARATOR)}
+    vpath.def_options(o)
     header = o.order!(ARGV).shift
   end or abort opt.opt_s
 
   TOKENS = {}
-  vpath.find do |dir|
-    begin
-      h = File.read(File.join(dir, header))
-    rescue Errno::ENOENT
-      nil
-    else
-      h.scan(/^#define\s+RUBY_TOKEN_(\w+)\s+(\d+)/) do |token, id|
-        TOKENS[token] = id
-      end
-      true
-    end
-  end or abort "#{header} not found in #{vpath.inspect}"
+  h = vpath.read(header) rescue abort("#{header} not found in #{vpath.inspect}")
+  h.scan(/^#define\s+RUBY_TOKEN_(\w+)\s+(\d+)/) do |token, id|
+    TOKENS[token] = id
+  end
 
   TOKENS_RE = /\bRUBY_TOKEN\((#{TOKENS.keys.join('|')})\)\s*(?=\s)/
 }
Index: tool/instruction.rb
===================================================================
--- tool/instruction.rb	(revision 37984)
+++ tool/instruction.rb	(revision 37985)
@@ -1,8 +1,11 @@
 #!./miniruby
+# -*- coding: us-ascii -*-
 #
 #
 
 require 'erb'
+$:.unshift(File.dirname(__FILE__))
+require 'vpath'
 
 class RubyVM
   class Instruction
@@ -1256,66 +1259,6 @@
     end
   end
 
-  module VPATH
-    def search(meth, base, *rest)
-      begin
-        meth.call(base, *rest)
-      rescue Errno::ENOENT => error
-        each do |dir|
-          return meth.call(File.join(dir, base), *rest) rescue nil
-        end
-        raise error
-      end
-    end
-
-    def process(*args, &block)
-      search(File.method(__callee__), *args, &block)
-    end
-
-    alias stat process
-    alias lstat process
-
-    def open(*args)
-      f = search(File.method(:open), *args)
-      if block_given?
-        begin
-          yield f
-        ensure
-          f.close unless f.closed?
-        end
-      else
-        f
-      end
-    end
-
-    def read(*args)
-      open(*args) {|f| f.read}
-    end
-
-    def foreach(file, *args, &block)
-      open(file) {|f| f.each(*args, &block)}
-    end
-
-    def self.def_options(opt)
-      vpath = []
-      path_sep = ':'
-
-      opt.on("-I", "--srcdir=DIR", "add a directory to search path") {|dir|
-        vpath |= [dir]
-      }
-      opt.on("-L", "--vpath=PATH LIST", "add directories to search path") {|dirs|
-        vpath |= dirs.split(path_sep)
-      }
-      opt.on("--path-separator=SEP", /\A\W\z/, "separator for vpath") {|sep|
-        path_sep = sep
-      }
-
-      proc {
-        vpath.extend(self) unless vpath.empty?
-      }
-    end
-  end
-
   class SourceCodeGenerator
     Files = { # codes
       'vm.inc'         => VmBodyGenerator,
@@ -1382,16 +1325,17 @@
         opts[:verbose] = v
       }
 
-      vpath = VPATH.def_options(opt)
+      vpath = VPath.new
+      vpath.def_options(opt)
 
       proc {
-        opts[:VPATH] = vpath.call
+        opts[:VPATH] = vpath
         build opts
       }
     end
 
     def self.build opts, vpath = ['./']
-      opts[:VPATH] = vpath.extend(VPATH) unless opts[:VPATH]
+      opts[:VPATH] ||= VPath.new(*vpath)
       self.new InstructionsLoader.new(opts)
     end
   end
Index: tool/vpath.rb
===================================================================
--- tool/vpath.rb	(revision 0)
+++ tool/vpath.rb	(revision 37985)
@@ -0,0 +1,79 @@
+# -*- coding: us-ascii -*-
+
+class VPath
+  attr_accessor :separator
+
+  def initialize(*list)
+    @list = list
+    @additional = []
+    @separator = File::PATH_SEPARATOR
+  end
+
+  def inspect
+    list.inspect
+  end
+
+  def search(meth, base, *rest)
+    begin
+      meth.call(base, *rest)
+    rescue Errno::ENOENT => error
+      list.each do |dir|
+        return meth.call(File.join(dir, base), *rest) rescue nil
+      end
+      raise error
+    end
+  end
+
+  def process(*args, &block)
+    search(File.method(__callee__), *args, &block)
+  end
+
+  alias stat process
+  alias lstat process
+
+  def open(*args)
+    f = search(File.method(:open), *args)
+    if block_given?
+      begin
+        yield f
+      ensure
+        f.close unless f.closed?
+      end
+    else
+      f
+    end
+  end
+
+  def read(*args)
+    open(*args) {|f| f.read}
+  end
+
+  def foreach(file, *args, &block)
+    open(file) {|f| f.each(*args, &block)}
+  end
+
+  def def_options(opt)
+    opt.on("-I", "--srcdir=DIR", "add a directory to search path") {|dir|
+      @additional << dir
+    }
+    opt.on("-L", "--vpath=PATH LIST", "add directories to search path") {|dirs|
+      @additional << [dirs]
+    }
+    opt.on("--path-separator=SEP", /\A\W\z/, "separator for vpath") {|sep|
+      @separator = sep
+    }
+  end
+
+  def list
+    @additional.reject! do |dirs|
+      case dirs
+      when String
+        @list << dirs
+      when Array
+        @list.concat(dirs[0].split(@separator))
+      end
+      true
+    end
+    @list
+  end
+end

Property changes on: tool/vpath.rb
___________________________________________________________________
Added: svn:eol-style
   + LF

Index: tool/generic_erb.rb
===================================================================
--- tool/generic_erb.rb	(revision 37984)
+++ tool/generic_erb.rb	(revision 37985)
@@ -1,19 +1,11 @@
+# -*- coding: us-ascii -*-
 require 'erb'
 require 'optparse'
 require 'fileutils'
+$:.unshift(File.dirname(__FILE__))
+require 'vpath'
 
-vpath = ["."]
-def vpath.open(file, *rest)
-  find do |dir|
-    begin
-      path = File.join(dir, file)
-      return File.open(path, *rest) {|f| yield(f)}
-    rescue Errno::ENOENT
-      nil
-    end
-  end or raise(Errno::ENOENT, file)
-end
-
+vpath = VPath.new
 timestamp = nil
 output = nil
 ifchange = nil
@@ -22,7 +14,7 @@
   o.on('-t', '--timestamp[=PATH]') {|v| timestamp = v || true}
   o.on('-o', '--output=PATH') {|v| output = v}
   o.on('-c', '--[no-]if-change') {|v| ifchange = v}
-  o.on('-v', '--vpath=DIR') {|dirs| vpath.concat dirs.split(File::PATH_SEPARATOR)}
+  vpath.def_options(o)
   o.order!(ARGV)
 end
 template = ARGV.shift or abort opt.to_s

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

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