[#24395] "a".sum(32) is 0 — Tanaka Akira <akr@...17n.org>
次のように、"a".sum(32) が 0 になるのは変ではないでしょうか。
まつもと ゆきひろです
In article <1096716505.531808.29662.nullmailer@x31.priv.netlab.jp>,
[#24400] IO#read with 1 argument dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
[#24405] Auto stack growing on Mac OS X — Mitsuhiro Kondo <miche@...>
近藤と申します。
[#24413] Re: new NKF2拡張ライブラリ — "NARUSE, Yui" <naruse@...>
naruseです。
[#24444] ARGF.read(len) and EOF — Tanaka Akira <akr@...17n.org>
次のように、ARGF.read(len) から読み込もうとしたときに、引数にファイル
In article <1097228154.590547.23205.nullmailer@x31.priv.netlab.jp>,
[#24464] DelegateClass#clone — pegacorn@...
こんにちは。
From: pegacorn@jcom.home.ne.jp
まつもと ゆきひろです
From: Yukihiro Matsumoto <matz@ruby-lang.org>
[#24467] DBM#select: `select': wrong argument type false (expected Data) (TypeError) — Tanaka Akira <akr@...17n.org>
DBM#select を呼び出すと `select': wrong argument type false (expected
[#24481] can't build ruby 1.9.0 on mswin32 — 木村浩一 <kimura.koichi@...>
木村です。
わたなべです。
[#24493] Init_stack prototype — Tanaka Akira <akr@...17n.org>
eval.c 内で Init_stack が
[#24505] File::open and mode 'w+' — sheepman <sheepman@...>
こんにちは、sheepman です。
[#24507] test_truncate_rbuf fails — "URABE Shyouhei aka.mput" <root@...>
mput です。 make test-all で以下のエラーが出ています。
In article <80041A7C-2022-11D9-9FB0-000393735AAE@mput.dip.jp>,
なかだです。
In article <200410172227.i9HMRGnh016104@sharui.nakada.niregi.kanuma.tochigi.jp>,
[#24515] Marshal.load causes core dump — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
[#24519] raise dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
[#24536] 「Rubyの落し方」 v.s. ruby_1_8 — akira yamada / やまだあきら <akira@...>
<URL:http://jp.rubyist.net/magazine/?0002-RubyCore>
なかだです。
まつもと ゆきひろです
2004-10-20 (水) の 21:38 +0900 に Yukihiro Matsumoto さんは書きました:
2004-10-26 (火) の 16:16 +0900 に akira yamada / やまだあきら さんは書きました:
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
2004-10-27 (水) の 11:48 +0900 に Yukihiro Matsumoto さんは書きました:
2004-10-27 (水) の 12:42 +0900 に akira yamada / やまだあきら さんは書きました:
In article <1098888819.9446.14.camel@rice.p.arika.org>,
2004-10-29 (金) の 11:30 +0900 に Tanaka Akira さんは書きました:
まつもと ゆきひろです
永井@知能.九工大です.
[#24537] No warning when using alias with exsisting method name — SASADA Koichi <ko1@...>
ささだです。
[#24540] IO#readpartial dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
まつもと ゆきひろです
[#24594] unpack("p") dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
[#24595] NKF(nkf2)をCVS Headに入れます — "NARUSE, Yui" <naruse@...>
naruseです。
[#24621] Zlib::Deflate#flush_next_in causes core dump on 1.8 — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
[#24647] Re: oniguruma: big regexp dumps core — "K.Kosako" <kosako@...>
> 次のようにすると core を吐きます。
In article <20041030082637.6A78A33BFF@beryllium.ruby-lang.org>,
まつもと ゆきひろです
斉藤です。CVS の変更以来、鬼車はそう急がないだろうと
[ruby-dev:24391] reentrant lvtbl
なかだです。
lvtbl も parser_params に移動させてみました。
Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.347
diff -U2 -p -d -r1.347 parse.y
--- parse.y 27 Sep 2004 06:02:27 -0000 1.347
+++ parse.y 2 Oct 2004 07:48:59 -0000
@@ -97,4 +97,13 @@ union tmpyystype {
};
+struct local_vars {
+ ID *tbl;
+ int nofree;
+ int cnt;
+ int dlev;
+ struct RVarmap* dyna_vars;
+ struct local_vars *prev;
+};
+
/*
Structure of Lexer Buffer:
@@ -141,4 +150,5 @@ struct parser_params {
int parser_lex_gets_ptr;
VALUE (*parser_lex_gets) _((struct parser_params*,VALUE));
+ struct local_vars *parser_lvtbl;
#ifdef RIPPER
int parser_ruby__end__seen;
@@ -184,4 +194,5 @@ static int parser_yyerror _((struct pars
#define lex_gets_ptr (parser->parser_lex_gets_ptr)
#define lex_gets (parser->parser_lex_gets)
+#define lvtbl (parser->parser_lvtbl)
#ifdef RIPPER
#define ruby__end__seen (parser->parser_ruby__end__seen)
@@ -235,5 +246,6 @@ static NODE *new_super();
static NODE *new_yield();
-static NODE *gettable();
+static NODE *gettable_gen _((struct parser_params*,ID));
+#define gettable(id) gettable_gen(parser,id)
static NODE *assignable_gen _((struct parser_params*,ID,NODE*));
#define assignable(id,node) assignable_gen(parser, id, node)
@@ -250,20 +262,36 @@ static NODE *match_op_gen _((struct pars
#define match_op(node1,node2) match_op_gen(parser, node1, node2)
-static void local_push();
-static void local_pop();
-static int local_append();
-static int local_cnt();
-static int local_id();
-static ID *local_tbl();
-static ID internal_id();
+static void local_push_gen _((struct parser_params*,int));
+#define local_push(top) local_push_gen(parser,top)
+static void local_pop_gen _((struct parser_params*));
+#define local_pop() local_pop_gen(parser)
+static int local_append_gen _((struct parser_params*, ID));
+#define local_append(id) local_append_gen(parser, id)
+static int local_cnt_gen _((struct parser_params*, ID));
+#define local_cnt(id) local_cnt_gen(parser, id)
+static int local_id_gen _((struct parser_params*, ID));
+#define local_id(id) local_id_gen(parser, id)
+static ID *local_tbl_gen _((struct parser_params*));
+#define local_tbl() local_tbl_gen(parser)
+static ID internal_id _((void));
-static struct RVarmap *dyna_push();
-static void dyna_pop();
-static int dyna_in_block();
-static NODE *dyna_init();
+static struct RVarmap *dyna_push_gen _((struct parser_params*));
+#define dyna_push() dyna_push_gen(parser)
+static void dyna_pop_gen _((struct parser_params*, struct RVarmap*));
+#define dyna_pop(vars) dyna_pop_gen(parser, vars)
+static int dyna_in_block_gen _((struct parser_params*));
+#define dyna_in_block() dyna_in_block_gen(parser)
+static NODE *dyna_init_gen _((struct parser_params*, NODE*, struct RVarmap *));
+#define dyna_init(node, pre) dyna_init_gen(parser, node, pre)
-static void top_local_init();
-static void top_local_setup();
+static void top_local_init_gen _((struct parser_params*));
+#define top_local_init() top_local_init_gen(parser)
+static void top_local_setup_gen _((struct parser_params*));
+#define top_local_setup() top_local_setup_gen(parser)
+#else
+#define remove_begin(node) (node)
#endif /* !RIPPER */
+static int lvar_defined_gen _((struct parser_params*, ID));
+#define lvar_defined(id) lvar_defined_gen(parser, id)
#define RE_OPTION_ONCE 0x80
@@ -4801,5 +4829,5 @@ dispose_string(str)
VALUE str;
{
- free(RSTRING(str)->ptr);
+ xfree(RSTRING(str)->ptr);
rb_gc_force_recycle(str);
}
@@ -5171,5 +5199,6 @@ ripper_arg_ambiguous(parser)
static int
-lvar_defined(id)
+lvar_defined_gen(parser, id)
+ struct parser_params *parser;
ID id;
{
@@ -6511,4 +6540,8 @@ block_append(head, tail)
case NODE_LIT:
case NODE_STR:
+ case NODE_SELF:
+ case NODE_TRUE:
+ case NODE_FALSE:
+ case NODE_NIL:
parser_warning(h, "unused literal ignored");
return tail;
@@ -6731,5 +6764,6 @@ match_op_gen(parser, node1, node2)
static NODE*
-gettable(id)
+gettable_gen(parser, id)
+ struct parser_params *parser;
ID id;
{
@@ -7527,15 +7561,7 @@ new_super(a)
}
-static struct local_vars {
- ID *tbl;
- int nofree;
- int cnt;
- int dlev;
- struct RVarmap* dyna_vars;
- struct local_vars *prev;
-} *lvtbl;
-
static void
-local_push(top)
+local_push_gen(parser, top)
+ struct parser_params *parser;
int top;
{
@@ -7558,19 +7584,21 @@ local_push(top)
static void
-local_pop()
+local_pop_gen(parser)
+ struct parser_params *parser;
{
struct local_vars *local = lvtbl->prev;
if (lvtbl->tbl) {
- if (!lvtbl->nofree) free(lvtbl->tbl);
+ if (!lvtbl->nofree) xfree(lvtbl->tbl);
else lvtbl->tbl[0] = lvtbl->cnt;
}
ruby_dyna_vars = lvtbl->dyna_vars;
- free(lvtbl);
+ xfree(lvtbl);
lvtbl = local;
}
static ID*
-local_tbl()
+local_tbl_gen(parser)
+ struct parser_params *parser;
{
lvtbl->nofree = 1;
@@ -7579,5 +7607,6 @@ local_tbl()
static int
-local_append(id)
+local_append_gen(parser, id)
+ struct parser_params *parser;
ID id;
{
@@ -7600,5 +7629,6 @@ local_append(id)
static int
-local_cnt(id)
+local_cnt_gen(parser, id)
+ struct parser_params *parser;
ID id;
{
@@ -7614,5 +7644,6 @@ local_cnt(id)
static int
-local_id(id)
+local_id_gen(parser, id)
+ struct parser_params *parser;
ID id;
{
@@ -7627,5 +7658,6 @@ local_id(id)
static void
-top_local_init()
+top_local_init_gen(parser)
+ struct parser_params *parser;
{
local_push(1);
@@ -7645,5 +7677,6 @@ top_local_init()
static void
-top_local_setup()
+top_local_setup_gen(parser)
+ struct parser_params *parser;
{
int len = lvtbl->cnt;
@@ -7675,5 +7708,5 @@ top_local_setup()
}
if (ruby_scope->local_tbl && ruby_scope->local_vars[-1] == 0) {
- free(ruby_scope->local_tbl);
+ xfree(ruby_scope->local_tbl);
}
ruby_scope->local_vars[-1] = 0;
@@ -7685,5 +7718,6 @@ top_local_setup()
static struct RVarmap*
-dyna_push()
+dyna_push_gen(parser)
+ struct parser_params *parser;
{
struct RVarmap* vars = ruby_dyna_vars;
@@ -7695,5 +7729,6 @@ dyna_push()
static void
-dyna_pop(vars)
+dyna_pop_gen(parser, vars)
+ struct parser_params *parser;
struct RVarmap* vars;
{
@@ -7703,5 +7738,6 @@ dyna_pop(vars)
static int
-dyna_in_block()
+dyna_in_block_gen(parser)
+ struct parser_params *parser;
{
return (lvtbl->dlev > 0);
@@ -7709,5 +7745,6 @@ dyna_in_block()
static NODE *
-dyna_init(node, pre)
+dyna_init_gen(parser, node, pre)
+ struct parser_params *parser;
NODE *node;
struct RVarmap *pre;
@@ -8036,4 +8073,5 @@ special_local_set(c, val)
{
int cnt;
+ struct parser_params *parser = parser_new();
top_local_init();
@@ -8119,4 +8157,5 @@ parser_initialize(parser)
parser->parser_lex_p = 0;
parser->parser_lex_pend = 0;
+ parser->parser_lvtbl = 0;
#ifdef RIPPER
parser->parser_ruby_sourcefile = Qnil;
@@ -8151,9 +8190,16 @@ parser_free(ptr)
{
struct parser_params *p = (struct parser_params*)ptr;
+ struct local_vars *local, *prev;
if (p->parser_tokenbuf) {
- free(p->parser_tokenbuf);
+ xfree(p->parser_tokenbuf);
}
- free(p);
+ for (local = p->parser_lvtbl; local; local = prev) {
+ if (local->tbl && !local->nofree)
+ xfree(local->tbl);
+ prev = local->prev;
+ xfree(local);
+ }
+ xfree(p);
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦