mirror of
https://github.com/ruby/ruby.git
synced 2025-08-24 13:34:17 +02:00
* ext/tcltklib/tcltklib.c (ip_invoke_core): call Tcl's "::unknown"
command when can't get information of target command. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a15556a27c
commit
7d3df9ddc1
2 changed files with 66 additions and 16 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Tue Apr 26 22:58:00 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
|
|
||||||
|
* ext/tcltklib/tcltklib.c (ip_invoke_core): call Tcl's "::unknown"
|
||||||
|
command when can't get information of target command.
|
||||||
|
|
||||||
Mon Apr 25 01:18:43 2005 Tanaka Akira <akr@m17n.org>
|
Mon Apr 25 01:18:43 2005 Tanaka Akira <akr@m17n.org>
|
||||||
|
|
||||||
* regex.c: declare rb_warn to have variadic argument. [ruby-core:4751]
|
* regex.c: declare rb_warn to have variadic argument. [ruby-core:4751]
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* Oct. 24, 1997 Y. Matsumoto
|
* Oct. 24, 1997 Y. Matsumoto
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define TCLTKLIB_RELEASE_DATE "2005-04-23"
|
#define TCLTKLIB_RELEASE_DATE "2005-04-26"
|
||||||
|
|
||||||
#include "ruby.h"
|
#include "ruby.h"
|
||||||
#include "rubysig.h"
|
#include "rubysig.h"
|
||||||
|
@ -6469,6 +6469,7 @@ ip_invoke_core(interp, argc, argv)
|
||||||
int thr_crit_bup;
|
int thr_crit_bup;
|
||||||
struct invoke_info inf;
|
struct invoke_info inf;
|
||||||
int status;
|
int status;
|
||||||
|
int unknown_flag = 0;
|
||||||
VALUE ret;
|
VALUE ret;
|
||||||
|
|
||||||
#if TCL_MAJOR_VERSION >= 8
|
#if TCL_MAJOR_VERSION >= 8
|
||||||
|
@ -6505,23 +6506,56 @@ ip_invoke_core(interp, argc, argv)
|
||||||
DUMP2("call Tcl_GetCommandInfo, %s", cmd);
|
DUMP2("call Tcl_GetCommandInfo, %s", cmd);
|
||||||
if (!Tcl_GetCommandInfo(ptr->ip, cmd, &info)) {
|
if (!Tcl_GetCommandInfo(ptr->ip, cmd, &info)) {
|
||||||
DUMP1("error Tcl_GetCommandInfo");
|
DUMP1("error Tcl_GetCommandInfo");
|
||||||
/* if (event_loop_abort_on_exc || cmd[0] != '.') { */
|
DUMP1("try auto_load (call 'unknown' command)");
|
||||||
if (event_loop_abort_on_exc > 0) {
|
if (!Tcl_GetCommandInfo(ptr->ip,
|
||||||
/* Tcl_Release(ptr->ip); */
|
#if TCL_MAJOR_VERSION >= 8
|
||||||
rbtk_release_ip(ptr);
|
"::unknown",
|
||||||
/*rb_ip_raise(obj,rb_eNameError,"invalid command name `%s'",cmd);*/
|
#else
|
||||||
return create_ip_exc(interp, rb_eNameError,
|
"unknown",
|
||||||
"invalid command name `%s'", cmd);
|
#endif
|
||||||
} else {
|
&info)) {
|
||||||
if (event_loop_abort_on_exc < 0) {
|
DUMP1("fail to get 'unknown' command");
|
||||||
rb_warning("invalid command name `%s' (ignore)", cmd);
|
/* if (event_loop_abort_on_exc || cmd[0] != '.') { */
|
||||||
|
if (event_loop_abort_on_exc > 0) {
|
||||||
|
/* Tcl_Release(ptr->ip); */
|
||||||
|
rbtk_release_ip(ptr);
|
||||||
|
/*rb_ip_raise(obj,rb_eNameError,"invalid command name `%s'",cmd);*/
|
||||||
|
return create_ip_exc(interp, rb_eNameError,
|
||||||
|
"invalid command name `%s'", cmd);
|
||||||
} else {
|
} else {
|
||||||
rb_warn("invalid command name `%s' (ignore)", cmd);
|
if (event_loop_abort_on_exc < 0) {
|
||||||
|
rb_warning("invalid command name `%s' (ignore)", cmd);
|
||||||
|
} else {
|
||||||
|
rb_warn("invalid command name `%s' (ignore)", cmd);
|
||||||
|
}
|
||||||
|
Tcl_ResetResult(ptr->ip);
|
||||||
|
/* Tcl_Release(ptr->ip); */
|
||||||
|
rbtk_release_ip(ptr);
|
||||||
|
return rb_tainted_str_new2("");
|
||||||
}
|
}
|
||||||
Tcl_ResetResult(ptr->ip);
|
} else {
|
||||||
/* Tcl_Release(ptr->ip); */
|
#if TCL_MAJOR_VERSION >= 8
|
||||||
rbtk_release_ip(ptr);
|
Tcl_Obj **unknown_objv;
|
||||||
return rb_tainted_str_new2("");
|
#else
|
||||||
|
char **unknown_argv;
|
||||||
|
#endif
|
||||||
|
DUMP1("find 'unknown' command -> set arguemnts");
|
||||||
|
unknown_flag = 1;
|
||||||
|
|
||||||
|
#if TCL_MAJOR_VERSION >= 8
|
||||||
|
unknown_objv = (Tcl_Obj **)ALLOC_N(Tcl_Obj *, objc+2);
|
||||||
|
unknown_objv[0] = Tcl_NewStringObj("::unknown", 9);
|
||||||
|
Tcl_IncrRefCount(unknown_objv[0]);
|
||||||
|
memcpy(unknown_objv + 1, objv, sizeof(Tcl_Obj *)*objc);
|
||||||
|
unknown_objv[++objc] = (Tcl_Obj*)NULL;
|
||||||
|
objv = unknown_objv;
|
||||||
|
#else
|
||||||
|
unknown_argv = (char **)ALLOC_N(char *, argc+2);
|
||||||
|
unknown_argv[0] = strdup("unknown");
|
||||||
|
memcpy(unknown_argv + 1, argv, sizeof(char *)*argc);
|
||||||
|
unknown_argv[++argc] = (char *)NULL;
|
||||||
|
argv = unknown_argv;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DUMP1("end Tcl_GetCommandInfo");
|
DUMP1("end Tcl_GetCommandInfo");
|
||||||
|
@ -6606,6 +6640,17 @@ ip_invoke_core(interp, argc, argv)
|
||||||
}
|
}
|
||||||
#endif /* ! wrap tcl-proc call */
|
#endif /* ! wrap tcl-proc call */
|
||||||
|
|
||||||
|
/* free allocated memory for calling 'unknown' command */
|
||||||
|
if (unknown_flag) {
|
||||||
|
#if TCL_MAJOR_VERSION >= 8
|
||||||
|
Tcl_DecrRefCount(objv[0]);
|
||||||
|
free(objv);
|
||||||
|
#else
|
||||||
|
free(argv[0]);
|
||||||
|
free(argv);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* exception on mainloop */
|
/* exception on mainloop */
|
||||||
if (pending_exception_check1(thr_crit_bup, ptr)) {
|
if (pending_exception_check1(thr_crit_bup, ptr)) {
|
||||||
return rbtk_pending_exception;
|
return rbtk_pending_exception;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue