diff options
author | Yukihiro Matsumoto <[email protected]> | 1995-03-15 14:59:18 +0900 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2019-08-17 22:09:31 +0900 |
commit | d349889e770a2078c247d9d28070e86a54b856f4 (patch) | |
tree | 8bdbf87f3ff78ef237c4ff8efa061fbb8dc5a226 /ruby.c | |
parent | 881c5a9c320c637ee0f6526b40cf70c1379ab656 (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.c | 195 |
1 files changed, 112 insertions, 83 deletions
@@ -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, ©right, 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 |