ruby-changes:27639
From: kosaki <ko1@a...>
Date: Sun, 10 Mar 2013 14:12:48 +0900 (JST)
Subject: [ruby-changes:27639] kosaki:r39692 (trunk): * tool/gen_ruby_tapset.rb: add tapset generator.
kosaki 2013-03-10 14:12:09 +0900 (Sun, 10 Mar 2013) New Revision: 39692 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=39692 Log: * tool/gen_ruby_tapset.rb: add tapset generator. Added files: trunk/tool/gen_ruby_tapset.rb Modified files: trunk/ChangeLog Index: ChangeLog =================================================================== --- ChangeLog (revision 39691) +++ ChangeLog (revision 39692) @@ -1,3 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Wed Mar 6 00:30:40 2013 KOSAKI Motohiro <kosaki.motohiro@g...> + + * tool/gen_ruby_tapset.rb: add tapset generator. + Wed Mar 6 03:27:43 2013 KOSAKI Motohiro <kosaki.motohiro@g...> * probes.d (symbol-create): change argument name `string' to Index: tool/gen_ruby_tapset.rb =================================================================== --- tool/gen_ruby_tapset.rb (revision 0) +++ tool/gen_ruby_tapset.rb (revision 39692) @@ -0,0 +1,105 @@ https://github.com/ruby/ruby/blob/trunk/tool/gen_ruby_tapset.rb#L1 +#!/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 + Property changes on: tool/gen_ruby_tapset.rb ___________________________________________________________________ Added: svn:executable + * -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/