nobody at rubyforge.org
2007-Jun-25 23:01 UTC
[Wxruby-development] [1070] trunk/wxruby2/swig/fixdeleting.rb: Remove old, now unused, fixdeleting script
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:'':'';} #msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[1070] trunk/wxruby2/swig/fixdeleting.rb: Remove old, now unused, fixdeleting script</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1070</dd> <dt>Author</dt> <dd>brokentoy</dd> <dt>Date</dt> <dd>2007-06-25 19:01:34 -0400 (Mon, 25 Jun 2007)</dd> </dl> <h3>Log Message</h3> <pre>Remove old, now unused, fixdeleting script</pre> <h3>Removed Paths</h3> <ul> <li><a href="#trunkwxruby2swigfixdeletingrb">trunk/wxruby2/swig/fixdeleting.rb</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="trunkwxruby2swigfixdeletingrb"></a> <div class="delfile"><h4>Deleted: trunk/wxruby2/swig/fixdeleting.rb (1069 => 1070)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/swig/fixdeleting.rb        2007-06-25 22:49:21 UTC (rev 1069) +++ trunk/wxruby2/swig/fixdeleting.rb        2007-06-25 23:01:34 UTC (rev 1070) </span><span class="lines">@@ -1,171 +0,0 @@ </span><del>-# fixdeleting.rb -# Copyright 2004-2005 by Kevin Smith -# released under the MIT-style wxruby2 license - -# This script post-processes the SWIG output -# to prevent ruby from trying to delete C++ -# objects that wxWidgets has already deleted -# I know it''s ugly :-( - -filename = ARGV[0] -broken = filename+".old" -File.rename(filename, broken) - -this_module = File.basename(filename) - - -File.open(filename, "w") do | out | -        core_name = File.basename(filename, ".cpp") -puts("core_name: #{core_name}") -        wx_name = "wx"+core_name -         -        if core_name == "App" -                found_app_constructor = false -                wx_name = core_name -        else -                found_app_constructor = true -        end -        found_director_constructor = false -        found_director_destructor = false -        found_deleter = false -        skip_deleter_fix = false -         -        director_class = nil -        director_class_name = "SwigDirector_#{wx_name}" -        File.foreach(broken) do | line | - -                # if we found our director class constructor, -                if(line.index(''SwigDirector_'') == 0) -                        # memorize its class name -                        director_class = line.split(/\:/)[0] -                end -                 -                # in the App class constructor, - if(line.index(''_wrap_new_App(int argc, VALUE *argv, VALUE self)'')) -                        # set the global app_ptr so wxGetApp can work -                        lines = [line] -                        lines << "wxRubyApp::app_ptr = self;" -                        line = lines.join("\n") -                        found_app_constructor = true - end -                 -                # in the Director constructor, - if(line.index("Director(VALUE self")) -                        # make a note of this object -                        found_director_constructor = true -                end -                # class specific constructor -        if(line.index(director_class_name+"::"+director_class_name)) -                        # make a note of this object -                        lines = [line] -                        lines << ''#ifdef wxDEBUG'' -                        lines << '' printf("'' + this_module + ''" " new Director %p\n", this);'' -                        lines << '' fflush(stdout);'' -                        lines << ''#endif'' -                        lines << '' GcMapPtrToValue(this,self);'' -                        line = lines.join("\n") -                        found_director_constructor = true -                end -        if(line.index("~"+director_class_name)) -                        # make a note that this object has been deleted -                        # it''s done in class specific destructor -                        # because multiple inheritance causes -                        # this!=(Director *)this in some compilers -                        lines = [line] -                        lines << ''#ifdef wxDEBUG'' -                        lines << '' printf("'' + this_module + ''" " ~Director %p\n", this);'' -                        lines << '' fflush(stdout);'' -                        lines << ''#endif'' - lines << '' VALUE rb_obj = GcGetValueFromPtr(this);'' - lines << '' rb_ivar_set(rb_obj, rb_intern("@__swig_dead__"), Qtrue);'' -                        lines << '' GcMarkDeleted(this);'' -                        line = lines.join("\n") -                end -                # in the Director destructor, - if(line.index("~Director()")) -                        found_director_destructor = true -         end - -                # where the C++ object was being deleted, - if(line.index("delete arg1") && !skip_deleter_fix && director_class) -                        lines = [] -                        lines << ''#ifdef wxDEBUG'' -                        lines << '' printf("'' + this_module + ''" " Checking %p\n", arg1);'' -                        lines << ''#endif'' -                        lines << " if (GcIsDeleted(arg1))" -                        lines << " {" -                        lines << ''#ifdef wxDEBUG'' -                        lines << " printf(\"%p is already dead!\\n\", arg1);" -                        lines << ''#endif'' -                        lines << " return;" -                        lines << " }" -                        lines << ''#ifdef wxDEBUG'' -                        lines << " printf(\"deleting %p\\n\", arg1);" -                        lines << " fflush(stdout);" -                        lines << ''#endif'' -                        lines << " delete arg1;" -                        line = lines.join("\n") -                        found_deleter = true -                # -                # HACK! If we don''t have the latest version of SWIG, -                # classes with no virtual methods will not be wrapped. -                # For now, since we can''t protect those classes, don''t -                # let the GC delete them either -                # -#                elsif (line.index(/delete arg1/)) -#                        line = " //delete arg1;" -#                        end -#                         -#                        # replace dynamic_cast with -#                        if(line.index("Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);")) -#                                line = ''Swig::Director *director = (Swig::Director*)(arg1);'' -#                        end -#                        if (line.index(''resultdirector = dynamic_cast<Swig::Director *>(result);'')) -#                                lines = [] -#                                lines << ''try {'' -#                                lines << ''resultdirector = dynamic_cast<Swig::Director *>(result);'' -#                                lines << ''} catch (...) {'' -#                                lines << '' resultdirector = NULL;'' -#                                lines << ''}'' -#                                line = lines.join("\n") -#                        end -                         -                end -                 -                # if we have no director, -                if(line.index(''//NO_DIRECTOR'')) -                        # don''t apply the delete fix -                        skip_deleter_fix = true -                end - -                # if this module doesn''t have a class or has no director, -                if(line.index(''//NO_CLASS'') || line.index(''//NO_DIRECTOR'')) -                        # pretend we found everything -                        found_director_constructor = true -                        found_director_destructor = true -                        found_deleter = true -                end - - -                out.puts(line) -        end -         -        if(!found_app_constructor) -                puts("ERROR: Didn''t find found_app_constructor") -                exit(1) -        end - -        if(!found_director_constructor) -                puts("WARNING: Didn''t find found_director_constructor") -        end - -        if(!found_director_destructor) -                puts("WARNING: Didn''t find found_director_destructor") -        end - -        if(director_class && !found_deleter) -                puts("WARNING: Didn''t find found_deleter") -        end -end - -File.delete(broken) </del></span></pre> </div> </div> </body> </html>
Reasonably Related Threads
- [890] branches/wxruby2/wxwidgets_282/swig/fixdeleting.rb: Fix crash on exit (Artur Kuptel)
- [887] branches/wxruby2/wxwidgets_282/swig/fixdeleting.rb: Deleting fix for specific Director classes (Artur Kuptel)
- Fix for crash at exit
- [722] trunk/wxruby2/swig: Wx::Choice fixes for get_client_data (AF)
- wxDebug