diff --git a/extract_raii.rb b/extract_raii.rb new file mode 100644 index 000000000..d3a705724 --- /dev/null +++ b/extract_raii.rb @@ -0,0 +1,106 @@ +#!/usr/bin/env ruby + +$VERBOSE = 2 + +INDENT = ' ' * 4 + +puts <[\w\s]+\w)\s+(?\w*)\((?[^)]+)\)(?[^;]*);(?.*)$/) do |m| + next unless m[:name].match(/^(Begin|Push|Open|Tree|Column)/) + next unless m[:name].match(/^TreeNode|PushID|Begin$/) + + argnames = m[:args].split(/,\s*/).map do |arg| + arg = arg.split(/\s*=\s*/, 2).first + arg.split(/[ \*]/).last + end + + # Check for obsolete + if m[:name] == 'Begin' && + (argnames == %w{name p_open size_on_first_use bg_alpha_override flags} || + argnames == %w{items_count items_height}) + next + end + + $stderr.puts m.inspect if $-d + + fail "Return value #{m[:type]} is not bool or void" unless %w{bool void}.include?(m[:type]) + + if !$current_match || $current_match[:name] != m[:name] + if $current_match + close_class + puts + end + + $current_match = m + $class_name = case m[:name] + when 'Begin' then 'ImWindow' + else "Im#{m[:name]}" + end + + puts <