diff options
author | Yukihiro Matsumoto <matz@ruby-lang.org> | 1995-02-21 18:56:56 +0900 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2019-08-17 22:09:31 +0900 |
commit | 2f106ab85c4f4e171374aee261f5a12bdd923c41 (patch) | |
tree | 6810f0a05ad8df30a269eb522eea5f77186b90c6 /ruby.c | |
parent | c080fb6d10bbcb697b6ba16e640de8db3f1973d0 (diff) |
version 0.67v0_67
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.66-0.67.diff.gz
Tue Feb 21 18:56:56 1995 Yukihiro Matsumoto (matz@ix-02)
* io.c(STDIN, STDOUT, STDERR): 定数として定義.今までの$stdinなど
は将来なくなるかも知れない.
* io.c(select): bug fix.
* version 0.67
Mon Feb 20 16:10:14 1995 Yukihiro Matsumoto (matz@ix-02)
* parse.y(yylex): 定数を`%識別子'から,第1文字が大文字の識別子に変
更.それにともないクラスは定数となった.
* eval.c: クラス定義内のselfがクラス定義外部のthe_classだった.
* variable.c(rb_name_class): クラス名をインスタンス変数に格納する.
Thu Feb 16 15:36:17 1995 Yukihiro Matsumoto (matz@ix-02)
* parse.y: BLOCKをbraceで表現する文法に変更したものを作ってみる.
MLに提示してみるが反応がない.
* object.c(do,forever): なくした.
Wed Feb 15 13:20:49 1995 Yukihiro Matsumoto (matz@ix-02)
* re.c(new): 第2引数が与えられて,かつnilでないときだけ設定するよ
うに(以前はnilの時にも設定を行なっていた).
* parse.y(parse_regexp): 正規表現リテラルで大文字小文字を無視する
かどうか指定できるように.
Tue Feb 14 00:55:33 1995 Yukihiro Matsumoto (matz@dyna)
* parse.y: (compexpr) -> (expr).
Fri Feb 10 16:30:00 1995 Yukihiro Matsumoto (matz@ix-02)
* ruby.c(load_file): scriptを読み込む時だけ"#!"の解析を行うように.
* ruby.c(readin): ファイル読み込み時に先頭に"#!"があり,rubyに引数
が与えられていれば,その引数も有効になる.
* parse.y(yylex): コメント行の終りが`\'であった時,次の行に継続し
ているとみなすようにした.
Diffstat (limited to 'ruby.c')
-rw-r--r-- | ruby.c | 82 |
1 files changed, 55 insertions, 27 deletions
@@ -52,7 +52,7 @@ char *rb_dln_argv0; #endif static void load_stdin(); -void rb_load_file(); +static void load_file(); static int do_loop = FALSE, do_print = FALSE; static int do_check = FALSE, do_line = FALSE; @@ -210,7 +210,7 @@ proc_options(argcp, argvp) script = dln_find_file(script, getenv("PATH")); if (!script) script = argv[optind]; } - rb_load_file(script); + load_file(script, 1); optind++; } } @@ -242,12 +242,13 @@ proc_options(argcp, argvp) } static void -readin(fd, fname) +readin(fd, fname, script) int fd; char *fname; + int script; { struct stat st; - char *ptr, *p, *pend; + char *ptr, *p, *pend, *s; if (fstat(fd, &st) < 0) rb_sys_fail(fname); if (!S_ISREG(st.st_mode)) @@ -259,39 +260,62 @@ readin(fd, fname) rb_sys_fail(fname); } pend = p + st.st_size; - if (xflag) { - char *s = p; + *pend = '\0'; + + if (script) { + if (xflag) { + xflag = FALSE; + while (p < pend) { + if (p[0] == '#' && p[1] == '!') { + char *s = p; + while (s < pend && *s != '\n') s++; + if (*s == '\n') { + *s = '\0'; + if (strstr(p, "ruby")) { + *s = '\n'; + goto start_read; + } + } + p = s + 1; + } + else { + while (p < pend && *p++ != '\n') + ; + if (p >= pend) break; + } + } + free(ptr); + Fail("No Ruby script found in input"); + } + + start_read: + if (p[0] == '#' && p[1] == '!') { + char *s = p, *q; - *pend = '\0'; - xflag = FALSE; - while (p < pend) { while (s < pend && *s != '\n') s++; - if (*s != '\n') break; - *s = '\0'; - if (p[0] == '#' && p[1] == '!' && strstr(p, "ruby")) { - if (p = strstr(p, "ruby -")) { + if (*s == '\n') { + *s = '\0'; + if (q = strstr(p, "ruby -")) { int argc; char *argv[2]; char **argvp = argv; - argc = 2; argv[0] = Qnil; argv[1] = p + 5; + argc = 2; argv[0] = Qnil; argv[1] = q + 5; proc_options(&argc, &argvp); + p = s + 1; + } + else { + *s = '\n'; } - xflag = TRUE; - p = s + 1; - goto start_read; } - p = s + 1; } - free(ptr); - Fail("No Ruby script found in input"); } - start_read: lex_setsrc(fname, p, pend - p); yyparse(); free(ptr); } -void -rb_load_file(fname) +static void +load_file(fname, script) char *fname; + int script; { int fd; char *ptr; @@ -303,10 +327,17 @@ rb_load_file(fname) fd = open(fname, O_RDONLY, 0); if (fd < 0) rb_sys_fail(fname); - readin(fd, fname); + readin(fd, fname, script); close(fd); } +void +rb_load_file(fname) + char *fname; +{ + load_file(fname, 0); +} + static void load_stdin() { @@ -324,9 +355,6 @@ load_stdin() putc(c, f); } fclose(f); - - if (fd < 0) rb_sys_fail(buf); - readin(fd, "-"); } |