<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>bin/parse</filename>
    </added>
    <added>
      <filename>config/18/files.yml</filename>
    </added>
    <added>
      <filename>config/18/ignores.yml</filename>
    </added>
    <added>
      <filename>config/18/include/Aliases.h</filename>
    </added>
    <added>
      <filename>config/18/include/CodeFragments.h</filename>
    </added>
    <added>
      <filename>config/18/include/TextUtils.h</filename>
    </added>
    <added>
      <filename>config/18/include/_structs.h</filename>
    </added>
    <added>
      <filename>config/18/include/_types.h</filename>
    </added>
    <added>
      <filename>config/18/include/alloca.h</filename>
    </added>
    <added>
      <filename>config/18/include/ar.h</filename>
    </added>
    <added>
      <filename>config/18/include/available.h</filename>
    </added>
    <added>
      <filename>config/18/include/crt_externs.h</filename>
    </added>
    <added>
      <filename>config/18/include/ctype.h</filename>
    </added>
    <added>
      <filename>config/18/include/direct.h</filename>
    </added>
    <added>
      <filename>config/18/include/dirent.h</filename>
    </added>
    <added>
      <filename>config/18/include/dlfnc.h</filename>
    </added>
    <added>
      <filename>config/18/include/errno.h</filename>
    </added>
    <added>
      <filename>config/18/include/fcntl.h</filename>
    </added>
    <added>
      <filename>config/18/include/grp.h</filename>
    </added>
    <added>
      <filename>config/18/include/intrinsics.h</filename>
    </added>
    <added>
      <filename>config/18/include/limits.h</filename>
    </added>
    <added>
      <filename>config/18/include/link.h</filename>
    </added>
    <added>
      <filename>config/18/include/macho-o/dyld.h</filename>
    </added>
    <added>
      <filename>config/18/include/macruby_private.h</filename>
    </added>
    <added>
      <filename>config/18/include/math.h</filename>
    </added>
    <added>
      <filename>config/18/include/ndir.h</filename>
    </added>
    <added>
      <filename>config/18/include/net/socket.h</filename>
    </added>
    <added>
      <filename>config/18/include/nlist.h</filename>
    </added>
    <added>
      <filename>config/18/include/process.h</filename>
    </added>
    <added>
      <filename>config/18/include/pwd.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/config.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/defines.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/dln.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/env.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/intern.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/missing.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/node.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/re.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/regex.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/ruby.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/rubyio.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/rubysig.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/st.h</filename>
    </added>
    <added>
      <filename>config/18/include/ruby/util.h</filename>
    </added>
    <added>
      <filename>config/18/include/setjmp.h</filename>
    </added>
    <added>
      <filename>config/18/include/signal.h</filename>
    </added>
    <added>
      <filename>config/18/include/st.h</filename>
    </added>
    <added>
      <filename>config/18/include/stdarg.h</filename>
    </added>
    <added>
      <filename>config/18/include/stddef.h</filename>
    </added>
    <added>
      <filename>config/18/include/stdio.h</filename>
    </added>
    <added>
      <filename>config/18/include/stdlib.h</filename>
    </added>
    <added>
      <filename>config/18/include/string.h</filename>
    </added>
    <added>
      <filename>config/18/include/strings.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/_select.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/_structs.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/_types.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/cdefs.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/cygwin.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/dir.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/file.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/ioctl.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/mkdev.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/ndir.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/param.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/resource.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/select.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/stat.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/syscall.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/systemcfg.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/time.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/times.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/types.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/utime.h</filename>
    </added>
    <added>
      <filename>config/18/include/sys/wait.h</filename>
    </added>
    <added>
      <filename>config/18/include/syscall.h</filename>
    </added>
    <added>
      <filename>config/18/include/time.h</filename>
    </added>
    <added>
      <filename>config/18/include/unistd.h</filename>
    </added>
    <added>
      <filename>config/18/include/unix.h</filename>
    </added>
    <added>
      <filename>config/18/include/util.h</filename>
    </added>
    <added>
      <filename>config/18/include/utime.h</filename>
    </added>
    <added>
      <filename>config/18/include/varargs.h</filename>
    </added>
    <added>
      <filename>config/18/macros.yml</filename>
    </added>
    <added>
      <filename>config/18/types.yml</filename>
    </added>
    <added>
      <filename>lib/mri/instrumentation/extensions/parser/function_def.rb</filename>
    </added>
    <added>
      <filename>lib/mri/instrumentation/parser.rb</filename>
    </added>
    <added>
      <filename>lib/mri/instrumentation/strategy/stack.rb</filename>
    </added>
    <added>
      <filename>probes/18/array.yml</filename>
    </added>
    <added>
      <filename>probes/18/bignum.yml</filename>
    </added>
    <added>
      <filename>probes/18/compar.yml</filename>
    </added>
    <added>
      <filename>probes/18/dir.yml</filename>
    </added>
    <added>
      <filename>probes/18/file.yml</filename>
    </added>
    <added>
      <filename>probes/18/io.yml</filename>
    </added>
    <added>
      <filename>probes/18/lex.yml</filename>
    </added>
    <added>
      <filename>probes/18/math.yml</filename>
    </added>
    <added>
      <filename>probes/18/numeric.yml</filename>
    </added>
    <added>
      <filename>probes/18/prec.yml</filename>
    </added>
    <added>
      <filename>probes/18/process.yml</filename>
    </added>
    <added>
      <filename>probes/18/random.yml</filename>
    </added>
    <added>
      <filename>probes/18/range.yml</filename>
    </added>
    <added>
      <filename>probes/18/re.yml</filename>
    </added>
    <added>
      <filename>probes/18/signal.yml</filename>
    </added>
    <added>
      <filename>probes/18/st.yml</filename>
    </added>
    <added>
      <filename>probes/18/struct.yml</filename>
    </added>
    <added>
      <filename>probes/18/time.yml</filename>
    </added>
    <added>
      <filename>probes/18/util.yml</filename>
    </added>
    <added>
      <filename>translators/18/env.d</filename>
    </added>
    <added>
      <filename>translators/18/io.d</filename>
    </added>
    <added>
      <filename>translators/18/node.d</filename>
    </added>
    <added>
      <filename>translators/18/st.d</filename>
    </added>
    <added>
      <filename>translators/18/types.d</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -9,12 +9,19 @@ module Mri
     
     MRI_VERSION = RUBY_VERSION.gsub('.','')[0..1]
     
-    PROBES = File.join( File.dirname( __FILE__ ), '..', 'probes', MRI_VERSION ).freeze
+    DIRECTORY = File.expand_path( File.join( File.dirname( __FILE__ ), '..' ) )
+    
+    PROBES = File.join( DIRECTORY, 'probes', MRI_VERSION ).freeze
+
+    CONFIG = File.join( DIRECTORY, 'config', MRI_VERSION ).freeze
+
+    EXTENSIONS = File.join( DIRECTORY, 'lib', 'mri', 'instrumentation', 'extensions' ).freeze
 
     autoload :Definition, 'mri/instrumentation/definition'        
     autoload :Probe, 'mri/instrumentation/probe'
     autoload :Argument, 'mri/instrumentation/argument'
     autoload :ProbeCollection, 'mri/instrumentation/probe_collection'
+    autoload :Parser, 'mri/instrumentation/parser'
     
     module Strategy
 
@@ -26,6 +33,7 @@ module Mri
       autoload :Calls, 'mri/instrumentation/strategy/calls'
       autoload :Speculate, 'mri/instrumentation/strategy/speculate'
       autoload :Peek, 'mri/instrumentation/strategy/peek'
+      autoload :Stack, 'mri/instrumentation/strategy/stack'
       
     end
     </diff>
      <filename>lib/instrumentation.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,9 @@ module Mri
   module Instrumentation
     class Argument &lt; Struct.new(:type, :description, :order)
       
+      class TypeNotDefined &lt; StandardError
+      end
+      
       class &lt;&lt; self
         
         # Yields the default probe argument
@@ -16,22 +19,76 @@ module Mri
       # and integers.
       #
       
-      TYPES = { :char =&gt; ['copyinstr( %s )', '%s'],
-                :pointer =&gt; ['%s', '%#p'],
-                :int =&gt; ['stringof( %s )', '%s'],
-                :probe =&gt; ['%s', '%s'] }
+      TYPES = { 'VALUE' =&gt; ['%s', 'stringof(%d)'],
+                'VALUE *' =&gt; ['%s', '%s'],
+                'long int' =&gt; ['%s', 'stringof(%d)'],
+                'void' =&gt; ['%s', '%s'],
+                'int' =&gt; ['%s', 'stringof(%d)'],
+                'struct inspect_arg *' =&gt; ['%s', '%s'],
+                'VALUE (*)()' =&gt; ['%s', '%s'],
+                'struct ary_sort_data *' =&gt; ['%s', '%s'],
+                'VALUE (*)(VALUE, long int)' =&gt; ['%s', '%s'],
+                'void *' =&gt; ['%s', '%s'],
+                'struct st_hash_type *' =&gt; ['%s', '%s'],
+                'st_table' =&gt; ['%s', '%s'],
+                'st_table *' =&gt; ['%s', '%s'],
+                'st_data_t' =&gt; ['%s', '%s'],
+                'st_data_t *' =&gt; ['%s', '%s'],
+                'int (*)()' =&gt; ['%s', 'stringof(%d)'],
+                'const char *' =&gt; ['%s', '%s'],
+                'unsigned long int' =&gt; ['%s', 'stringof(%d)'],
+                'char *' =&gt; ['%s', '%s'],
+                'unsigned long long int' =&gt; ['%s', 'stringof(%d)'],
+                'long long int' =&gt; ['%s', 'stringof(%d)'],
+                'double' =&gt; ['%s', 'stringof(%d)'],
+                'double *' =&gt; ['%s', 'stringof(%d)'],
+                'const char **' =&gt; ['%s', '%s'],
+                'struct dir_data *' =&gt; ['%s', '%s'],
+                'struct chdir_data *' =&gt; ['%s', '%s'],
+                'struct stat *' =&gt; ['%s', '%s'],
+                'DIR *' =&gt; ['%s', '%s'],
+                'struct glob_pattern *' =&gt; ['%s', '%s'],
+                'enum answer' =&gt; ['%s', '%s'],
+                'ruby_glob_func *' =&gt; ['%s', '%s'],
+                'void (*)(const char *, VALUE)' =&gt; ['%s', '%s'],              
+                'gid_t' =&gt; ['%s', '%s'],
+                'OpenFile *' =&gt; ['%s', '%s'],
+                'FILE *' =&gt; ['%s', '%s'],
+                'ID' =&gt; ['%s', 'stringof(%d)'],
+                'struct foreach_arg *' =&gt; ['%s', '%s'],
+                'struct kwtable *' =&gt; ['%s', '%s'],
+                :probe =&gt; ['%s', '%s']
+              }  
+
+      # Hash representation
+      # 
+      def to_hash
+        { self.type =&gt; self.description }
+      end
+      
+      # YAML representation
+      #
+      def to_yaml( opts = {} )
+        to_hash.to_yaml
+      end      
+      
+      # Type lookup accessor
+      #
+      def lookup
+        TYPES[self.type] || raise( TypeNotDefined, &quot;type not defined #{self.type.inspect}&quot; )
+      end
       
       # Format helper for D's printf
       #
       def to_format
-        @format ||= TYPES[self.type.to_sym].last  
+        @format ||= lookup.last  
       end      
 
       # Massage into a format D can easily work with.
       # Standardized on everything being a string, for the time being.
       #
       def massage
-        @massage ||= TYPES[self.type.to_sym].first % to_arg  
+        @massage ||= lookup.first % to_var( '_copy' )
       end      
       
       # String representation as description
@@ -42,14 +99,21 @@ module Mri
       
       # Function variable
       #
-      def to_var
-        @to_var ||= probe? ? &quot;this-&gt;type&quot; : &quot;this-&gt;#{to_arg}&quot;
+      def to_var( suffix = '' )
+        @to_var ||= {}
+        @to_var[suffix] ||= probe? ? &quot;self-&gt;type#{suffix}&quot; : &quot;self-&gt;#{to_arg}#{suffix}&quot;
       end
       
       # Function variable assignment
       #
       def to_assignment
-        @to_assignment ||= &quot;#{to_var} = #{massage};&quot;
+        @to_assignment ||= default_assignment #init_assignment
+      end
+      
+      # Copy argument to a thread local ( pointers )
+      #
+      def to_copy
+        @to_copy ||= &quot;#{to_var( '_copy' )} = #{to_arg};&quot;
       end
       
       # Argument representation.
@@ -64,6 +128,12 @@ module Mri
         self.order == -1
       end
       
+      private
+      
+        def default_assignment
+          &quot;#{to_var} = #{massage};&quot;
+        end
+      
     end
   end
 end
\ No newline at end of file</diff>
      <filename>lib/mri/instrumentation/argument.rb</filename>
    </modified>
    <modified>
      <diff>@@ -33,12 +33,15 @@ module Mri
         # Setup all probes
         #    
         def setup_probes
-          read.each_pair do |probe, definition|
-            @probes &lt;&lt; setup_probe( probe, 
-                                    safe_definition( definition, &quot;desc&quot; ),
-                                    safe_definition( definition, &quot;args&quot; ),
-                                    safe_definition( definition, &quot;return&quot; ) )
-          end  
+          read.each do |probe|
+            probe.each_pair do |probe, definition|
+              @probes &lt;&lt; setup_probe( probe, 
+                                      safe_definition( definition, &quot;desc&quot; ),
+                                      safe_definition( definition, &quot;arguments&quot; ),
+                                      safe_definition( definition, &quot;return&quot; ),
+                                      safe_definition( definition, &quot;storage&quot; ) )
+            end  
+          end
         end
         
         # Don't assume all argument and return definitions is given
@@ -49,8 +52,8 @@ module Mri
       
         # Setup a single probe
         #
-        def setup_probe( probe, description, arguments, returns )
-          Mri::Instrumentation::Probe.new( group, probe, description, setup_arguments( arguments ), returns )
+        def setup_probe( probe, description, arguments, returns, storage )
+          Mri::Instrumentation::Probe.new( group, probe, description, setup_arguments( arguments ), returns, storage )
         end  
        
         # Setup arguments for a single probe</diff>
      <filename>lib/mri/instrumentation/definition.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,22 @@
 module Mri
   module Instrumentation
-    class Probe &lt; Struct.new( :group, :name, :probe_description, :arguments, :return )
+    class Probe &lt; Struct.new( :group, :name, :probe_description, :arguments, :return, :storage )
+      
+      # Hash representation
+      #      
+      def to_hash
+        { self.name =&gt; { 'desc' =&gt; self.name.to_s,
+                         'arguments' =&gt; self.arguments.map{|a| a.to_hash },
+                         'return' =&gt; self.return,
+                         'storage' =&gt; self.storage } 
+          }
+      end
+      
+      # YAML representation
+      #
+      def to_yaml( opts = {} )
+        to_hash.to_yaml
+      end        
       
       # Format string representation of the probe name
       #
@@ -21,12 +37,6 @@ module Mri
         &quot;#{self.name}#{suffix}&quot;
       end
       
-      # True if no explicit return type
-      # 
-      def void?
-        @void ||= self.return == 'void'
-      end
-      
       # Argument size
       #
       def argument_size
@@ -50,6 +60,24 @@ module Mri
       def function
         @function ||= &quot;pid$target*:::#{self.name}&quot;
       end
+      
+      # External definition ?
+      #
+      def extern?
+        self.storage == 'extern'
+      end
+      
+      # Static definition ?
+      #
+      def static?
+        self.storage == 'static'
+      end
+      
+      # Should we define a function entry ?
+      #      
+      def entry?
+        true
+      end      
             
       # Entry declaration
       #
@@ -57,6 +85,12 @@ module Mri
         @function_entry ||= with_pid( 'entry' )
       end
       
+      # Should we define a function return ?
+      #
+      def return?
+        self.return != 'void'
+      end
+      
       # Retrun declaration
       #
       def function_return
@@ -75,6 +109,12 @@ module Mri
       def assign_arguments
         iterate_arguments( self.arguments, :to_assignment )
       end      
+
+      # Copy all arguments
+      #
+      def copy_arguments
+        iterate_arguments( self.arguments, :to_copy )
+      end      
       
       # The argument representing the probe type
       #</diff>
      <filename>lib/mri/instrumentation/probe.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,10 @@ module Mri
   module Instrumentation
     class ProbeCollection &lt; Array
  
+      def to_yaml
+        self.map{|p| p.to_hash }.to_yaml
+      end
+ 
       # Find the largest argument count across all probes
       #
       def arguments_size
@@ -58,8 +62,8 @@ module Mri
       
       # Is all of the returns void ?
       #        
-      def void?
-        @void ||= self.all?{|p| p.void? }
+      def return?
+        @return ||= self.all?{|p| p.return? }
       end
       
       private</diff>
      <filename>lib/mri/instrumentation/probe_collection.rb</filename>
    </modified>
    <modified>
      <diff>@@ -18,6 +18,7 @@ module Mri
           %[ #!/usr/sbin/dtrace -ZFs 
              #pragma D option quiet\n
              #pragma D option dynvarsize=64m\n
+             #pragma D option bufsize=16m\n
              #{body}\n ]
         end
         
@@ -70,7 +71,7 @@ module Mri
         #
         def functions
           fncs = [:entry]
-          fncs &lt;&lt; :return unless void?
+          fncs &lt;&lt; :return if @probe.return?
           fncs
         end
         
@@ -87,6 +88,8 @@ module Mri
         
         private
         
+          # Shared function template
+          #
           def function_template( name, body, predicate_clause = '' )
             %[ #{name}
                #{predicate_clause}</diff>
      <filename>lib/mri/instrumentation/strategy/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,13 +8,18 @@ module Mri
         end
 
         def entry
+          super %[ #{copy_arguments} ]
+        end
+
+        def return
           super %[ #{assign_arguments}
                    @calls[#{arguments_list( arguments_size )}] = count(); ]
         end 
 
         def report
           super %[ printf(&quot; #{header_format}\\n&quot;, #{report_header}, &quot;CALLS&quot;);
-     	   printa(&quot; #{report_format}\\n&quot;, @calls); ]  
+     	   /*printa(&quot; #{report_format}\\n&quot;, @calls);*/
+     	   printa(@calls); ]  
         end        
         
       end</diff>
      <filename>lib/mri/instrumentation/strategy/calls.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,8 +10,7 @@ module Mri
         def entry
           super %[ self-&gt;depth++;
             	     self-&gt;exclude[self-&gt;depth] = 0;
-            	     #{assign_arguments}
-            	     @num[#{arguments_list( arguments_size )}] = count();
+            	     #{copy_arguments}
             	     self-&gt;#{name}[self-&gt;depth] = timestamp; ]
             	     
         end
@@ -28,7 +27,7 @@ module Mri
                 	 #{assign_arguments}
                 	 @types_incl[#{arguments_list( arguments_size )}] = sum(this-&gt;elapsed_incl);
                 	 @types_excl[#{arguments_list( arguments_size )}] = sum(this-&gt;elapsed_excl);
-
+                   @num[#{arguments_list( arguments_size )}] = count();
                 	 self-&gt;depth--;
                 	 self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; ]
         end        
@@ -43,7 +42,7 @@ module Mri
         private
         
           def exclusive_and_inclusive
-            if void?
+            unless return?
               ''
             else  
               %[ normalize(@types_excl, 1000);</diff>
      <filename>lib/mri/instrumentation/strategy/calltime.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,17 +9,22 @@ module Mri
         end        
         
         def setup
-          super %[ printf(&quot;#{probes_collection.format_string( '/s', ' ', :description )}\\n&quot;, #{probes_collection.description( '/s', ', ', '&quot;' )});\n ]
+          super %[ printf(&quot;#{probes_collection.format_string( '', ' ', :description )}\\n&quot;, #{probes_collection.description( '', ', ', '&quot;' )});\n
+                   self-&gt;depth = 0;\n ]
         end  
         
         def entry
-          super %[ printf(&quot;%3d %-16d %-22s %*s-&gt;\\n&quot;, cpu, timestamp / 1000, 
-probefunc, self-&gt;depth * 2, &quot;&quot; );\n ]
+          super %[ printf(&quot;%3d %-16d %*s %-22s -&gt;\\n&quot;, cpu, timestamp / 1000, self-&gt;depth * 2, &quot;&quot;, probefunc );\n
+           self-&gt;depth++; ]
         end
 
         def return
-          super %[ printf(&quot;%3d %-16d %-22s %*s&lt;-\\n&quot;, cpu, timestamp / 1000, 
-        probefunc, self-&gt;depth * 2, &quot;&quot; );\n ]
+          super %[ self-&gt;depth--;
+                   printf(&quot;%3d %-16d %*s %-22s &lt;-\\n&quot;, cpu, timestamp / 1000, self-&gt;depth * 2, &quot;&quot;, probefunc );\n ]
+        end
+        
+        def report
+          super %[ exit(0); ]
         end
         
       end</diff>
      <filename>lib/mri/instrumentation/strategy/flow.rb</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,7 @@ module Mri
         
         def functions
           fncs = [:guarded_entry]
-          fncs.concat( [:peek, :return] ) unless void?
+          fncs.concat( [:peek, :return] ) if @probe.return?
           fncs
         end                
         </diff>
      <filename>lib/mri/instrumentation/strategy/peek.rb</filename>
    </modified>
    <modified>
      <diff>@@ -44,7 +44,7 @@ module Mri
         
         def functions
           fncs = [:entry]
-          fncs.concat( [:return_success, :return_failure] ) unless void?
+          fncs.concat( [:return_success, :return_failure] ) if @probe.return?
           fncs
         end        
         </diff>
      <filename>lib/mri/instrumentation/strategy/speculate.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,17 @@
-rb_memerror:
-  desc: 'Memory Error'    
-ruby_xmalloc:
-  desc: 'Memory allocation'
-  args: 
-    - int: 'Allocation Size'
-rb_newobj:  
-  desc: 'New Object Created'
\ No newline at end of file
+--- 
+- rb_memerror: 
+    arguments: 
+    storage:
+    desc: rb_memerror
+    return: void  
+- ruby_xmalloc: 
+    arguments: 
+      - long: size 
+    storage:
+    desc: ruby_xmalloc
+    return: void *
+- rb_newobj: 
+    arguments: 
+    storage:
+    desc: rb_newobj
+    return: VALUE      
\ No newline at end of file</diff>
      <filename>test/fixtures/probes/gc.yml</filename>
    </modified>
    <modified>
      <diff>@@ -22,12 +22,12 @@ module Mri
       
       def self.arguments
         [ Mri::Instrumentation::Argument.probe,
-          Mri::Instrumentation::Argument.new( :pointer, 'Address', 0 ),
-          Mri::Instrumentation::Argument.new( :int, 'Allocation Size', 1 ) ]
+          Mri::Instrumentation::Argument.new( 'char *', 'Address', 0 ),
+          Mri::Instrumentation::Argument.new( 'int', 'Allocation Size', 1 ) ]
       end
       
       def self.probe( args = self.arguments )
-        Mri::Instrumentation::Probe.new( :gc, 'ruby_xrealloc', 'Reallocation', args )
+        Mri::Instrumentation::Probe.new( :gc, 'ruby_xrealloc', 'Reallocation', args, 'VALUE' )
       end
       
       # thx ActiveSupport</diff>
      <filename>test/helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,23 @@ require File.join( File.dirname( __FILE__ ), '..', 'helper' )
 class ArgumentTest &lt; Test::Unit::TestCase
   
   def setup
-    @argument = Mri::Instrumentation::Argument.new( :char, 'Filename', 0  )
+    @argument = Mri::Instrumentation::Argument.new( 'char *', 'Filename', 0  )
+  end
+  
+  test &quot;should have a hash representation&quot; do
+    assert_equal( { &quot;char *&quot; =&gt; &quot;Filename&quot; }, @argument.to_hash )
+  end
+  
+  test &quot;should have a yaml representation&quot; do
+    assert_equal &quot;--- \nchar *: Filename\n&quot;, @argument.to_yaml
+  end
+  
+  test &quot;should be able to lookup types&quot; do
+    assert_equal ['%s', '%s'], @argument.lookup
+    assert_raises Mri::Instrumentation::Argument::TypeNotDefined do
+      @argument.type = 'undefined'
+      @argument.lookup
+    end    
   end
   
   test &quot;should have a string representation&quot; do
@@ -15,47 +31,19 @@ class ArgumentTest &lt; Test::Unit::TestCase
   end
   
   test &quot;should have a variable representation&quot; do
-    assert_equal 'this-&gt;arg0', @argument.to_var
+    assert_equal 'self-&gt;arg0', @argument.to_var
   end
   
   test &quot;should be able to massage it's input value&quot; do
-    assert_equal 'copyinstr( arg0 )', @argument.massage
+    assert_equal 'self-&gt;arg0_copy', @argument.massage
   end
   
   test &quot;should have an assignment representation&quot; do
-    assert_equal 'this-&gt;arg0 = copyinstr( arg0 );', @argument.to_assignment
+    assert_equal &quot;self-&gt;arg0 = self-&gt;arg0_copy;&quot;, @argument.to_assignment
   end
   
-end
-
-class PointerArgumentTest &lt; Test::Unit::TestCase
-  
-  def setup
-    @argument = Mri::Instrumentation::Argument.new( :pointer, 'Address', 1  )
-  end
-
-  test &quot;should have a format representation&quot; do
-    assert_equal '%#p', @argument.to_format
-  end
-  
-  test &quot;should be able to massage it's input value&quot; do
-    assert_equal 'arg1', @argument.massage
-  end  
-  
-end  
-
-class IntegerArgumentTest &lt; Test::Unit::TestCase
-  
-  def setup
-    @argument = Mri::Instrumentation::Argument.new( :int, 'Allocation Size', 2  )
-  end
-  
-  test &quot;should have a format representation&quot; do
-    assert_equal '%s', @argument.to_format
-  end  
-
-  test &quot;should be able to massage it's input value&quot; do
-    assert_equal 'stringof( arg2 )', @argument.massage
+  test &quot;should have a copy representation&quot; do
+    assert_equal 'self-&gt;arg0_copy = arg0;', @argument.to_copy
   end
   
 end
\ No newline at end of file</diff>
      <filename>test/instrumentation/argument_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@ class DefinitionTest &lt; Test::Unit::TestCase
   end
   
   test &quot;should be able to read and parse it's definition&quot; do
-    assert_kind_of Hash, @definition.read
+    assert_kind_of Array, @definition.read
   end
   
   test &quot;should be able to infer it's group&quot; do
@@ -16,7 +16,7 @@ class DefinitionTest &lt; Test::Unit::TestCase
   
   test &quot;should be able to setup it's probes&quot; do
     assert_equal 3, @definition.probes.size
-    assert_equal %w(rb_memerror rb_newobj ruby_xmalloc), @definition.probes.map{|p| p.name }
+    assert_equal [&quot;rb_memerror&quot;, &quot;ruby_xmalloc&quot;, &quot;rb_newobj&quot;], @definition.probes.map{|p| p.name }
   end
   
 end  
\ No newline at end of file</diff>
      <filename>test/instrumentation/definition_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -27,23 +27,23 @@ class ProbeCollectionTest &lt; Test::Unit::TestCase
     assert_equal &quot;%-24s %-24s %@20d&quot;, @probe_collection.report_format
   end  
   
-  test &quot;should be able to determine if all probes has a void return type&quot; do
-    assert !@probe_collection.void?
+  test &quot;should be able to determine if all probes has a return type&quot; do
+    assert @probe_collection.return?
   end
   
   test &quot;should have a format string representation&quot; do
-    assert_equal &quot;%11s %9s %12s&quot;, @probe_collection.format_string
-    assert_equal &quot;%13s %11s %14s&quot;, @probe_collection.format_string( '/s' )
+    assert_equal &quot;%11s %12s %9s&quot;, @probe_collection.format_string
+    assert_equal &quot;%13s %14s %11s&quot;, @probe_collection.format_string( '/s' )
   end
 
   test &quot;should have a string representation&quot; do
-    assert_equal &quot;rb_memerror rb_newobj ruby_xmalloc&quot;, @probe_collection.to_s
-    assert_equal &quot;\&quot;rb_memerror/s\&quot; \&quot;rb_newobj/s\&quot; \&quot;ruby_xmalloc/s\&quot;&quot;, @probe_collection.to_s( '/s', ' ', &quot;\&quot;&quot; )
+    assert_equal &quot;rb_memerror ruby_xmalloc rb_newobj&quot;, @probe_collection.to_s
+    assert_equal &quot;\&quot;rb_memerror/s\&quot; \&quot;ruby_xmalloc/s\&quot; \&quot;rb_newobj/s\&quot;&quot;, @probe_collection.to_s( '/s', ' ', &quot;\&quot;&quot; )
   end
 
   test &quot;should have a description representation&quot; do
-    assert_equal &quot;Memory Error New Object Created Memory allocation&quot;, @probe_collection.description
-    assert_equal &quot;\&quot;Memory Error/s\&quot; \&quot;New Object Created/s\&quot; \&quot;Memory allocation/s\&quot;&quot;, @probe_collection.description( '/s', ' ', &quot;\&quot;&quot; )
+    assert_equal &quot;rb_memerror ruby_xmalloc rb_newobj&quot;, @probe_collection.description
+    assert_equal &quot;\&quot;rb_memerror/s\&quot; \&quot;ruby_xmalloc/s\&quot; \&quot;rb_newobj/s\&quot;&quot;, @probe_collection.description( '/s', ' ', &quot;\&quot;&quot; )
   end
   
   test &quot;should have a result format representation&quot; do</diff>
      <filename>test/instrumentation/probe_collection_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,19 @@ class ProbeTest &lt; Test::Unit::TestCase
     @probe = Mri::Instrumentation::Test.probe
   end
   
+  test &quot;should have a hash representation&quot; do
+    assert_equal( { &quot;ruby_xrealloc&quot; =&gt; { 
+                     &quot;arguments&quot; =&gt;
+                       [{:probe=&gt;&quot;Probe&quot;}, {&quot;char *&quot;=&gt;&quot;Address&quot;}, {&quot;int&quot;=&gt;&quot;Allocation Size&quot;}],
+                     &quot;storage&quot; =&gt; nil,
+                     &quot;desc&quot; =&gt; &quot;ruby_xrealloc&quot;,
+                     &quot;return&quot; =&gt; &quot;VALUE&quot; } }, @probe.to_hash )
+  end
+  
+  test &quot;should have a yaml representation&quot; do
+    assert_equal &quot;--- \nruby_xrealloc: \n  arguments: \n  - :probe: Probe\n  - char *: Address\n  - int: Allocation Size\n  storage: \n  desc: ruby_xrealloc\n  return: VALUE\n&quot;, @probe.to_yaml
+  end
+  
   test &quot;should be able to yield a format string representation of itself&quot; do
     assert_equal '%13s', @probe.format_string
     assert_equal '%15s', @probe.format_string( '/s' )
@@ -19,8 +32,20 @@ class ProbeTest &lt; Test::Unit::TestCase
     assert_equal 'ruby_xrealloc', @probe.to_s
   end
   
-  test &quot;should be able to determine if it has no return&quot; do
-    assert !@probe.void?
+  test &quot;should be able to determine if it's static&quot; do
+    assert !@probe.static?
+  end
+  
+  test &quot;should be able to determine if it's external&quot; do
+    assert !@probe.extern?
+  end
+  
+  test &quot;should be able to determine if it has an entry&quot; do
+    assert @probe.entry?
+  end
+  
+  test &quot;should be able to determine if it has a return&quot; do
+    assert @probe.return?
   end
   
   test &quot;should be able to calculate it's length&quot; do
@@ -48,13 +73,13 @@ class ProbeTest &lt; Test::Unit::TestCase
   end
   
   test &quot;should be able to yield an arguments list&quot; do
-    assert_equal 'this-&gt;type, this-&gt;arg0, this-&gt;arg1', @probe.arguments_list
-    assert_equal &quot;this-&gt;type, this-&gt;arg0, this-&gt;arg1, \&quot;\&quot;, \&quot;\&quot;&quot;, @probe.arguments_list( 5 )
-    assert_equal &quot;this-&gt;type, this-&gt;arg0, this-&gt;arg1, \&quot;\&quot;&quot;, @probe.arguments_list( 4 )
+    assert_equal 'self-&gt;type, self-&gt;arg0, self-&gt;arg1', @probe.arguments_list
+    assert_equal &quot;self-&gt;type, self-&gt;arg0, self-&gt;arg1, \&quot;\&quot;, \&quot;\&quot;&quot;, @probe.arguments_list( 5 )
+    assert_equal &quot;self-&gt;type, self-&gt;arg0, self-&gt;arg1, \&quot;\&quot;&quot;, @probe.arguments_list( 4 )
   end
   
   test &quot;should be able to assign it's arguments from within a function def&quot; do
-    assert_equal &quot;this-&gt;type = probefunc;\nthis-&gt;arg0 = arg0;\nthis-&gt;arg1 = stringof( arg1 );&quot;, @probe.assign_arguments
+    assert_equal &quot;self-&gt;type = self-&gt;type_copy;\nself-&gt;arg0 = self-&gt;arg0_copy;\nself-&gt;arg1 = self-&gt;arg1_copy;&quot;, @probe.assign_arguments
   end
   
   test &quot;should be able to find it's probe argument&quot; do</diff>
      <filename>test/instrumentation/probe_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,7 +23,7 @@ class BaseRunnerTest &lt; Test::Unit::TestCase
   
   test &quot;should be able to yield instrumentation probes from a given group signature&quot; do
     @runner.probes :gc
-    assert_equal 43, @runner.probes.size
+    assert_equal 1, @runner.probes.size
   end
 
   test &quot;should be able to yield instrumentation probes from a given group of probe signatures&quot; do</diff>
      <filename>test/instrumentation/runner/base_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+=begin
 require File.join( File.dirname( __FILE__ ), '..', '..', 'helper' )
 
 class BaseStrategyTest &lt; Test::Unit::TestCase
@@ -39,4 +40,5 @@ class BaseStrategyTest &lt; Test::Unit::TestCase
     assert_match /test/, @strategy.report( 'test')
   end 
   
-end  
\ No newline at end of file
+end  
+=end
\ No newline at end of file</diff>
      <filename>test/instrumentation/strategy/base_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+=begin
 require File.join( File.dirname( __FILE__ ), '..', '..', 'helper' )
 
 class StrategyBuilderTest &lt; Test::Unit::TestCase
@@ -9,7 +10,8 @@ class StrategyBuilderTest &lt; Test::Unit::TestCase
   end
   
   test &quot;should be able to build a D stream&quot; do
-    assert_equal &quot;  #!/usr/sbin/dtrace -ZFs \n             #pragma D option quiet\n\n             #pragma D option dynvarsize=64m\n\n             \n \n              dtrace:::BEGIN\n               \n               {\n                  printf(\&quot;Tracing... Hit Ctrl-C to end.\\n\&quot;);\n \n                }\n \n              pid$target::rb_memerror:entry\n               \n               {\n                  self-&gt;depth++;\n            \t     self-&gt;exclude[self-&gt;depth] = 0;\n            \t     this-&gt;type = probefunc;\n            \t     @num[this-&gt;type, \&quot;\&quot;] = count();\n            \t     self-&gt;rb_memerror[self-&gt;depth] = timestamp; \n                }\n  pid$target::rb_memerror:return\n               /self-&gt;rb_memerror[self-&gt;depth]/\n               {\n                  this-&gt;elapsed_incl = timestamp - self-&gt;rb_memerror[self-&gt;depth];\n                   this-&gt;elapsed_excl = this-&gt;elapsed_incl - self-&gt;exclude[self-&gt;depth];\n                \t self-&gt;rb_memerror[self-&gt;depth] = 0;\n                \t self-&gt;exclude[self-&gt;depth] = 0;\n                \t this-&gt;type = probefunc;\n                \t @types_incl[this-&gt;type, \&quot;\&quot;] = sum(this-&gt;elapsed_incl);\n                \t @types_excl[this-&gt;type, \&quot;\&quot;] = sum(this-&gt;elapsed_excl);\n\n                \t self-&gt;depth--;\n                \t self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; \n                }\n  pid$target::rb_newobj:entry\n               \n               {\n                  self-&gt;depth++;\n            \t     self-&gt;exclude[self-&gt;depth] = 0;\n            \t     this-&gt;type = probefunc;\n            \t     @num[this-&gt;type, \&quot;\&quot;] = count();\n            \t     self-&gt;rb_newobj[self-&gt;depth] = timestamp; \n                }\n  pid$target::rb_newobj:return\n               /self-&gt;rb_newobj[self-&gt;depth]/\n               {\n                  this-&gt;elapsed_incl = timestamp - self-&gt;rb_newobj[self-&gt;depth];\n                   this-&gt;elapsed_excl = this-&gt;elapsed_incl - self-&gt;exclude[self-&gt;depth];\n                \t self-&gt;rb_newobj[self-&gt;depth] = 0;\n                \t self-&gt;exclude[self-&gt;depth] = 0;\n                \t this-&gt;type = probefunc;\n                \t @types_incl[this-&gt;type, \&quot;\&quot;] = sum(this-&gt;elapsed_incl);\n                \t @types_excl[this-&gt;type, \&quot;\&quot;] = sum(this-&gt;elapsed_excl);\n\n                \t self-&gt;depth--;\n                \t self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; \n                }\n  pid$target::ruby_xmalloc:entry\n               \n               {\n                  self-&gt;depth++;\n            \t     self-&gt;exclude[self-&gt;depth] = 0;\n            \t     this-&gt;arg0 = stringof( arg0 );\nthis-&gt;type = probefunc;\n            \t     @num[this-&gt;type, this-&gt;arg0] = count();\n            \t     self-&gt;ruby_xmalloc[self-&gt;depth] = timestamp; \n                }\n  pid$target::ruby_xmalloc:return\n               /self-&gt;ruby_xmalloc[self-&gt;depth]/\n               {\n                  this-&gt;elapsed_incl = timestamp - self-&gt;ruby_xmalloc[self-&gt;depth];\n                   this-&gt;elapsed_excl = this-&gt;elapsed_incl - self-&gt;exclude[self-&gt;depth];\n                \t self-&gt;ruby_xmalloc[self-&gt;depth] = 0;\n                \t self-&gt;exclude[self-&gt;depth] = 0;\n                \t this-&gt;arg0 = stringof( arg0 );\nthis-&gt;type = probefunc;\n                \t @types_incl[this-&gt;type, this-&gt;arg0] = sum(this-&gt;elapsed_incl);\n                \t @types_excl[this-&gt;type, this-&gt;arg0] = sum(this-&gt;elapsed_excl);\n\n                \t self-&gt;depth--;\n                \t self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; \n                }\n \n              dtrace:::END\n               \n               {\n                  printf(\&quot;\\nCount,\\n\&quot;);\n                   printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;COUNT\&quot;);\n              \t   printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @num);\n                    normalize(@types_excl, 1000);\n          \t     printf(\&quot;\\nExclusive function elapsed times (us),\\n\&quot;);\n          \t     printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;TOTAL\&quot;);\n          \t     printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @types_excl);\n\n          \t     normalize(@types_incl, 1000);\n          \t     printf(\&quot;\\nInclusive function elapsed times (us),\\n\&quot;);\n          \t     printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;TOTAL\&quot;);\n          \t     printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @types_incl);  \n                }\n  &quot;, @builder.to_s
+    assert_equal &quot;  #!/usr/sbin/dtrace -ZFs \n             #pragma D option quiet\n\n             #pragma D option dynvarsize=64m\n\n             \n \n              dtrace:::BEGIN\n               \n               {\n                  printf(\&quot;Tracing... Hit Ctrl-C to end.\\n\&quot;);\n \n                }\n \n              pid$target::rb_memerror:entry\n               \n               {\n                  self-&gt;depth++;\n            \t     self-&gt;exclude[self-&gt;depth] = 0;\n            \t     self-&gt;type = probefunc;\n            \t     @num[self-&gt;type, \&quot;\&quot;] = count();\n            \t     self-&gt;rb_memerror[self-&gt;depth] = timestamp; \n                }\n  pid$target::rb_memerror:return\n               /self-&gt;rb_memerror[self-&gt;depth]/\n               {\n                  this-&gt;elapsed_incl = timestamp - self-&gt;rb_memerror[self-&gt;depth];\n                   this-&gt;elapsed_excl = this-&gt;elapsed_incl - self-&gt;exclude[self-&gt;depth];\n                \t self-&gt;rb_memerror[self-&gt;depth] = 0;\n                \t self-&gt;exclude[self-&gt;depth] = 0;\n                \t self-&gt;type = probefunc;\n                \t @types_incl[self-&gt;type, \&quot;\&quot;] = sum(this-&gt;elapsed_incl);\n                \t @types_excl[self-&gt;type, \&quot;\&quot;] = sum(this-&gt;elapsed_excl);\n\n                \t self-&gt;depth--;\n                \t self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; \n                }\n  pid$target::rb_newobj:entry\n               \n               {\n                  self-&gt;depth++;\n            \t     self-&gt;exclude[self-&gt;depth] = 0;\n            \t     self-&gt;type = probefunc;\n            \t     @num[self-&gt;type, \&quot;\&quot;] = count();\n            \t     self-&gt;rb_newobj[self-&gt;depth] = timestamp; \n                }\n  pid$target::rb_newobj:return\n               /self-&gt;rb_newobj[self-&gt;depth]/\n               {\n                  this-&gt;elapsed_incl = timestamp - self-&gt;rb_newobj[self-&gt;depth];\n                   this-&gt;elapsed_excl = this-&gt;elapsed_incl - self-&gt;exclude[self-&gt;depth];\n                \t self-&gt;rb_newobj[self-&gt;depth] = 0;\n                \t self-&gt;exclude[self-&gt;depth] = 0;\n                \t self-&gt;type = probefunc;\n                \t @types_incl[self-&gt;type, \&quot;\&quot;] = sum(this-&gt;elapsed_incl);\n                \t @types_excl[self-&gt;type, \&quot;\&quot;] = sum(this-&gt;elapsed_excl);\n\n                \t self-&gt;depth--;\n                \t self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; \n                }\n  pid$target::ruby_xmalloc:entry\n               \n               {\n                  self-&gt;depth++;\n            \t     self-&gt;exclude[self-&gt;depth] = 0;\n            \t     self-&gt;arg0 = stringof( arg0 );\nself-&gt;type = probefunc;\n            \t     @num[self-&gt;type, self-&gt;arg0] = count();\n            \t     self-&gt;ruby_xmalloc[self-&gt;depth] = timestamp; \n                }\n  pid$target::ruby_xmalloc:return\n               /self-&gt;ruby_xmalloc[self-&gt;depth]/\n               {\n                  this-&gt;elapsed_incl = timestamp - self-&gt;ruby_xmalloc[self-&gt;depth];\n                   this-&gt;elapsed_excl = this-&gt;elapsed_incl - self-&gt;exclude[self-&gt;depth];\n                \t self-&gt;ruby_xmalloc[self-&gt;depth] = 0;\n                \t self-&gt;exclude[self-&gt;depth] = 0;\n                \t self-&gt;arg0 = stringof( arg0 );\nself-&gt;type = probefunc;\n                \t @types_incl[self-&gt;type, self-&gt;arg0] = sum(this-&gt;elapsed_incl);\n                \t @types_excl[self-&gt;type, self-&gt;arg0] = sum(this-&gt;elapsed_excl);\n\n                \t self-&gt;depth--;\n                \t self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; \n                }\n \n              dtrace:::END\n               \n               {\n                  printf(\&quot;\\nCount,\\n\&quot;);\n                   printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;COUNT\&quot;);\n              \t   printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @num);\n                    normalize(@types_excl, 1000);\n          \t     printf(\&quot;\\nExclusive function elapsed times (us),\\n\&quot;);\n          \t     printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;TOTAL\&quot;);\n          \t     printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @types_excl);\n\n          \t     normalize(@types_incl, 1000);\n          \t     printf(\&quot;\\nInclusive function elapsed times (us),\\n\&quot;);\n          \t     printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;TOTAL\&quot;);\n          \t     printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @types_incl);  \n                }\n  &quot;, @builder.to_s
   end
   
-end  
\ No newline at end of file
+end  
+=end
\ No newline at end of file</diff>
      <filename>test/instrumentation/strategy/builder_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+=begin
 require File.join( File.dirname( __FILE__ ), '..', '..', 'helper' )
 
 class CallsStrategyTest &lt; Test::Unit::TestCase
@@ -25,4 +26,5 @@ class CallsStrategyTest &lt; Test::Unit::TestCase
     assert_equal &quot; dtrace:::END\n               \n               {\n                  printf(\&quot; %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;CALLS\&quot;);\n     \t   printa(\&quot; %-24s %-24s %@20d\\n\&quot;, @calls); \n                }\n &quot;, @strategy.report
   end
   
-end
\ No newline at end of file
+end
+=end
\ No newline at end of file</diff>
      <filename>test/instrumentation/strategy/calls_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+=begin
 require File.join( File.dirname( __FILE__ ), '..', '..', 'helper' )
 
 class CalltimeStrategyTest &lt; Test::Unit::TestCase
@@ -18,15 +19,16 @@ class CalltimeStrategyTest &lt; Test::Unit::TestCase
   end
   
   test &quot;should be able to yield a function entry definition&quot; do
-    assert_equal &quot; pid$target::ruby_xrealloc:entry\n               \n               {\n                  self-&gt;depth++;\n            \t     self-&gt;exclude[self-&gt;depth] = 0;\n            \t     this-&gt;type = probefunc;\nthis-&gt;arg0 = arg0;\nthis-&gt;arg1 = stringof( arg1 );\n            \t     @num[this-&gt;type, this-&gt;arg0, this-&gt;arg1] = count();\n            \t     self-&gt;ruby_xrealloc[self-&gt;depth] = timestamp; \n                }\n &quot;, @strategy.entry
+    assert_equal &quot; pid$target::ruby_xrealloc:entry\n               \n               {\n                  self-&gt;depth++;\n            \t     self-&gt;exclude[self-&gt;depth] = 0;\n            \t     self-&gt;type = probefunc;\nself-&gt;arg0 = arg0;\nself-&gt;arg1 = stringof( arg1 );\n            \t     @num[self-&gt;type, self-&gt;arg0, self-&gt;arg1] = count();\n            \t     self-&gt;ruby_xrealloc[self-&gt;depth] = timestamp; \n                }\n &quot;, @strategy.entry
   end
   
   test &quot;should be able to yield a function return definition&quot; do 
-    assert_equal &quot; pid$target::ruby_xrealloc:return\n               /self-&gt;ruby_xrealloc[self-&gt;depth]/\n               {\n                  this-&gt;elapsed_incl = timestamp - self-&gt;ruby_xrealloc[self-&gt;depth];\n                   this-&gt;elapsed_excl = this-&gt;elapsed_incl - self-&gt;exclude[self-&gt;depth];\n                \t self-&gt;ruby_xrealloc[self-&gt;depth] = 0;\n                \t self-&gt;exclude[self-&gt;depth] = 0;\n                \t this-&gt;type = probefunc;\nthis-&gt;arg0 = arg0;\nthis-&gt;arg1 = stringof( arg1 );\n                \t @types_incl[this-&gt;type, this-&gt;arg0, this-&gt;arg1] = sum(this-&gt;elapsed_incl);\n                \t @types_excl[this-&gt;type, this-&gt;arg0, this-&gt;arg1] = sum(this-&gt;elapsed_excl);\n\n                \t self-&gt;depth--;\n                \t self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; \n                }\n &quot;, @strategy.return
+    assert_equal &quot; pid$target::ruby_xrealloc:return\n               /self-&gt;ruby_xrealloc[self-&gt;depth]/\n               {\n                  this-&gt;elapsed_incl = timestamp - self-&gt;ruby_xrealloc[self-&gt;depth];\n                   this-&gt;elapsed_excl = this-&gt;elapsed_incl - self-&gt;exclude[self-&gt;depth];\n                \t self-&gt;ruby_xrealloc[self-&gt;depth] = 0;\n                \t self-&gt;exclude[self-&gt;depth] = 0;\n                \t self-&gt;type = probefunc;\nself-&gt;arg0 = arg0;\nself-&gt;arg1 = stringof( arg1 );\n                \t @types_incl[self-&gt;type, self-&gt;arg0, self-&gt;arg1] = sum(this-&gt;elapsed_incl);\n                \t @types_excl[self-&gt;type, self-&gt;arg0, self-&gt;arg1] = sum(this-&gt;elapsed_excl);\n\n                \t self-&gt;depth--;\n                \t self-&gt;exclude[self-&gt;depth] += this-&gt;elapsed_incl; \n                }\n &quot;, @strategy.return
   end  
 
   test &quot;should be able to yield a reporting function&quot; do
     assert_equal  &quot; dtrace:::END\n               \n               {\n                  printf(\&quot;\\nCount,\\n\&quot;);\n                   printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;COUNT\&quot;);\n              \t   printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @num);\n                    normalize(@types_excl, 1000);\n          \t     printf(\&quot;\\nExclusive function elapsed times (us),\\n\&quot;);\n          \t     printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;TOTAL\&quot;);\n          \t     printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @types_excl);\n\n          \t     normalize(@types_incl, 1000);\n          \t     printf(\&quot;\\nInclusive function elapsed times (us),\\n\&quot;);\n          \t     printf(\&quot;   %-24s %-24s %20s\\n\&quot;, \&quot;Probe\&quot;, \&quot;arg0\&quot;, \&quot;TOTAL\&quot;);\n          \t     printa(\&quot;   %-24s %-24s %@20d\\n\&quot;, @types_incl);  \n                }\n &quot;, @strategy.report
   end  
   
-end  
\ No newline at end of file
+end  
+=end
\ No newline at end of file</diff>
      <filename>test/instrumentation/strategy/calltime_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+=begin
 require File.join( File.dirname( __FILE__ ), '..', '..', 'helper' )
 
 class FlowStrategyTest &lt; Test::Unit::TestCase
@@ -25,4 +26,5 @@ class FlowStrategyTest &lt; Test::Unit::TestCase
     assert_equal &quot; pid$target::ruby_xrealloc:return\n               \n               {\n                  printf(\&quot;%3d %-16d %-22s %*s&lt;-\\n\&quot;, cpu, timestamp / 1000, \n        probefunc, self-&gt;depth * 2, \&quot;\&quot; );\n \n                }\n &quot;, @strategy.return
   end
   
-end
\ No newline at end of file
+end
+=end
\ No newline at end of file</diff>
      <filename>test/instrumentation/strategy/flow_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+=begin
 require File.join( File.dirname( __FILE__ ), '..', '..', 'helper' )
 
 class IntervalStrategyTest &lt; Test::Unit::TestCase
@@ -25,4 +26,5 @@ class IntervalStrategyTest &lt; Test::Unit::TestCase
     assert_equal  &quot; profile:::tick-1sec\n              {\n              \tprintf(\&quot;%20Y %6d %6d %6d\\n\&quot;, walltimestamp, rb_memerror, rb_newobj, ruby_xmalloc);\n\n              \trb_memerror = 0;\nrb_newobj = 0;\nruby_xmalloc = 0;\n              }\n &quot;, @strategy.report
   end  
   
-end
\ No newline at end of file
+end
+=end
\ No newline at end of file</diff>
      <filename>test/instrumentation/strategy/interval_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+=begin
 require File.join( File.dirname( __FILE__ ), '..', '..', 'helper' )
 
 class PeekTest &lt; Test::Unit::TestCase
@@ -18,7 +19,7 @@ class PeekTest &lt; Test::Unit::TestCase
   end
   
   test &quot;should be able to yield a guarded function entry definition&quot; do
-    assert_equal &quot; pid$target::ruby_xrealloc:entry\n               /guard++ == 0/\n               {\n                  self-&gt;peek = 1;\n                        this-&gt;type = probefunc;\nthis-&gt;arg0 = arg0;\nthis-&gt;arg1 = stringof( arg1 );\n                        printf( \&quot;%13s\&quot;, this-&gt;type, this-&gt;arg0, this-&gt;arg1 ); \n                }\n &quot;, @strategy.guarded_entry
+    assert_equal &quot; pid$target::ruby_xrealloc:entry\n               /guard++ == 0/\n               {\n                  self-&gt;peek = 1;\n                        self-&gt;type = probefunc;\nself-&gt;arg0 = arg0;\nself-&gt;arg1 = stringof( arg1 );\n                        printf( \&quot;%13s\&quot;, self-&gt;type, self-&gt;arg0, self-&gt;arg1 ); \n                }\n &quot;, @strategy.guarded_entry
   end
 
   test &quot;should be able to yield a function return definition&quot; do
@@ -29,4 +30,5 @@ class PeekTest &lt; Test::Unit::TestCase
     assert_equal &quot; pid$target:::\n               /self-&gt;peek/\n               {\n                 \n                }\n &quot;, @strategy.peek
   end
   
-end
\ No newline at end of file
+end
+=end
\ No newline at end of file</diff>
      <filename>test/instrumentation/strategy/peek_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+=begin
 require File.join( File.dirname( __FILE__ ), '..', '..', 'helper' )
 
 class SpeculateTest &lt; Test::Unit::TestCase
@@ -29,4 +30,5 @@ class SpeculateTest &lt; Test::Unit::TestCase
     assert_equal &quot; pid$target::ruby_xrealloc:return\n               /self-&gt;spec &amp;&amp; errno != 0/\n               {\n                  discard(self-&gt;spec); \n                        self-&gt;spec = 0; \n                }\n &quot;, @strategy.return_failure
   end
   
-end
\ No newline at end of file
+end
+=end
\ No newline at end of file</diff>
      <filename>test/instrumentation/strategy/speculate_test.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>probes/18/block.yml</filename>
    </removed>
    <removed>
      <filename>probes/18/cache.yml</filename>
    </removed>
    <removed>
      <filename>probes/18/gc.yml</filename>
    </removed>
    <removed>
      <filename>probes/18/parse.yml</filename>
    </removed>
    <removed>
      <filename>probes/18/require.yml</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>8b3e59ec2ac4e11b4c0468b31cc021824e0bc1d5</id>
    </parent>
  </parents>
  <author>
    <name>Lourens Naude</name>
    <email>lourens@methodmissing.com</email>
  </author>
  <url>http://github.com/methodmissing/mri_instrumentation/commit/e8138b2041526a53dd2d7116552fc138c800a99b</url>
  <id>e8138b2041526a53dd2d7116552fc138c800a99b</id>
  <committed-date>2009-05-03T13:21:15-07:00</committed-date>
  <authored-date>2009-05-03T13:21:15-07:00</authored-date>
  <message>Major overhaul: MRI C AST -&gt; YAML function defs -&gt; probes</message>
  <tree>3b7cce337862c88bcf1f4f0c2988474f480eb39c</tree>
  <committer>
    <name>Lourens Naude</name>
    <email>lourens@methodmissing.com</email>
  </committer>
</commit>
