[#11952] NORETURN — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

24 messages 2001/01/10
[#11956] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11957] Re: NORETURN — matz@... (Yukihiro Matsumoto) 2001/01/10

まつもと ゆきひろです

[#11958] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11959] CVS branches (Re: Re: NORETURN) — matz@... (Yukihiro Matsumoto) 2001/01/10

[#12087] string#index, gsub, []= のバグ? — Beyond <beyond@...>

18 messages 2001/01/27
[#12091] Re: string#index, gsub, []= のバグ? — matz@... (Yukihiro Matsumoto) 2001/01/27

まつもと ゆきひろです

[ruby-dev:12095] Re: DATA and __END__ on RubyWin

From: WATANABE Hirofumi <eban@...>
Date: 2001-01-27 16:23:58 UTC
List: ruby-dev #12095
わたなべです.

Masaki Suketa <CQN02273@nifty.ne.jp> writes:

:RubyWinはrb_load_protectを使ってスクリプトを実行しています。
:rb_load_protectだとDATAが未定義になってしまうみたいなのです
:が、何かいい方法ありませんか?

やはりparse.yのようにするしかないと思います。
st.hはC++からはincludeできないから対応しといたほうがいいかなあ。

-- 
わたなべひろふみ

--- docwin.cpp.orig	Sat Jan 27 00:00:00 2001
+++ docwin.cpp	Sun Jan 28 01:00:28 2001
@@ -492,2 +492,4 @@
 
+extern "C" int st_lookup(struct st_table *, char *, char **);
+
 LRESULT CALLBACK DocWin::IdmEvalBuffer(
@@ -505,3 +507,22 @@
     WriteFile(hwnd, tmpfname);
+    VALUE f = rb_file_open(tmpfname, "r");
+    VALUE line;
+    int __end__seen = 0;
+    while (!NIL_P(line = rb_io_gets(f))) {
+	char *pb = RSTRING(line)->ptr;
+	if (strncmp(pb, "__END__", 7) == 0 &&
+	    (RSTRING(line)->len == 7 || pb[7] == '\n' || pb[7] == '\r')) {
+		__end__seen = 1;
+		break;
+	}
+    }
+    if (__end__seen) {
+	VALUE data = rb_intern("DATA");
+	if (st_lookup(RCLASS(rb_cObject)->iv_tbl, (char *)data, 0)) {
+	    rb_mod_remove_const(rb_cObject, rb_str_new2("DATA"));
+	}
+	rb_define_global_const("DATA", f);
+    }
     int state = theRubyWin.run_file(tmpfname, szTitle);
+    rb_io_close(f);
     DeleteFile(tmpfname);

In This Thread