From 8bf1c909dc31fd4bcdc1488cda9fe89a62bc2830 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 19 May 1995 15:33:23 +0900 Subject: version 0.76 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.76.tar.gz Fri May 19 15:33:23 1995 Yukihiro Matsumoto * version 0.76 Fri May 19 00:48:08 1995 Yukihiro Matsumoto (matz@dyna) * string.c (Fstr_each): イテレータブロック中で文字列の変更が行われ たかどうかをチェック.ポインタの値が変わっていれば例外を発生する. * ruby-mode.el: ruby-electric-braceの新設. Thu May 18 12:27:23 1995 Yukihiro Matsumoto * string.c (Fstr_tr): trの置換対象に`\0'を含む時に正しく置換を行わ ないバグがあった.更に置換文字列をASCII順に指定しないと動作しな い問題もあった.結果としてtrを書き換えたので,copyrightの問題は 無くなった(と思う). * gc.c (gc): the_scopeをマークしていなかったので,ローカル変数が間 違って開放される場合があった. * gc.c (mark_locations_array): 若干の高速化. Mon May 15 11:43:49 1995 Yukihiro Matsumoto * ext/extmk.rb.in: Dynamic Loadモジュールのコンパイル用チェックを 行うruby script.autoconfに近い感覚で使える.新しいモジュールを 提供したい人はextの下にディレクトリを作るだけで良い.必須のファ イルはファイル名の一覧を記録した`MANIFEST'というファイルのみ.必 要に応じて`depend'(ファイルの依存関係を記述するファイル gcc -MM の出力),`extconf.rb'(コンパイル用にライブラリと関数の存在チェッ クするファイル)を用意できる. * eval.c (rb_call): rubyメソッドの引数チェック時に未初期化の jmp_bufを使用していた. * parse.y: `or'と`and'の優先順位を同じにした. Wed May 3 18:21:36 1995 Yukihiro Matsumoto (matz@dyna) * dln.c: Linuxでは`__.SYMDEF/'であった. * dln.c: system callのエラーチェックを忘れていた. Wed Apr 26 09:50:56 1995 Yukihiro Matsumoto (matz@ix-02) * parse.y: イテレータブロックの変数宣言を`|'で括るようにした.これ でイテレータ変数がない時は宣言そのものを省略できる.文法の変更は 久しぶりだ. Tue Apr 25 12:04:17 1995 Yukihiro Matsumoto (matz@ix-02) * eval.c(require): loadからダイナミックロードの機能を移してきた. さらに拡張子の補完機能を追加してユーザがdln/dlopenの差を意識する 必要のないようにした. * string.c(sub,sub): イテレータとしても動作するように. * object.c: init_object -> initialize. Mon Apr 24 14:22:39 1995 Yukihiro Matsumoto (matz@ix-02) * NEWS-OS 3.4対応 * io.c: Solarisのstdioの動作が違うようだ.signalでEOFを返してしま う….perlでも同様の問題がある. Fri Apr 21 20:04:39 1995 Yukihiro Matsumoto (matz@ix-02) * version 0.75 * signal.c: trapがなくなっていた.うーむ. * configure: Solaris 2.3対応. * io.c: #elifのないcppもある. * dir.c: autoconf 2.xへの対応が不十分 Thu Apr 20 12:31:24 1995 Yukihiro Matsumoto (matz@ix-02) * version 0.74 * env.h, gc.c, regex.c: IRIXへの移植対応 * configure: picを生成するoptionの検出のため,システムタイプをチェッ クするように. Tue Apr 18 19:08:17 1995 Yukihiro Matsumoto (matz@ix-02) * gc.c(xrealloc): ptr=nilの時,malloc()と同じ働きを * array.c(astore): 空の配列の0番目の要素に代入するとsize=0で realloc()を呼んでいた. * configure, glob.c: Solaris 2.xでコンパイルできるように --- gc.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) (limited to 'gc.c') diff --git a/gc.c b/gc.c index 0c2219a3ca..667e020942 100644 --- a/gc.c +++ b/gc.c @@ -6,7 +6,7 @@ $Date: 1995/01/12 08:54:47 $ created at: Tue Oct 5 09:44:46 JST 1993 - Copyright (C) 1995 Yukihiro Matsumoto + Copyright (C) 1993-1995 Yukihiro Matsumoto ************************************************/ @@ -20,6 +20,9 @@ void *malloc(); void *calloc(); void *realloc(); +#ifdef C_ALLOCA +void *alloca(); +#endif void gc(); void gc_mark(); @@ -61,6 +64,7 @@ xrealloc(ptr, size) { void *mem; + if (ptr == Qnil) return xmalloc(size); mem = realloc(ptr, size); if (mem == Qnil) { gc(); @@ -265,7 +269,7 @@ looks_pointerp(p) register RVALUE *p; { register RVALUE *heap_org; - register long i, j, n; + register long i; /* if p looks as a SCM pointer mark location */ for (i=0; i < heaps_used; i++) { @@ -282,14 +286,11 @@ mark_locations_array(x, n) VALUE *x; long n; { - int j; - VALUE p; - - for(j=0;jlocal_vars) - mark_locations_array(scope->local_vars, scope->local_tbl[0]); + if (scope->local_vars) { + int n = scope->local_tbl[0]; + VALUE *tbl = scope->local_vars; + + while (n--) { + gc_mark(*tbl); + tbl++; + } + } } break; @@ -571,7 +579,13 @@ void gc_mark_env(env) struct ENVIRON *env; { - mark_locations_array(env->argv, env->argc); + int n = env->argc; + VALUE *tbl = env->argv; + + while (n--) { + gc_mark(*tbl); + tbl++; + } } void @@ -579,7 +593,6 @@ gc() { struct gc_list *list; struct ENVIRON *env; - int i, max; jmp_buf save_regs_gc_mark; VALUE stack_end; @@ -594,6 +607,7 @@ gc() for (env = the_env; env; env = env->prev) { gc_mark_env(env); } + gc_mark(the_scope); FLUSH_REGISTER_WINDOWS; /* This assumes that all registers are saved into the jmp_buf */ -- cgit v1.2.3