[Anthy-dev 657] Re: uim 0.3.1 released

Back to archive index

Etsushi Kato ekato****@ees*****
2004年 3月 8日 (月) 12:53:03 JST


こんにちは。

On Fri, Mar 05, 2004 at 06:23:24PM +0900,
TOKUNAGA Hiroyuki <tkng****@xem*****> wrote:

>  了解です。あと、今さっき決心を固めまして、とりあえずromaja.scmと
> pyunihan.scmあたりを遅延読みこみさせるように変更しておきます。

まだ、romaja.scm が loader.scm に残っているようです。いずれにせよ、 
-s200000 だと、Mac OS X では tutcode.scm でスタックが足りなくなってし
まうようです。

そこで少し調べてみたところ、siod の lreadparen を再帰ではなく繰返しに
すればスタックをたくさん使わずにすみそうなので、変更してみました。結果、
Mac OS X でも -s200000 で OK になりました。また、romaja.scm とか、
pyunihan.scm を loader.scm に含んでも大丈夫です。

http://cvs.sourceforge.net/viewcvs.py/*checkout*/emu/speech_tools/siod/slib.cc?rev=1.1.1.2
から持ってきたものですが、どうでしょうこれ?


ところでインデントは揃えたつもりですが、どうやったら slib.c のように
書けるのでしょうか? vim では大変でした…
-- 
Etsushi Kato
ekato****@ees*****
-------------- next part --------------
--- uim-0.3.2/uim/slib.c.orig	Sun Mar  7 20:59:35 2004
+++ uim-0.3.2/uim/slib.c	Mon Mar  8 12:16:51 2004
@@ -905,6 +905,7 @@
   return (my_err ("token larger than TKBUFFERN", NIL));
 }
 
+#if 0
 static LISP
 lreadparen (struct gen_readio * f)
 {
@@ -926,6 +927,45 @@
     }
   return (cons (tmp, lreadparen (f)));
 }
+#else
+/* Iterative version of the above */
+static LISP
+lreadparen (struct gen_readio * f)
+{
+  int c;
+  LISP tmp, l = NIL;
+  LISP last = l;
+
+  while ((c = flush_ws(f, "end of file inside list")) != ')')
+    {
+      UNGETC_FCN (c,f);
+      tmp = lreadr (f);
+      if EQ
+	(tmp, sym_dot)
+	{
+	  tmp = lreadr (f);
+	  c = flush_ws (f, "end of file inside list");
+	  if (c != ')')
+	    my_err ("missing close paren", NIL);
+	  if (l == NIL)
+	    my_err("nor car for dotted pair", NIL);
+	  CDR (last) = tmp;
+	  break;
+	}
+      if (l == NIL)
+	{
+	  l = cons (tmp, NIL);
+	  last = l;
+	}
+      else
+	{
+	  CDR (last) = cons (tmp, NIL);
+	  last = cdr (last);
+	}
+    }
+  return l;
+}
+#endif
 
 static LISP
 readtl (struct gen_readio * f)


Anthy-dev メーリングリストの案内
Back to archive index