[Gauche-devel-jp] Re: port-current-lineについて

Back to archive index

HIRAUCHI Hideyuki hira****@verys*****
2004年 2月 20日 (金) 21:45:56 JST


おはようございます。平内です。
#まさか、昨日の夜中に投げたメールが今日の夕方に届くとは。。。
#会社から帰ってきてびっくり。このメールは今日中に届くのか?


CRLF,LF時のpeekで行数がカウントアップされるバグを修正しました。
#Scm_Getcの引数を増やしたかったのだけど、挫折しました。
#結局、こんな変テコリンな方法になってしまった(末尾のパッチ参照)。


いや、しかし、どうも、SAFE_PORT_OP関連のマクロが強敵なんですよね。
このマクロを眺めていると頭が真っ白になって、何も出来なくなっちゃう。
全く手が動きません。

ああ、このマクロを無しにして、関数にinlineつけるっていう風にしたい。
それにinline化すると、下の4つの関数が簡単に作れるんですよね。

    1. getc                     ;mt-unsafe
    2. line_counter(getc)       ;mt-unsafe
    3. lock(getc)               ;mt-safe
    4. lock(line_counter(getc)) ;mt-safe

現状、2+with-port-locking,4が提供されてますが、ポートを開くときのオプションで
1-4を選べる、なんてのもありかなと。
>Javaのポートは設計としては綺麗だと思いますが、
>コンパイラがインライン展開しまくらない限り、
>性能を出すのが難しそうだなと思いました。
そうなんですよね。
やっぱりコードサイズの肥大化を懸念してます?コンパイラ依存の問題とか?

でも、まあ、ちょっと試しに、全面的にinlineを採用したportapi_inline.cを
書いてみようかと思ってます。それでどう変わるのか比べてみようと。
いま、CR対応のためにScm_Getcの引数に再帰レベルみたいな物が欲しいんですけど、
現状のportapi.cをいじろうとすると、私の頭は真っ白になってしまうので。。。

以下、パッチ(泣)

--hira


--- portapi.c.org	2004-02-20 20:10:50.579500000 +0900
+++ portapi.c	2004-02-20 20:18:54.298250000 +0900
@@ -301,14 +301,17 @@
 ScmChar Scm_PeekcUnsafe(ScmPort *p)
 #endif
 {
+    int line;
     ScmChar ch;
     VMDECL;
     SHORTCUT(p, return Scm_PeekcUnsafe(p));
     LOCK(p);
+    line = p->src.buf.line;
     if ((ch = SCM_PORT_UNGOTTEN(p)) == SCM_CHAR_INVALID) {
         ch = Scm_GetcUnsafe(p);
         SCM_PORT_UNGOTTEN(p) = ch;
     }
+    p->src.buf.line = line;
     UNLOCK(p);
     return ch;
 }




Gauche-devel-jp メーリングリストの案内
Back to archive index