[#12340] CGI#out — Shugo Maeda <shugo@...>
前田です。
[#12354] re: higher-resolution Time for Win32 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#12364] Dir::fnmatch? — "Akinori MUSHA" <knu@...>
[ruby-dev:12229] の、 Dir::fnmatch? の追加には特に問題や反対
まつもと ゆきひろです
[#12385] Re: NaN, Infinity (Bug?) — WATANABE Hirofumi <eban@...>
わたなべです。
[#12387] reducing logical operation — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
えぐち@エスアンドイー です。
なかだです。
えぐち@エスアンドイー です。
なかだです。
えぐち@エスアンドイー です。
木山です.
[#12404] fork in threads — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
なひです。
[#12405] at_exit — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
[#12415] — Koji Arai <JCA02266@...>
新井です。
[#12425] bignum % の結果が負数になることがある — Hisayasu Nakao <h-nakao@...>
最近、ruby-1.6.2を使い出したばかりの中尾です。
わたなべです。
In message <4518-Mon12Mar2001145434+0900-eban@os.rim.or.jp>
まつもと ゆきひろです
In message <984469222.234203.1007.nullmailer@ev.netlab.zetabits.com>
なかだです。
In message <200103131446.XAA22520@sharui.nakada.kanuma.tochigi.jp>
まつもと ゆきひろです
In message <984550885.417146.3670.nullmailer@ev.netlab.zetabits.com>
まつもと ゆきひろです
In message <984553493.009507.3747.nullmailer@ev.netlab.zetabits.com>
まつもと ゆきひろです
In message <984579430.080967.5569.nullmailer@ev.netlab.zetabits.com>
まつもと ゆきひろです
[#12483] sort! of empty array — Shin-ichiro HARA <sinara@...>
原です。
まつもと ゆきひろです
なひです。
[#12492] compile error on mswin32 — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
まつもと ゆきひろです
[#12513] SOLIBS — "Akinori MUSHA" <knu@...>
configure.in に以下のような修正を加えたいと思っています。
In message <86itlbdv32.wl@archon.local.idaemons.org>
[#12535] シンボリックリンクを含むパスを渡した時の Dir.glob() の動作 — tachino Nobuhiro <tachino@...>
[#12537] re-initialize ARGF — Masaki Suketa <masaki.suketa@...>
助田です。
[#12541] Thread.kill — Masatoshi SEKI <m_seki@...>
[#12570] compile error on ews48 — Koji Arai <JCA02266@...>
新井です。
[#12578] require 'win32api' — Kazuhiro NISHIYAMA <zn@...>
require 'win32api'のエラーメッセージがわかりにくいと
なかだです。
なかだです。
In <200103211407.XAA03408@sharui.nakada.kanuma.tochigi.jp>
なかだです。
In <200103220905.SAA01745@m3.gw.fujitsu.co.jp>
artonです。
[#12582] finalizer problem — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
[#12605] extern inline (ruby.h) ruby-1.6.3 — WATANABE Tetsuya <tetsu@...>
渡辺哲也です。
まつもと ゆきひろです
渡辺哲也です。
まつもと ゆきひろです
まつもと ゆきひろです
新井です。
[#12621] Marshal bug still remains — "Akinori MUSHA" <knu@...>
Marshal にまだバグが残っています。最新安定版で:
[#12623] [req] Symbol#intern — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
[#12672] segv on Continuation#call on C_ALLOCA system — Koji Arai <JCA02266@...>
新井です。
[#12674] Was: [rubyist:0454] Re: to_str — Kenichi Komiya <kom@...1.accsnet.ne.jp>
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
なかだです。
なかだです。
新井です。
なかだです。
まつもと ゆきひろです
[#12693] Re: [ruby-cvs] ruby/lib: * ext/extmk.rb.in, lib/mkmf.rb: move C++ rules to the right place. — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
At Wed, 28 Mar 2001 21:08:14 +0900,
[#12699] cross compile mingw-ruby on cygwin — Koji Arai <JCA02266@...>
新井です。
[ruby-dev:12338] Re: [ruby-list:28364] class definition extension
GOTO Kentaroさんの
<200103010709.QAA05044@hanare00.math.sci.hokudai.ac.jp>から
> >いや、だめじゃないと思いますよ。小迫さんがあれだけ苦労してい
> >るのを見てると、けっきょく今やろうとしている文法の曖昧性が高
> >すぎるということを意味してるんだと思います。となると、別の文
> >法マーク(<< や ( ) のような)を導入した方が人間にも優しいのか
> >もしれませんね。
>
> そうかも知れませんね。ぼくは ( ) 必須でも悪くないと思います。
> 目立つので注目できるという効果もありそうですし。
そうですね。
前回の方法は、面白いと思うんですが、
やっぱりやり過ぎでした。
式全体を()で括ることにして、実装してみました。
他の候補としては、良いかどうかは別として、
[]で括る方法でもconflictはありませんでした。
NODEの種類を追加してしまいました。
新規NODEの追加は、出来る限り避けたかったことなのですが、
他の方法は少し汚いので仕方ないようですね。
結局、中田さんのとほとんど同じです。
この機能、他のオブジェクト指向言語にありますか?
(この機能というより、クラスを何度も定義できること自体が
希少なのかな?)
昨日は定期健康診断だったので一日空いてしまいましたが、
皆さんの意見が聞けたので、ちょうどよかったです。
使用例
$a = String
class ($a); p(self == ::Object::String); end
class ((1 < 2).type); p self; end
module M; end
m = Array[M]
module (m[0])
def bar; p self; end
end
--- node.h Wed Feb 14 14:51:57 2001
+++ /home/kosako/ruby/node.h Fri Mar 2 07:44:59 2001
@@ -99,6 +99,8 @@
NODE_CLASS,
NODE_MODULE,
NODE_SCLASS,
+ NODE_OCLASS,
+ NODE_OMODULE,
NODE_COLON2,
NODE_COLON3,
NODE_CREF,
@@ -311,7 +313,9 @@
#define NEW_UNDEF(i) rb_node_newnode(NODE_UNDEF,0,i,0)
#define NEW_CLASS(n,b,s) rb_node_newnode(NODE_CLASS,n,NEW_CBODY(b),(s))
#define NEW_SCLASS(r,b) rb_node_newnode(NODE_SCLASS,r,NEW_CBODY(b),0)
+#define NEW_OCLASS(c,b,s) rb_node_newnode(NODE_OCLASS,c,NEW_CBODY(b),(s))
#define NEW_MODULE(n,b) rb_node_newnode(NODE_MODULE,n,NEW_CBODY(b),0)
+#define NEW_OMODULE(m,b) rb_node_newnode(NODE_OMODULE,m,NEW_CBODY(b),0)
#define NEW_COLON2(c,i) rb_node_newnode(NODE_COLON2,c,i,0)
#define NEW_COLON3(i) rb_node_newnode(NODE_COLON3,0,i,0)
#define NEW_CREF0() (cur_cref=RNODE(ruby_frame->cbase))
--- lex.c Tue May 30 13:24:01 2000
+++ /home/kosako/ruby/lex.c Fri Mar 2 06:42:58 2001
@@ -76,7 +76,7 @@
{"else", kELSE, kELSE, EXPR_BEG},
{"case", kCASE, kCASE, EXPR_BEG},
{"ensure", kENSURE, kENSURE, EXPR_BEG},
- {"module", kMODULE, kMODULE, EXPR_BEG},
+ {"module", kMODULE, kMODULE, EXPR_CLASS},
{"elsif", kELSIF, kELSIF, EXPR_BEG},
{"def", kDEF, kDEF, EXPR_FNAME},
{"rescue", kRESCUE, kRESCUE_MOD, EXPR_END},
--- parse.y Mon Feb 26 14:29:00 2001
+++ /home/kosako/ruby/parse.y Fri Mar 2 07:30:25 2001
@@ -200,7 +200,7 @@
%token <val> tINTEGER tFLOAT tSTRING tXSTRING tREGEXP
%token <node> tDSTRING tDXSTRING tDREGEXP tNTH_REF tBACK_REF
-%type <node> singleton string
+%type <node> singleton string cmobj
%type <val> literal numeric
%type <node> compstmt stmts stmt expr arg primary command command_call method_call
%type <node> if_tail opt_else case_body cases rescue exc_list exc_var ensure
@@ -1271,6 +1271,24 @@
cref_pop();
class_nest--;
}
+ | kCLASS cmobj
+ {
+ if (in_def || in_single)
+ yyerror("class definition in method body");
+ class_nest++;
+ cref_push();
+ local_push();
+ $<num>$ = ruby_sourceline;
+ }
+ compstmt
+ kEND
+ {
+ $$ = NEW_OCLASS($2, $4, 0);
+ nd_set_line($$, $<num>3);
+ local_pop();
+ cref_pop();
+ class_nest--;
+ }
| kCLASS tLSHFT expr
{
$<num>$ = in_def;
@@ -1313,6 +1331,24 @@
cref_pop();
class_nest--;
}
+ | kMODULE cmobj
+ {
+ if (in_def || in_single)
+ yyerror("module definition in method body");
+ class_nest++;
+ cref_push();
+ local_push();
+ $<num>$ = ruby_sourceline;
+ }
+ compstmt
+ kEND
+ {
+ $$ = NEW_OMODULE($2, $4);
+ nd_set_line($$, $<num>3);
+ local_pop();
+ cref_pop();
+ class_nest--;
+ }
| kDEF fname
{
if (in_def || in_single)
@@ -1773,6 +1809,24 @@
$$ = $2;
}
| none
+
+cmobj : '(' {lex_state = EXPR_BEG;} expr opt_nl ')'
+ {
+ switch (nd_type($3)) {
+ case NODE_STR:
+ case NODE_DSTR:
+ case NODE_XSTR:
+ case NODE_DXSTR:
+ case NODE_DREGX:
+ case NODE_LIT:
+ case NODE_ARRAY:
+ case NODE_ZARRAY:
+ yyerror("can't define class/module for literals.");
+ default:
+ break;
+ }
+ $$ = $3;
+ }
singleton : var_ref
{
--- eval.c Wed Feb 28 15:30:03 2001
+++ /home/kosako/ruby/eval.c Fri Mar 2 08:01:56 2001
@@ -3104,6 +3104,32 @@
}
break;
+ case NODE_OCLASS:
+ {
+ VALUE klass;
+
+ if (NIL_P(ruby_class)) {
+ rb_raise(rb_eTypeError, "no outer class/module");
+ }
+
+ klass = rb_eval(self, (NODE* )node->nd_cname);
+ if (!klass || TYPE(klass) != T_CLASS) {
+ rb_raise(rb_eTypeError, "class definition target is not a class");
+ }
+ if (rb_safe_level() >= 4) {
+ rb_raise(rb_eSecurityError, "extending class prohibited");
+ }
+ rb_clear_cache();
+
+ if (ruby_wrapper) {
+ rb_extend_object(klass, ruby_wrapper);
+ rb_include_module(klass, ruby_wrapper);
+ }
+
+ result = module_setup(klass, node->nd_body);
+ }
+ break;
+
case NODE_MODULE:
{
VALUE module;
@@ -3131,6 +3157,30 @@
module = rb_define_module_id(node->nd_cname);
rb_const_set(ruby_class, node->nd_cname, module);
rb_set_class_path(module,ruby_class,rb_id2name(node->nd_cname));
+ }
+ if (ruby_wrapper) {
+ rb_extend_object(module, ruby_wrapper);
+ rb_include_module(module, ruby_wrapper);
+ }
+
+ result = module_setup(module, node->nd_body);
+ }
+ break;
+
+ case NODE_OMODULE:
+ {
+ VALUE module;
+
+ if (NIL_P(ruby_class)) {
+ rb_raise(rb_eTypeError, "no outer class/module");
+ }
+
+ module = rb_eval(self, (NODE* )node->nd_cname);
+ if (!module || TYPE(module) != T_MODULE) {
+ rb_raise(rb_eTypeError, "module definition target is not a module");
+ }
+ if (rb_safe_level() >= 4) {
+ rb_raise(rb_eSecurityError, "extending module prohibited");
}
if (ruby_wrapper) {
rb_extend_object(module, ruby_wrapper);
----
小迫@ソフネック 渋谷区恵比寿1-15-1