sigscheme

cygwin で落ちる問題

sizeof (ScmCell) と同根 (scm_malloc_aligned () の仕様変更) である事を確認。 追記: commit. と一応書いておく。ml-hook の問題はなかなか直らんのう。

posix_memalign () って確保できないときには与えられた pointer を NULL にするんだろうか。

alloc.c: #define ALIGN_CELL (sizeof(ScmCell)) /* 8-bytes alignment (not ScmCell alignment) is required by storage-compact. */ #define ALIGN_HEAP 8 [...] /* heaps must be aligned to sizeof(ScmCell) */ SCM_ASSERT(!((uintptr_t)p % ALIGN_HEAP)…

非生産的な日々

最近だらけまくり。ほとんど何もしてないに等しい。cygwin で落ちる件については sizeof (ScmCell) を直しても一部の crash しか直らなかったので、再調査。scm_gc_{,un}protect () と gc_mark_protected_var () に debug print を仕込んで protect された変…

cygwin だと落ちる件 within_heapp() の "rough conditions" で ptr % sizeof (ScmCell) が間違ってる。glibc とかだと 16 byte aligned な heap が約束されてるから cygwin にならないと発現しにくい模様。 追記: glibc でも 8 だた。何で他では発現しない…

scm_initialize_internal() が走るとき stack protect されてない

heap_size が小さくて初期化中に GC が走ると SEGV って死ぬ。

わざとなのか無意識なのか

* [...]The validation can reject any * hand-maid invalid environment objects. いや、それってこれなんですが(汗

macro benchmark さらに続き

前やったときは memory 使用量を調べなかったけど、valgrind を入れる余裕が出来たので (つーか、要らん source code 捨てたら緊急用の disk にも入ったんだけど…) 太田さんとこに書いてあったやり方で測ってみた。置く場所が無いので graph は掲載なし。Ema…

macro

そういえば macro.c の scm_intern("...") がそのままだた。static global にして stress test を計測し直し。 何か前より計測値がずっと安定してる。Kernel の version のせいか? なんか緊急用 disk で動かしてたときの custom 2.6.15 kernel って凄く不安…

おお、言い忘れてた

いくつかの test で unkown int bitwidth なる error が出ますが、どういう処理をしたいのか調べてない (調べたくない) のでそのままにしてあります。対応お願いします。

compact

Commit した。Testing utility をもう少し整理してたのでちょっと時間がかかったが。しかし、あんまり差は無いかな。Cutter に比べて良い点は main () が書ける。書かなくても良い。/usr/bin/cutter の役割は make が果たす。 test case の関数の名前をいち…

もうちょっと test を追加・整理したら commit しる。

やっぱり misc の抽象化構造が気に入らないので設計し直しを検討中。 追記: あんま得しなさそうなのでやめ。

GLOBALS trick

切る方法は無いんですか? これ。Storage API level での debug に死ぬ程邪魔なんですが。gdb で (gdb) p scm_g_instance_symbol.scm_symbol_hash_size Stringification is not implemented yet.とか出るし。

普通の program では gcc -g3 -ggdb で macro 定義を gdb から使えるですが、libtool で作った library の方に制御が飛ぶと使えなくなるぽいです。どうやって回避するんでしょうか。これ無しで debug しようとすると死にそうなんですが。そもそも初期化も完…

まだ build が通らねえ…

SCM_VECTOR_VALID_INDEXP vector の定義上、こいつが SAL_ なのはおかしいのでは。 SCM_ASSERT やっと compile でけた。とりあえず segfault するのでそこから。しかし assertion failure が「何が」失敗したかも言わずに死に腐るのが発狂させられそうなので…

ax_c___attribute__

"control may reach end of non-void function foo" の警告がうるさいのでちょっと調べてみたところ、__attribute__(()) が使えることを認識していないらしいとわかった。configure を覗いてみると、かなーりまずそうな出力が目に止まる。 cat >conftest.$ac…

ぎゃあああ

eval.c call(): void *argbuf[];どうしてくれよう。

#define MUST_POP_ARG(_lst) \ (CONSP(_lst) ? POP(_lst) : (ERR("missing argument(s)"), NULL)) ^^^^あーこれひどいなぁ (無害だけど)。私の書いたやつだ。 追記: ていうかこれはわざとだったような気がする。何かの拍子に ERR() が返ってくるような事があ…

gc_sweep(): new_freelist = l_freelist; /* l_freelist remains on manual GC */Comment の意味がよくわからない…

#if SCM_USE_VALUECONS ← gc_mark() は? SCM_GLOBAL_VARS_BEGIN(symbol); ScmObj *scm_symbol_hash; size_t scm_symbol_hash_size; SCM_GLOBAL_VARS_END(symbol); #define scm_symbol_hash SCM_GLOBAL_VAR(symbol, scm_symbol_hash) #define scm_symbol_hash…

storage-gc.c

ScmObj == ScmCell* の仮定がそこら中に…。compact.h では ScmObj == scm_uintobj_t だから警告だらけ…とほほ

まだ動かん

scm_g_instance_storage が見つからんと出る。Symbian bug workaround って default で on になってるの? 追記: #if SCM_USE_VALUECONS が抜けてますた。

うわぁ…

do-while(0) で囲ってある macro が動作しなくなってしまう。うーむ、void 型返すやつだけ特別扱いするしかないか。

一回で test が通るのはどうもおかしいと思ってたら、svn up 後にもう一度 build しようとしたら通らん。どうやら二つ config.h があった方の override される側を編集してた (?) か何かでぜーんぜん compact でない状態で build されてたらしい。 で、問題…

完全にやる気が失せてたのを奮い立ってとっとと完成。Testing framework の方はイマイチな出来になってしまった。これを「代替品だ」とほざいて commit するのは気がひけるので experimental に入れてみる。 しかし、肝心の compact.h だが…一発で test が全…

sed scripting 3

↓が、しかしまだ悩んでたりする。とりあえず \(\)*1に quantifier*2つけられへん実装書いた奴は氏ね。[1-9][0-9]* 回ぐらい氏ね。ASCII 文字の正規言語全体を表しきれん正規表現てどういう了見ですか。 追記: がしかし sed の branch command は腐っても Tur…

sed scripting 2

ぎゃあ こんな簡単なやり方を思いつかなかったなんて…

Bug と言えるような言えないような

#define SCM_GC_PROTECTED_CALL_INTERNAL(exp_ret, ret_type, func, args) \ do { \ /* ensure that func is uninlined */ \ ret_type (*volatile fp)() = (ret_type (*)())&func; \ ← ScmObj *stack_start; \ \ if (0) exp_ret func args; /* compile-time …

#define _UT_ASSERT_EQUAL_INTTYPE(type, escseq, expect, actual, message) \ if ((expect) == (actual)) \ ← { \ _UT_ASSERT(TRUE, ""); \ } else { \ /* To ensure that expect and actual are evaluated exactly \ ← * once, assign to another variable…