mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* tool/gen_ruby_tapset.rb: add tapset generator.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39692 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									c38469f453
								
							
						
					
					
						commit
						d71a8880b4
					
				
					 2 changed files with 109 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,7 @@
 | 
			
		|||
Wed Mar  6 00:30:40 2013  KOSAKI Motohiro  <kosaki.motohiro@gmail.com>
 | 
			
		||||
 | 
			
		||||
	* tool/gen_ruby_tapset.rb: add tapset generator.
 | 
			
		||||
 | 
			
		||||
Wed Mar  6 03:27:43 2013  KOSAKI Motohiro  <kosaki.motohiro@gmail.com>
 | 
			
		||||
 | 
			
		||||
	* probes.d (symbol-create): change argument name `string' to
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										105
									
								
								tool/gen_ruby_tapset.rb
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										105
									
								
								tool/gen_ruby_tapset.rb
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,105 @@
 | 
			
		|||
#!/usr/bin/ruby
 | 
			
		||||
# -*- coding: us-ascii -*-
 | 
			
		||||
# usage: ./ruby gen_ruby_tapset.rb --ruby-path=/path/to/ruby probes.d > output
 | 
			
		||||
 | 
			
		||||
require "optparse"
 | 
			
		||||
 | 
			
		||||
def set_argument (argname, nth)
 | 
			
		||||
  # remove C style type info
 | 
			
		||||
  argname.gsub!(/.+ (.+)/, '\1') # e.g. char *hoge -> *hoge
 | 
			
		||||
  argname.gsub!(/^\*/, '')       # e.g. *filename -> filename
 | 
			
		||||
 | 
			
		||||
  "#{argname} = $arg#{nth}"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
ruby_path = "/usr/local/ruby"
 | 
			
		||||
 | 
			
		||||
opts = OptionParser.new
 | 
			
		||||
opts.on("--ruby-path=PATH"){|v| ruby_path = v}
 | 
			
		||||
opts.parse!(ARGV)
 | 
			
		||||
 | 
			
		||||
text = ARGF.read
 | 
			
		||||
 | 
			
		||||
# remove preprocessor directives
 | 
			
		||||
text.gsub!(/^#.*$/, '')
 | 
			
		||||
 | 
			
		||||
# remove provider name
 | 
			
		||||
text.gsub!(/^provider ruby \{/, "")
 | 
			
		||||
text.gsub!(/^\};/, "")
 | 
			
		||||
 | 
			
		||||
# probename()
 | 
			
		||||
text.gsub!(/probe (.+)\( *\);/) {
 | 
			
		||||
  probe_name = $1
 | 
			
		||||
  probe = <<-End
 | 
			
		||||
    probe #{probe_name} = process("ruby").provider("ruby").mark("#{probe_name}")
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
  End
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# probename(arg1)
 | 
			
		||||
text.gsub!(/ *probe (.+)\(([^,)]+)\);/) {
 | 
			
		||||
  probe_name = $1
 | 
			
		||||
  arg1 = $2
 | 
			
		||||
 | 
			
		||||
  probe = <<-End
 | 
			
		||||
    probe #{probe_name} = process("ruby").provider("ruby").mark("#{probe_name}")
 | 
			
		||||
    {
 | 
			
		||||
      #{set_argument(arg1, 1)}
 | 
			
		||||
    }
 | 
			
		||||
  End
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# probename(arg1, arg2)
 | 
			
		||||
text.gsub!(/ *probe (.+)\(([^,)]+),([^,)]+)\);/) {
 | 
			
		||||
  probe_name = $1
 | 
			
		||||
  arg1 = $2
 | 
			
		||||
  arg2 = $3
 | 
			
		||||
 | 
			
		||||
  probe = <<-End
 | 
			
		||||
    probe #{probe_name} = process("#{ruby_path}").provider("ruby").mark("#{probe_name}")
 | 
			
		||||
    {
 | 
			
		||||
      #{set_argument(arg1, 1)}
 | 
			
		||||
      #{set_argument(arg2, 2)}
 | 
			
		||||
    }
 | 
			
		||||
  End
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# probename(arg1, arg2, arg3)
 | 
			
		||||
text.gsub!(/ *probe (.+)\(([^,)]+),([^,)]+),([^,)]+)\);/) {
 | 
			
		||||
  probe_name = $1
 | 
			
		||||
  arg1 = $2
 | 
			
		||||
  arg2 = $3
 | 
			
		||||
  arg3 = $4
 | 
			
		||||
 | 
			
		||||
  probe = <<-End
 | 
			
		||||
    probe #{probe_name} = process("#{ruby_path}").provider("ruby").mark("#{probe_name}")
 | 
			
		||||
    {
 | 
			
		||||
      #{set_argument(arg1, 1)}
 | 
			
		||||
      #{set_argument(arg2, 2)}
 | 
			
		||||
      #{set_argument(arg3, 3)}
 | 
			
		||||
    }
 | 
			
		||||
  End
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# probename(arg1, arg2, arg3, arg4)
 | 
			
		||||
text.gsub!(/ *probe (.+)\(([^,)]+),([^,)]+),([^,)]+),([^,)]+)\);/) {
 | 
			
		||||
  probe_name = $1
 | 
			
		||||
  arg1 = $2
 | 
			
		||||
  arg2 = $3
 | 
			
		||||
  arg3 = $4
 | 
			
		||||
  arg4 = $5
 | 
			
		||||
 | 
			
		||||
  probe = <<-End
 | 
			
		||||
    probe #{probe_name} = process("#{ruby_path}").provider("ruby").mark("#{probe_name}")
 | 
			
		||||
    {
 | 
			
		||||
      #{set_argument(arg1, 1)}
 | 
			
		||||
      #{set_argument(arg2, 2)}
 | 
			
		||||
      #{set_argument(arg3, 3)}
 | 
			
		||||
      #{set_argument(arg4, 4)}
 | 
			
		||||
    }
 | 
			
		||||
  End
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print text
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue