diff options
Diffstat (limited to 'devel/ddd/patches/patch-al')
-rw-r--r-- | devel/ddd/patches/patch-al | 717 |
1 files changed, 717 insertions, 0 deletions
diff --git a/devel/ddd/patches/patch-al b/devel/ddd/patches/patch-al new file mode 100644 index 00000000000..904f8ef63aa --- /dev/null +++ b/devel/ddd/patches/patch-al @@ -0,0 +1,717 @@ +$NetBSD: patch-al,v 1.1 2004/06/04 11:19:32 shannonjr Exp $ + +--- ddd/GDBAgent.C.orig 2003-10-11 05:03:33.000000000 -0600 ++++ ddd/GDBAgent.C +@@ -175,6 +175,7 @@ char GDBAgent_rcsid[] = + + DEFINE_TYPE_INFO_1(GDBAgent, TTYAgent); + ++#define DBG_PROMPT "dbg>" + + //----------------------------------------------------------------------------- + // Construction and setup +@@ -189,27 +190,28 @@ GDBAgent::GDBAgent (XtAppContext app_con + state(BusyOnInitialCmds), + _type(tp), + _user_data(0), +- _has_frame_command(tp == GDB || tp == XDB || tp == BASH), ++ _has_frame_command(tp == BASH || tp == GDB || tp == XDB), + _has_func_command(tp == DBX), ++ _has_file_command(tp == DBX), + _has_run_io_command(false), + _has_print_r_option(false), + _has_output_command(false), + _has_where_h_option(false), +- _has_display_command(tp == GDB || tp == DBX || tp == PYDB || tp == BASH), +- _has_clear_command(tp == GDB || tp == DBX || tp == JDB || tp == PERL || tp == BASH), ++ _has_display_command(tp == BASH || tp == DBX || tp == GDB || tp == PYDB), ++ _has_clear_command(tp == BASH || tp == DBX || tp == GDB || tp == JDB || tp == PERL), + _has_handler_command(false), +- _has_pwd_command(tp == GDB || tp == DBX || tp == PYDB || tp == PERL || tp == BASH), ++ _has_pwd_command(tp == BASH || tp == DBX || tp == GDB || tp == PYDB || tp == PERL), + _has_setenv_command(tp == DBX), + _has_edit_command(tp == DBX), + _has_make_command(tp == GDB || tp == DBX || tp == PERL), + _has_jump_command(tp == GDB || tp == DBX || tp == XDB), + _has_regs_command(tp == GDB), + _has_watch_command(0), // see below +- _has_named_values(tp == GDB || tp == DBX || tp == JDB), ++ _has_named_values(tp == DBX || tp == GDB || tp == JDB), + _has_when_command(tp == DBX), + _has_when_semicolon(tp == DBX), + _wants_delete_comma(false), +- _has_err_redirection(tp == GDB || tp == DBX || tp == XDB), ++ _has_err_redirection(tp == DBX || tp == GDB || tp == XDB), + _has_givenfile_command(false), + _has_cont_sig_command(false), + _has_examine_command(tp == GDB || tp == DBX), +@@ -219,10 +221,10 @@ GDBAgent::GDBAgent (XtAppContext app_con + _has_addproc_command(false), + _has_debug_command(true), + _is_windriver_gdb(false), +- _program_language((tp == JDB) ? LANGUAGE_JAVA : +- (tp == PYDB) ? LANGUAGE_PYTHON : ++ _program_language((tp == BASH) ? LANGUAGE_BASH : ++ (tp == JDB) ? LANGUAGE_JAVA : + (tp == PERL) ? LANGUAGE_PERL : +- (tp == BASH) ? LANGUAGE_BASH : ++ (tp == PYDB) ? LANGUAGE_PYTHON : + LANGUAGE_C), + _verbatim(false), + _recording(false), +@@ -280,6 +282,7 @@ GDBAgent::GDBAgent(const GDBAgent& gdb) + _user_data(0), + _has_frame_command(gdb.has_frame_command()), + _has_func_command(gdb.has_func_command()), ++ _has_file_command(gdb.has_file_command()), + _has_run_io_command(gdb.has_run_io_command()), + _has_print_r_option(gdb.has_print_r_option()), + _has_output_command(gdb.has_output_command()), +@@ -336,15 +339,15 @@ GDBAgent::GDBAgent(const GDBAgent& gdb) + const string& GDBAgent::title() const + { + #define TITLES \ +-X(tGDB,"GDB"), \ +-X(tWBD,"WDB"), \ +-X(tXDB,"XDB"), \ +-X(tLADEBUG,"Ladebug"), \ ++X(tBASH,"Bash"), \ + X(tDBX,"DBX"), \ ++X(tGDB,"GDB"), \ + X(tJDB,"JDB"), \ +-X(tPYDB,"PYDB"), \ ++X(tLADEBUG,"Ladebug"), \ + X(tPERL,"Perl"), \ +-X(tBASH,"Bash"), \ ++X(tPYDB,"PYDB"), \ ++X(tWBD,"WDB"), \ ++X(tXDB,"XDB"), \ + X(tDEBUGGER,"debugger") + enum{ + #define X(a,b) a +@@ -363,11 +366,8 @@ X(tDEBUGGER,"debugger") + + switch (type()) + { +- case GDB: +- if (path().contains("wdb")) +- return titles[tWBD]; +- else +- return titles[tGDB]; ++ case BASH: ++ return titles[tBASH]; + + case DBX: + if (is_ladebug()) +@@ -375,20 +375,23 @@ X(tDEBUGGER,"debugger") + else + return titles[tDBX]; + +- case XDB: +- return titles[tXDB]; ++ case GDB: ++ if (path().contains("wdb")) ++ return titles[tWBD]; ++ else ++ return titles[tGDB]; + + case JDB: + return titles[tJDB]; + +- case PYDB: +- return titles[tPYDB]; +- + case PERL: + return titles[tPERL]; + +- case BASH: +- return titles[tBASH]; ++ case PYDB: ++ return titles[tPYDB]; ++ ++ case XDB: ++ return titles[tXDB]; + } + + return titles[tDEBUGGER]; +@@ -620,8 +623,8 @@ void GDBAgent::init_qu_array (const Stri + _qu_count = qu_count; + _qa_data = qa_data; + +- StringArray empty_s; +- VoidArray empty_v; ++ static const StringArray empty_s; ++ static const VoidArray empty_v; + + complete_answers = empty_s; + cmd_array = empty_s; +@@ -830,13 +833,13 @@ bool GDBAgent::ends_with_prompt (const s + return false; // Never reached + } + +-static bool ends_in(const string& answer, const string& prompt) ++static bool ends_in(const string& answer, const char *prompt) + { +- return answer.contains(prompt, answer.length() - prompt.length()); ++ return answer.contains(prompt, answer.length() - strlen(prompt)); + } + + // JDB should be applied on itself. +-bool GDBAgent::is_exception_answer(const string& answer) ++bool GDBAgent::is_exception_answer(const string& answer) const + { + // Any JDB backtrace contains these lines. + return type() == JDB && +@@ -862,7 +865,7 @@ void GDBAgent::set_exception_state(bool + + + // Return true iff ANSWER ends with secondary prompt. +-bool GDBAgent::ends_with_secondary_prompt (const string& ans) ++bool GDBAgent::ends_with_secondary_prompt (const string& ans) const + { + string answer = ans; + strip_control(answer); +@@ -902,11 +905,11 @@ bool GDBAgent::ends_with_secondary_promp + // Prompt is `> ' at beginning of line + return answer == "> " || ends_in(answer, "\n> "); + +- case XDB: ++ case BASH: + case JDB: +- case PYDB: + case PERL: +- case BASH: ++ case PYDB: ++ case XDB: + // Is there any secondary prompt in these debuggers? (FIXME) + return false; + } +@@ -915,7 +918,7 @@ bool GDBAgent::ends_with_secondary_promp + } + + // Return true iff ANSWER ends with (yes or no) +-bool GDBAgent::ends_with_yn (const string& answer) ++bool GDBAgent::ends_with_yn (const string& answer) const + { + if (ends_in(answer, "(y or n) ")) + return true; // GDB +@@ -1026,9 +1029,17 @@ void GDBAgent::cut_off_prompt(string& an + answer = answer.before('(', -1); + break; + +- case XDB: +- answer = answer.before('>', -1); ++ case BASH: ++ case JDB: ++ { ++ // Check for prompt at the end of the last line ++ if (answer.contains(last_prompt, -1)) ++ { ++ answer = answer.before(int(answer.length()) - ++ int(last_prompt.length())); ++ } + break; ++ } + + case PERL: + { +@@ -1039,18 +1050,10 @@ void GDBAgent::cut_off_prompt(string& an + break; + } + +- case BASH: +- case JDB: +- { +- // Check for prompt at the end of the last line +- if (answer.contains(last_prompt, -1)) +- { +- answer = answer.before(int(answer.length()) - +- int(last_prompt.length())); +- } ++ case XDB: ++ answer = answer.before('>', -1); + break; + } +- } + } + + // Strip annoying DBX comments +@@ -1702,7 +1705,7 @@ void GDBAgent::handle_died() + //----------------------------------------------------------------------------- + + // DBX 3.0 wants `print -r' instead of `print' for C++ +-string GDBAgent::print_command(const string& expr, bool internal) const ++string GDBAgent::print_command(const char *expr, bool internal) const + { + string cmd; + +@@ -1737,26 +1740,30 @@ string GDBAgent::print_command(const str + break; + } + +- if (!expr.empty()) +- cmd += " " + expr; ++ if (strlen(expr) != 0) { ++ cmd += ' '; ++ cmd += expr; ++ } + + return cmd; + } + + // DBX 3.0 wants `display -r' instead of `display' for C++ +-string GDBAgent::display_command(const string& expr) const ++string GDBAgent::display_command(const char *expr) const + { + string cmd; + if (!has_display_command()) + return cmd; + +- if (has_print_r_option() && !expr.empty()) ++ if (has_print_r_option() && strlen(expr) != 0) + cmd = "display -r"; + else + cmd = "display"; + +- if (!expr.empty()) +- cmd += " " + expr; ++ if (strlen(expr) != 0) { ++ cmd += ' '; ++ cmd += expr; ++ } + + return cmd; + } +@@ -1767,8 +1774,9 @@ string GDBAgent::where_command(int count + string cmd; + switch (type()) + { +- case GDB: ++ case BASH: + case DBX: ++ case GDB: + case JDB: + case PYDB: + if (has_where_h_option()) +@@ -1777,7 +1785,6 @@ string GDBAgent::where_command(int count + cmd = "where"; + break; + +- case BASH: + case PERL: + cmd = "T"; + break; +@@ -1813,6 +1820,8 @@ string GDBAgent::info_locals_command() c + case BASH: + case PERL: + return "V"; ++ ++ + } + + return ""; // Never reached +@@ -1934,10 +1943,10 @@ string GDBAgent::jump_command(const stri + case DBX: + return "cont at " + pos; + ++ case BASH: + case JDB: +- case PYDB: + case PERL: +- case BASH: ++ case PYDB: + return ""; // Not available + } + +@@ -1964,11 +1973,11 @@ string GDBAgent::regs_command(bool all) + else + return "regs"; + +- case XDB: ++ case BASH: + case JDB: + case PYDB: + case PERL: +- case BASH: ++ case XDB: + return ""; // Not available + } + +@@ -2027,8 +2036,8 @@ string GDBAgent::watch_command(const str + return "watch access " + expr; + return ""; + +- case PYDB: + case PERL: ++ case PYDB: + return ""; // Not available + } + +@@ -2040,16 +2049,14 @@ string GDBAgent::kill_command() const + { + switch (type()) + { +- case GDB: + case DBX: ++ case GDB: ++ case PYDB: + return "kill"; + + case XDB: + return "k"; + +- case PYDB: +- return "kill"; +- + case JDB: + case PERL: + case BASH: +@@ -2063,9 +2070,9 @@ string GDBAgent::frame_command() const + { + switch (type()) + { +- case GDB: +- case DBX: + case BASH: ++ case DBX: ++ case GDB: + if (has_frame_command()) + return "frame"; + else +@@ -2092,9 +2099,9 @@ string GDBAgent::frame_command(int num) + + switch (type()) + { +- case GDB: +- case DBX: + case BASH: ++ case DBX: ++ case GDB: + return frame_command() + " " + itostring(num); + + case XDB: +@@ -2131,12 +2138,12 @@ string GDBAgent::func_command() const + { + switch (type()) + { ++ case BASH: + case GDB: +- case XDB: + case JDB: +- case PYDB: + case PERL: +- case BASH: ++ case PYDB: ++ case XDB: + return frame_command(); + + case DBX: +@@ -2215,9 +2222,9 @@ string GDBAgent::enable_command(string b + + switch (type()) + { ++ case BASH: + case GDB: + case PYDB: +- case BASH: + return "enable" + bp; + + case DBX: +@@ -2247,9 +2254,9 @@ string GDBAgent::disable_command(string + + switch (type()) + { ++ case BASH: + case GDB: + case PYDB: +- case BASH: + return "disable" + bp; + + case DBX: +@@ -2279,10 +2286,10 @@ string GDBAgent::delete_command(string b + + switch (type()) + { ++ case BASH: + case DBX: + case GDB: + case PYDB: +- case BASH: + return "delete" + bp; + + case XDB: +@@ -2314,9 +2321,9 @@ string GDBAgent::ignore_command(const st + case XDB: + return "bc " + bp + " " + itostring(count); + ++ case BASH: + case JDB: + case PERL: +- case BASH: + return ""; // Not available + } + +@@ -2324,7 +2331,7 @@ string GDBAgent::ignore_command(const st + } + + // Set condition of breakpoint BP to EXPR +-string GDBAgent::condition_command(const string& bp, const string& expr) const ++string GDBAgent::condition_command(const string& bp, const char *expr) const + { + switch (type()) + { +@@ -2465,7 +2472,7 @@ string GDBAgent::quote_file(const string + } + + // Return command to debug PROGRAM +-string GDBAgent::debug_command(const string& program, string args) const ++string GDBAgent::debug_command(const char *program, string args) const + { + if (!args.empty() && !args.contains(' ', 0)) + args.prepend(' '); +@@ -2479,27 +2486,27 @@ string GDBAgent::debug_command(const str + return "file " + quote_file(program); + + case PYDB: +- return "file " + program; ++ return string("file ") + program; + + case DBX: + if (is_ladebug()) +- return "load " + program; // Compaq Ladebug ++ return string("load ") + program; // Compaq Ladebug + else if (has_givenfile_command()) +- return "givenfile " + program; // SGI DBX ++ return string("givenfile ") + program; // SGI DBX + else +- return "debug " + program; // SUN DBX ++ return string("debug ") + program; // SUN DBX + + case XDB: +- return "#file " + program; // just a dummy ++ return string("#file ") + program; // just a dummy + + case JDB: +- return "load " + program; ++ return string("load ") + program; + + case PERL: + return "exec " + quote(debugger() + " -d " + program + args); + + case BASH: +- return "debug " + program + args; ++ return string("debug ") + program + args; + } + + return ""; // Never reached +@@ -2536,12 +2543,12 @@ string GDBAgent::signal_command(int sig) + + + // Return a command that does nothing. +-string GDBAgent::nop_command(const string& comment) const ++string GDBAgent::nop_command(const char *comment) const + { + if (type() == JDB) + return " "; + +- return "# " + comment; // Works for all other inferior debuggers ++ return string("# ") + comment; // Works for all other inferior debuggers + } + + // Run program with given ARGS +@@ -2591,10 +2598,10 @@ string GDBAgent::rerun_command() const + { + switch (type()) + { ++ case BASH: + case GDB: + case JDB: + case PYDB: +- case BASH: + return "run"; + + case DBX: +@@ -2634,11 +2641,11 @@ string GDBAgent::attach_command(int pid, + else + return "debug " + file + " " + itostring(pid); // Others + +- case XDB: ++ case BASH: + case JDB: +- case PYDB: + case PERL: +- case BASH: ++ case PYDB: ++ case XDB: + break; + } + +@@ -2658,11 +2665,11 @@ string GDBAgent::detach_command(int pid) + else + return "detach"; // Others + +- case XDB: ++ case BASH: + case JDB: +- case PYDB: + case PERL: +- case BASH: ++ case PYDB: ++ case XDB: + break; + } + +@@ -2673,23 +2680,33 @@ string GDBAgent::detach_command(int pid) + // Return PREFIX + EXPR, parenthesizing EXPR if needed + string GDBAgent::prepend_prefix(const string& prefix, const string& expr) + { ++ return prepend_prefix( prefix.chars(), expr); ++} ++ ++string GDBAgent::prepend_prefix(const char *prefix, const string& expr) ++{ + if (expr.matches(rxidentifier) + || expr.contains("(", 0) && expr.contains(")", -1)) + return prefix + expr; + else if (expr.empty()) + return prefix; + else +- return prefix + "(" + expr + ")"; ++ return string(prefix) + "(" + expr + ")"; + } + + // Return EXPR + SUFFIX, parenthesizing EXPR if needed +-string GDBAgent::append_suffix(const string& expr, const string& suffix) ++string GDBAgent::append_suffix(const string& expr, const string &suffix) ++{ ++ return append_suffix( expr, suffix.chars() ); ++} ++ ++string GDBAgent::append_suffix(const string& expr, const char *suffix) + { + if (expr.matches(rxidentifier) + || expr.contains("(", 0) && expr.contains(")", -1)) + return expr + suffix; + else if (expr.empty()) +- return suffix; ++ return string(suffix); + else + return "(" + expr + ")" + suffix; + } +@@ -2702,6 +2719,7 @@ string GDBAgent::dereferenced_expr(const + case LANGUAGE_C: + return prepend_prefix("*", expr); + ++ case LANGUAGE_PHP: + case LANGUAGE_PERL: + // Perl has three `dereferencing' operators, depending on the + // type of reference. The `deref()' function provides a +@@ -2770,6 +2788,7 @@ string GDBAgent::address_expr(string exp + return ""; // Not supported in Python + + case LANGUAGE_BASH: ++ case LANGUAGE_PHP: // Is this right? + case LANGUAGE_PERL: + return ""; // No such thing in bash/Perl + +@@ -2822,8 +2841,9 @@ int GDBAgent::default_index_base() const + case LANGUAGE_ADA: + case LANGUAGE_C: + case LANGUAGE_JAVA: +- case LANGUAGE_PYTHON: + case LANGUAGE_PERL: ++ case LANGUAGE_PHP: ++ case LANGUAGE_PYTHON: + case LANGUAGE_BASH: + case LANGUAGE_OTHER: + return 0; +@@ -2843,6 +2863,7 @@ string GDBAgent::member_separator() cons + case LANGUAGE_C: + case LANGUAGE_PYTHON: + case LANGUAGE_OTHER: ++ case LANGUAGE_PHP: + return " = "; + + case LANGUAGE_JAVA: +@@ -2908,12 +2929,13 @@ string GDBAgent::assign_command(const st + + switch (program_language()) + { ++ case LANGUAGE_BASH: + case LANGUAGE_C: +- case LANGUAGE_JAVA: + case LANGUAGE_FORTRAN: +- case LANGUAGE_PYTHON: // FIXME: vrbl names can conflict with commands ++ case LANGUAGE_JAVA: + case LANGUAGE_PERL: +- case LANGUAGE_BASH: ++ case LANGUAGE_PHP: ++ case LANGUAGE_PYTHON: // FIXME: vrbl names can conflict with commands + case LANGUAGE_OTHER: + cmd += "="; + break; +@@ -2948,13 +2970,14 @@ void GDBAgent::normalize_address(string& + { + switch (program_language()) + { ++ case LANGUAGE_ADA: ++ case LANGUAGE_BASH: + case LANGUAGE_C: +- case LANGUAGE_JAVA: + case LANGUAGE_FORTRAN: +- case LANGUAGE_ADA: +- case LANGUAGE_PYTHON: ++ case LANGUAGE_JAVA: + case LANGUAGE_PERL: +- case LANGUAGE_BASH: ++ case LANGUAGE_PHP: ++ case LANGUAGE_PYTHON: + case LANGUAGE_OTHER: + addr.prepend("0x"); + break; +@@ -2971,7 +2994,7 @@ void GDBAgent::normalize_address(string& + } + + // Return disassemble command +-string GDBAgent::disassemble_command(string start, const string& end) const ++string GDBAgent::disassemble_command(string start, const char *end) const + { + string cmd; + if (type() != GDB) +@@ -2980,11 +3003,12 @@ string GDBAgent::disassemble_command(str + normalize_address(start); + cmd = "disassemble " + start; + +- if (!end.empty()) ++ if (strlen(end) != 0) + { + string end_( end ); + normalize_address(end_); +- cmd += " " + end_; ++ cmd += ' '; ++ cmd += end_; + } + return cmd; + } +@@ -3003,11 +3027,11 @@ string GDBAgent::history_file() const + return "./.gdb_history"; + } + ++ case BASH: + case DBX: + case JDB: +- case PYDB: + case PERL: +- case BASH: ++ case PYDB: + return ""; // Unknown + + case XDB: +@@ -3072,6 +3096,7 @@ ProgramLanguage GDBAgent::program_langua + { "python", LANGUAGE_PYTHON }, + { "bash", LANGUAGE_BASH }, + { "perl", LANGUAGE_PERL }, ++ { "php", LANGUAGE_PHP }, + { "c", LANGUAGE_C }, + { "c++", LANGUAGE_C }, + { "auto", LANGUAGE_OTHER } // Keep current language |