summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1995-02-21 18:56:56 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 22:09:31 +0900
commit2f106ab85c4f4e171374aee261f5a12bdd923c41 (patch)
tree6810f0a05ad8df30a269eb522eea5f77186b90c6 /ruby.c
parentc080fb6d10bbcb697b6ba16e640de8db3f1973d0 (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.c82
1 files changed, 55 insertions, 27 deletions
diff --git a/ruby.c b/ruby.c
index 8029a3e026..50d4570607 100644
--- a/ruby.c
+++ b/ruby.c
@@ -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, "-");
}