なかだです。

At Tue, 5 Oct 1999 14:31:19 +0900,
WATANABE Hirofumi <Hirofumi.Watanabe / jp.sony.com> wrote:
> :  それと -rdebug でソースを見るのって list でいいんでしたっけ。そ
> :れだと現状でも -e のは見られないようなんですが。
> 
> ぐはぁ. unlink をもうちょっと遅らせないとまずいですね.
> 使えなくても文句は出なかったわけで rb_compile_string でいいわけか.

  じゃあ、いっそのこと(謎)↓。なんだかいきなり $0.SOURCE とか怪し
げなものを作ってますが。あとは、(cmdline) というスクリプトファイ
ルがあるとややこしいかも。

  eval.c は、ruby -rdebug -rNothing ... みたいなときに SEGV で落
ちるのでそのパッチです。これは別にちゃんとしたパッチを出したほう
が良いでしょうか。

> mktemp も NetBSD で warning になるし, 一時ファイルはやめたほ
> うがいいのかもしれないですね.
> perl も 5.005 から一時ファイルは使わないようになってます.

  それは知りませんでした。perl5 ってほとんど使ってないもので。

# だって OO にしようとする程読みづらくなるしぃ。

> :  私は bash 遣いですが 5 行くらいの one liner(っていうのかそれ)が
> :エラーになったときはガチョーンというべきか、はう〜んというべきか、
> :結構悩ましいです。
> 
> いちおう C-b が使えるみたいです.

  readline 使って編集自体はできても、カッコの対応とかオートインデ
ントとかしてくれるわけじゃないですから、めんどくさくて…。

> tcsh 使いのわたしはいちいち \ で改行を quote しないといけな
> いので複数行は自ら却下です.

  tcsh って良く分からないんですが、クォートするだけじゃダメなんで
したっけ。っつーか、私はひたすらだらだらと一行に続けて打っちゃう
んで、改行は入れないんですが。


diff --recursive --unified=2 dist/eval.c build/eval.c --- dist/eval.c Mon Oct 4 23:10:12 1999 +++ build/eval.c Tue Oct 5 22:03:10 1999 @@ -1018,7 +1018,8 @@ call_required_libraries() { + extern char *ruby_sourcefile_cmdline; NODE *save; - ruby_sourcefile = 0; + ruby_sourcefile = ruby_sourcefile_cmdline; if (!ext_init) Init_ext(); save = ruby_eval_tree; diff --recursive --unified=2 dist/ruby.c build/ruby.c --- dist/ruby.c Tue Aug 24 23:10:13 1999 +++ build/ruby.c Tue Oct 5 22:41:08 1999 @@ -68,4 +68,6 @@ static char *script; +static VALUE cmdline_script = Qnil; +char *ruby_sourcefile_cmdline = "(cmdline)"; static int origargc; @@ -121,7 +123,4 @@ extern VALUE rb_load_path; -static FILE *e_fp; -static char *e_tmpname; - #define STATIC_FILE_LENGTH 255 @@ -254,5 +253,5 @@ extern void Init_ext _((void)); -static void +static VALUE proc_options(argcp, argvp) int *argcp; @@ -261,5 +260,6 @@ int argc = *argcp; char **argv = *argvp; - int script_given, do_search; + int do_search, n; + VALUE given_script; char *s; @@ -268,6 +268,5 @@ version = Qfalse; do_search = Qfalse; - script_given = 0; - e_tmpname = NULL; + given_script = Qnil; for (argc--,argv++; argc > 0; argc--,argv++) { @@ -346,15 +345,17 @@ exit(2); } - if (!e_fp) { - e_tmpname = ruby_mktemp(); - if (!e_tmpname) rb_fatal("Can't mktemp"); - e_fp = fopen(e_tmpname, "w"); - if (!e_fp) { - rb_fatal("Cannot open temporary file: %s", e_tmpname); + n = strlen(s) + 1; + if (NIL_P(given_script)) { + given_script = rb_str_new(s, n); + if (!script) { + script = ruby_sourcefile_cmdline; + cmdline_script = given_script; + rb_global_variable(&cmdline_script); } - if (script == 0) script = e_tmpname; } - fputs(s, e_fp); - putc('\n', e_fp); + else { + rb_str_cat(given_script, s, n); + } + RSTRING(given_script)->ptr[RSTRING(given_script)->len - 1] = '\n'; break; @@ -492,12 +493,4 @@ if (*argvp[0] == 0) return; - if (e_fp) { - if (fflush(e_fp) || ferror(e_fp) || fclose(e_fp)) - rb_fatal("Cannot write to temp file for -e"); - e_fp = NULL; - argc++, argv--; - argv[0] = e_tmpname; - } - if (version) { ruby_show_version(); @@ -509,5 +502,5 @@ Init_ext(); /* should be called here for some reason :-( */ - if (script_given == Qfalse) { + if (NIL_P(given_script)) { if (argc == 0) { /* no more args */ if (ruby_verbose == 3) exit(0); @@ -539,4 +532,7 @@ } } + else { + rb_compile_string(script, given_script, 1); + } if (ruby_verbose) ruby_verbose = Qtrue; if (ruby_debug) ruby_debug = Qtrue; @@ -920,4 +916,10 @@ } +static VALUE +get_cmdline_script() +{ + return cmdline_script; +} + void ruby_process_options(argc, argv) @@ -945,11 +947,7 @@ rb_parser_while_loop(do_line, do_split); } - if (e_fp) { - fclose(e_fp); - e_fp = NULL; - } - if (e_tmpname) { - unlink(e_tmpname); - e_tmpname = NULL; + if (!NIL_P(cmdline_script)) { + rb_str_freeze(cmdline_script); + rb_define_singleton_method(rb_progname, "SOURCE", get_cmdline_script, 0); } } diff --recursive --unified=2 dist/lib/debug.rb build/lib/debug.rb --- dist/lib/debug.rb Fri Aug 13 14:45:16 1999 +++ build/lib/debug.rb Tue Oct 5 22:43:23 1999 @@ -26,4 +26,9 @@ @last = [nil, nil] @scripts = {} + if $0.respond_to?(:SOURCE) and $0.SOURCE + source = [] + $0.SOURCE.each {|line| source << line} + @scripts[$0] = source + end end
-- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦