summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1995-03-15 14:59:18 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 22:09:31 +0900
commitd349889e770a2078c247d9d28070e86a54b856f4 (patch)
tree8bdbf87f3ff78ef237c4ff8efa061fbb8dc5a226 /ruby.c
parent881c5a9c320c637ee0f6526b40cf70c1379ab656 (diff)
version 0.69v0_69
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.69.tar.gz Wed Mar 15 14:59:18 1995 Yukihiro Matsumoto (matz@ix-02) * version 0.69 * eval.c(method_missing): unknownから名称変更. * eval.c(single_method_added): 特異メソッドが定義された時に呼ばれ るメソッド.hookとして使える.実際に定義される直前に呼ばれる. Tue Mar 14 14:46:44 1995 Yukihiro Matsumoto (matz@ix-02) * ruby.c(proc_options): 引数の解析を自分でやることにより引数指定の 方法がperlに近付いた.getopt_longはもう使わない. * dir.c(glob): `{}'のネストを許すようにした. Mon Mar 13 17:56:25 1995 Yukihiro Matsumoto (matz@ix-02) * glob.c: Glob(ワイルドカードオブジェクト)はなくなった.ワイルドカー ドの展開はDir.glob(文字列)を使う.ワイルドカードのマッチは正規表 現で代用. Fri Mar 10 18:35:46 1995 Yukihiro Matsumoto (matz@ix-02) * eval.c: Mathのようなモジュールは自分自身でextendする. * eval.c: クラスやモジュールを定義した既に同名のものがあれば追加定 義となるように.ただし.superクラスの違いなどはチェックする. * regex.c: debug. * math.c: 定数PIとEを定義. Thu Mar 9 21:35:12 1995 Yukihiro Matsumoto (matz@ix-02) * regex.c: EUC,SJISモードでは0x80以上の8進,16進リテラルを禁止. * regex.c: クラス内でも数値リテラル・文字クラスが使えるようした. Wed Mar 8 17:39:05 1995 Yukihiro Matsumoto (matz@ix-02) * regex.c: \200など括弧の数以上の表現は8進リテラルと解釈する.ただ し,\1から\9までは例外. * regex.c: \9以上のリファレンスも有効にした. Tue Mar 7 14:26:01 1995 Yukihiro Matsumoto (matz@ix-02) * eval.c(public/private): スコープ制御メソッドの名称変更.静的なア クセスも出来るようにしてみたが,不採用. Mon Mar 6 19:34:32 1995 Yukihiro Matsumoto (matz@ix-02) * eval.c(inlcude): メソッド化.動的にモジュールをインクルードでき るように.さらに任意のオブジェクトにもモジュールをインクルードで きるメソッド `extend'も用意した. * parse.y: 文法からincludeを削除.メソッド化. Tue Feb 28 15:35:10 1995 Yukihiro Matsumoto (matz@ix-02) * parse.y: 配列,連想配列の最後に`,'をおけるように.
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c195
1 files changed, 112 insertions, 83 deletions
diff --git a/ruby.c b/ruby.c
index 87bb14ba24..7b029cd84c 100644
--- a/ruby.c
+++ b/ruby.c
@@ -18,20 +18,8 @@
#include <sys/stat.h>
#include <signal.h>
-#include "getopt.h"
-
static int version, copyright;
-static struct option long_options[] =
-{
- {"debug", 0, 0, 'd'},
- {"yydebug", 0, 0, 'y'},
- {"verbose", 0, 0, 'v'},
- {"version", 0, &version, 1},
- {"copyright", 0, &copyright, 1},
- {0, 0, 0, 0}
-};
-
int debug = 0;
int verbose = 0;
static int sflag = FALSE;
@@ -67,12 +55,11 @@ proc_options(argcp, argvp)
{
int argc = *argcp;
char **argv = *argvp;
+ int script_given, do_search;
+ char *s;
+
extern VALUE rb_load_path;
- extern char *optarg;
- extern int optind;
- int c, i, j, script_given, do_search, opt_index;
extern VALUE RS, ORS, FS;
- char *src;
if (argc == 0) return;
@@ -80,114 +67,155 @@ proc_options(argcp, argvp)
script_given = FALSE;
do_search = FALSE;
- optind = 0;
- while ((c = getopt_long(argc, argv, "+acC:de:F:i:I:lnpR:svxX:yS",
- long_options, &opt_index)) != EOF) {
- switch (c) {
+ for (argc--,argv++; argc > 0; argc--,argv++) {
+ if (argv[0][0] != '-' || !argv[0][1]) break;
+
+ s = argv[0]+1;
+ reswitch:
+ switch (*s) {
+ case 'a':
+ do_split = TRUE;
+ s++;
+ goto reswitch;
+
case 'p':
do_print = TRUE;
/* through */
case 'n':
do_loop = TRUE;
- break;
+ s++;
+ goto reswitch;
case 'd':
debug = TRUE;
- break;
+ s++;
+ goto reswitch;
case 'y':
yydebug = 1;
- break;
+ s++;
+ goto reswitch;
case 'v':
verbose = TRUE;
show_version();
- break;
+ s++;
+ goto reswitch;
+
+ case 'c':
+ do_check = TRUE;
+ s++;
+ goto reswitch;
+
+ case 's':
+ sflag = TRUE;
+ s++;
+ goto reswitch;
+
+ case 'l':
+ do_line = TRUE;
+ ORS = RS;
+ s++;
+ goto reswitch;
+
+ case 'S':
+ do_search = TRUE;
+ s++;
+ goto reswitch;
case 'e':
script_given++;
if (script == 0) script = "-e";
- lex_setsrc("-e", optarg, strlen(optarg));
+ if (argv[1]) {
+ lex_setsrc("-e", argv[1], strlen(argv[1]));
+ argc--,argv++;
+ }
+ else {
+ lex_setsrc("-e", "", 0);
+ }
yyparse();
break;
case 'i':
- inplace = strdup(optarg);
- break;
-
- case 'c':
- do_check = TRUE;
+ inplace = strdup(s+1);
break;
case 'x':
xflag = TRUE;
+ s++;
+ if (*s && chdir(s) < 0) {
+ Fatal("Can't chdir to %s", s);
+ }
break;
- case 'X':
- if (chdir(optarg) < 0)
- Fatal("Can't chdir to %s", optarg);
+ case 'F':
+ FS = str_new2(s+1);
break;
- case 's':
- sflag = TRUE;
- break;
+ case 'K':
+ s++;
+ rb_set_kanjicode(s);
+ s++;
+ goto reswitch;
- case 'l':
- do_line = TRUE;
- ORS = RS;
+ case 'I':
+ ary_unshift(rb_load_path, str_new2(s+1));
break;
- case 'R':
+ case '0':
{
- char *p = optarg;
-
- while (*p) {
- if (*p < '0' || '7' < *p) {
- break;
- }
- p++;
- }
- if (*p) {
- RS = str_new2(optarg);
+ int numlen;
+ int v;
+ char c;
+
+ v = scan_oct(s, 4, &numlen);
+ s += numlen;
+ if (v > 0377) RS = Qnil;
+ else if (v == 0 && numlen >= 2) {
+ RS = str_new2("\n\n");
}
else {
- int i = strtoul(optarg, Qnil, 8);
-
- if (i == 0) RS = str_new(0, 0);
- else if (i > 0xff) RS = Qnil;
- else {
- char c = i;
- RS = str_new(&c, 1);
- }
+ c = v & 0xff;
+ RS = str_new(&c, 1);
}
}
- break;
+ goto reswitch;
- case 'F':
- FS = str_new2(optarg);
- break;
+ case 'u':
+ case 'U':
- case 'a':
- do_split = TRUE;
- break;
-
- case 'C':
- rb_set_kanjicode(optarg);
- break;
-
- case 'S':
- do_search = TRUE;
- break;
-
- case 'I':
- ary_unshift(rb_load_path, str_new2(optarg));
+ case '-':
+ if (!s[1]) {
+ argc--,argv++;
+ goto switch_end;
+ }
+ s++;
+ if (strcmp("copyright", s) == 0)
+ copyright = 1;
+ else if (strcmp("debug", s) == 0)
+ debug = 1;
+ else if (strcmp("version", s) == 0)
+ version = 1;
+ else if (strcmp("verbose", s) == 0)
+ verbose = 1;
+ else if (strcmp("yydebug", s) == 0)
+ yydebug = 1;
+ else {
+ Fatal("Unrecognized long option: --%s",s);
+ }
break;
default:
+ Fatal("Unrecognized switch: -%s",s);
+
+ case 0:
break;
}
}
+ switch_end:
+ if (*argvp[0] == Qnil) return;
+
if (version) {
show_version();
exit(0);
@@ -196,28 +224,28 @@ proc_options(argcp, argvp)
show_copyright();
}
- if (argv[0] == Qnil) return;
+ rb_setup_kcode();
if (script_given == 0) {
- if (argc == optind) { /* no more args */
+ if (argc == 0) { /* no more args */
if (verbose) exit(0);
script = "-";
load_stdin();
}
else {
- script = argv[optind];
+ script = argv[0];
if (do_search) {
script = dln_find_file(script, getenv("PATH"));
- if (!script) script = argv[optind];
+ if (!script) script = argv[0];
}
load_file(script, 1);
- optind++;
+ argc--,argv++;
}
}
xflag = FALSE;
- *argvp += optind;
- *argcp -= optind;
+ *argvp = argv;
+ *argcp = argc;
if (sflag) {
char *s;
@@ -239,6 +267,7 @@ proc_options(argcp, argvp)
}
*argcp = argc; *argvp = argv;
}
+
}
static void