Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sporadic errors in srfi-207 tests #900

Closed
shirok opened this issue May 27, 2023 · 11 comments
Closed

Sporadic errors in srfi-207 tests #900

shirok opened this issue May 27, 2023 · 11 comments
Milestone

Comments

@shirok
Copy link
Owner

shirok commented May 27, 2023

Sporadically, srfi-207-test.scm fails with the following error:

test (%bytestring->SNB test-bstring): expects "#u8\"lorem\"" => got #<<error> "No applicable method for write-object with (#u8(108 111) #t)">

It is perplexing for there seems no randomness involved around the tests. It looks like #t is given as the port argument of write. Couldn't find a path that can cause such a situation.

shirok added a commit that referenced this issue May 31, 2023
#900
Couldn't nail it yet, will investigate, but this suppresses the error
for thte time being.
@shirok
Copy link
Owner Author

shirok commented May 31, 2023

Nah, 02687aa suppressed the symptom in my local machine but still fails in github actions. Speed or load may be a factor?

@shirok
Copy link
Owner Author

shirok commented Jun 2, 2023

  • When it happens, it's always in the last test of check-io in srfi-207-test.scm. The exact data that causes the failure vary.
  • Isolating that test won't cause the symptom.
  • It doesn't seem that a specific code executed prior to the test is a cause. The less is executed, the less chance we observe the failure.
  • The last call stack is %write-walk-rec to write-object generic function. At the point of error, port in local env becomes #t. (And the obj argument is somehow always #u8(108 111)).
VM 0x7f2cb45f0c00 -----------------------------------------------------------
   pc: 0x7f2cb50acd80  [  141(0x7f2cb50ac918)] (PRE-CALL(1))
   sp: 0x7f2cb45f23d0  [0x7f2cb45f2000-0x7f2cb45f2000-0x7f2cb4605880]
 argp: 0x7f2cb45f23c0
 val0: #<generic write-object (15)>
 envs:
   0x7f2cb45f2370 (%write-walk-rec obj port tab)
       up=0x7f2cacd42288 size=3
       [ #<hash-table eq? 0x7f2cabc15d20> #t #u8(108 111) ]
   0x7f2cacd42288 #f
       up=(nil) size=1
       [ #<closure ((%write-walk-rec #:G1725) #:G1722)> ]
conts:
   0x7f2cb45f2388
              env = 0x7f2cb45f2370
             size = 0
             base = 0x7f2cb50aa408  %write-walk-rec
               pc = 0x7f2cb50acd80[  141(0x7f2cb50ac918)] (PRE-CALL(1))
   0x7f2cb45f2320::#<prompt-tag "default-prompt-tag">
              env = 0x7f2cb45f22b8
             size = 0
             base = 0x7f2caba6ac60  write-textual-bytestring
               pc = 0x7f2cb51922b0 (RET)
   0x7f2cb45f22d0
              env = 0x7f2cb45f22b8
             size = 0
             base = 0x7f2caba6ac60  write-textual-bytestring
               pc = 0x7f2cabb96780[  240(0x7f2cabb96000)] (PRE-CALL(2))

  • However, %write-walk-rec is never called with such argument if we monitor the entry of the function. That suggests the stack is clobbered in some way.
  • Another mystery is that, enabling call trace, the immediate call log shows the calls in gauche.vport, related to the output uvector port, whereas write-textual-bytestring does not use it.
Call Trace:
_______________________________________
  0  ((setter getter) #:G39 #:G40 ((cut max <> max-index) (getter  ...
        at "libmacro.scm":834
  1  (uvector-size (%storage-buffer storage))
        at "/home/shiro/src/Gauche/src/../lib/gauche/vport.scm":120
  2  (uvector-size (%storage-buffer storage))
        at "/home/shiro/src/Gauche/src/../lib/gauche/vport.scm":120
  3  (write-textual-bytestring bstring #:G639)
  4  (call-with-output-string (cut write-textual-bytestring bstrin ...
        at "././../../test/include/srfi-207-test.scm":126

@shirok
Copy link
Owner Author

shirok commented Jun 5, 2023

It is very unsettling, but it went away. We can't reproduce it anymore, so close this for now.

@shirok shirok closed this as completed Jun 5, 2023
@shirok
Copy link
Owner Author

shirok commented Jun 12, 2023

It started appearing again. Reopening.

@shirok shirok reopened this Jun 12, 2023
@Hamayama
Copy link
Contributor

原因までは分かっていませんが、以下のログが取れたので共有しておきます。

OS : Windows 10 (version 22H2) (64bit)
開発環境 : MSYS2/MinGW-w64 (64bit) (gcc version 13.1.0 (Rev7, Built by MSYS2 project))
Gauche : コミット 3734214 (2023-7-10)

mintty上で実行しました。正常に終了するときもあります。

Gauche は 2023-7-10 のもので少し古いです。

$ gosh test/include/srfi-207-test.scm

;;; Running constructor tests...
Checking (bytestring "lo" #\r 101 #u8(109)), expecting #u8(108 111 114 101 109) => ok
Checking (bytestring), expecting #u8() => ok
Checking (catch-bytestring-error (bytestring 256)), expecting bytestring-error => ok
Checking (catch-bytestring-error (bytestring "λ")), expecting bytestring-error => ok

;;; Running conversion tests...
Checking (bytevector->hex-string test-bstring), expecting "6c6f72656d" => ok
Checking (hex-string->bytevector "6c6f72656d"), expecting #u8(108 111 114 101 109) => ok
Checking (catch-bytestring-error (hex-string->bytevector "c6f72656d")), expecting bytestring-error =
> ok
Checking (catch-bytestring-error (hex-string->bytevector "6czf72656d")), expecting bytestring-error
=> ok
Checking (equal? (hex-string->bytevector (bytevector->hex-string homer)) homer), expecting #t => ok
Checking (hex-string->bytevector (bytevector->hex-string #u8())), expecting #u8() => ok
Checking (bytevector->base64 test-bstring), expecting "bG9yZW0=" => ok
Checking (bytevector->base64 #u8(255 239 255)), expecting "/+//" => ok
Checking (bytevector->base64 #u8(255 239 255) "*@"), expecting "@*@@" => ok
Checking (equal? (bytevector->base64 homer) homer64), expecting #t => ok
Checking (bytevector->base64 #u8(1)), expecting "AQ==" => ok
Checking (bytevector->base64 #u8()), expecting "" => ok
Checking (base64->bytevector "bG9yZW0="), expecting #u8(108 111 114 101 109) => ok
Checking (base64->bytevector "/+//"), expecting #u8(255 239 255) => ok
Checking (base64->bytevector "@*@@" "*@"), expecting #u8(255 239 255) => ok
Checking (equal? (base64->bytevector homer64) homer), expecting #t => ok
Checking (equal? (base64->bytevector homer64-w) homer), expecting #t => ok
Checking (base64->bytevector "AQ=="), expecting #u8(1) => ok
Checking (base64->bytevector ""), expecting #u8() => ok
Checking (base64->bytevector "\n\n\n==\t\r\n"), expecting #u8() => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (bytestring->list #u8()), expecting () => ok
Checking (bytestring->list (bytestring 70 82 0 66)), expecting (#\F #\R 0 #\B) => ok
Checking (bytestring->list (bytestring "\x07;\t\t\n" 200)), expecting (7 9 9 10 200) => ok
Checking (make-bytestring (bytestring->list test-bstring)), expecting #u8(108 111 114 101 109) => ok
Checking (make-bytestring (bytestring->list test-bstring 2)), expecting #u8(114 101 109) => ok
Checking (make-bytestring (bytestring->list test-bstring 1 3)), expecting #u8(111 114) => ok
Checking (begin (make-bytestring! bvec 0 '(108 111 114 101 109)) bvec), expecting #u8(108 111 114 10
1 109) => ok
Checking (begin (make-bytestring! bvec 2 '(*** ERROR: No applicable method for write-object with (#u
8(108 111) #t)
    While loading "./test/include/srfi-207-test.scm" at line 444
Stack Trace:
_______________________________________
  0  (write-object obj port)
  1  (open-input-conversion-port inp fromcode :to-code tocode :buf ...
  2  (ces-convert (x->string str/char) ces2 ces)
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/os/windows/console/codep
age.scm":187
  3  (string->u8vector (ces-convert (x->string str/char) ces2 ces))
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/os/windows/console/codep
age.scm":186
  4  (write-uvector (string->u8vector (ces-convert (x->string str/ ...
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/os/windows/console/codep
age.scm":186
  5  (f argptr port ctrl)
  6  (fmt argptr port ctrl)
  7  #(lvar thunk #f 1 0)
  8  (format #t "Checking ~s, expecting ~s => ok\n" name expected)
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/srfi/78.scm":95
  9  (do-check *global-results* '(begin (make-bytestring! bvec 2 ' ...
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/srfi/78.scm":110
        expanded from (check (begin (make-bytestring! bvec 2 '("lo" #\r 101 ...
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/srfi/78.scm":112
        expanded from (check (begin (make-bytestring! bvec 2 '("lo" #\r 101 ...
        at "./test/include/srfi-207-test.scm":201
 10  (check-conversion)
        at "./test/include/srfi-207-test.scm":433
 11  (eval s #f)
 12  (with-error-handler (lambda (e) (cond (else (let1 e2 (if (con ...
 13  (load-from-port (if ignore-coding port (open-coding-aware-por ...

@shirok
Copy link
Owner Author

shirok commented Aug 20, 2023

同じ箇所ですね。アーキテクチャにかかわらず発生するので、ロジックのバグだと思います。#<port> が渡ってくるはずの第二引数が #t になってるんですが、それが起きるパスがどうしても見つけられない。

@Hamayama
Copy link
Contributor

少ししぼり込みました。こちらの環境では、以下のソースでほぼ再現します。

ただ、何回目で発生するかはランダムです。

また、テスト自体は成功しており、そのまま続きのテストを実行していると、
割り込みのような感じでエラーが挙がってくるようです。

<再現用ソース>

(import (scheme base))
(import (scheme write))
(import (srfi 207))
(import (srfi 78))

(define-syntax catch-bytestring-error
  (syntax-rules ()
   ((_ expr)
    (guard (condition ((bytestring-error? condition) 'bytestring-error)
                      (else #f))
      expr))))

(let loop ((count 1000))
  (check (catch-bytestring-error
          (base64->bytevector "bG9@frob")) => 'bytestring-error)
  (when (> count 1)
    (loop (- count 1)))))

<実行結果>

$ gosh test/include/srfi-207-test.scm
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error => ok
Checking (catch-bytestring-error (base64->bytevector "bG9@frob")), expecting bytestring-error*** ERR
OR: No applicable method for write-object with (#u8(108 111) #t)
    While loading "./test/include/srfi-207-test.scm" at line 17
Stack Trace:
_______________________________________
  0  (write-object obj port)
  1  (open-input-conversion-port inp fromcode :to-code tocode :buf ...
  2  (ces-convert (x->string str/char) ces2 ces)
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/os/windows/console/codep
age.scm":187
  3  (string->u8vector (ces-convert (x->string str/char) ces2 ces))
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/os/windows/console/codep
age.scm":186
  4  (write-uvector (string->u8vector (ces-convert (x->string str/ ...
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/os/windows/console/codep
age.scm":186
  5  (f argptr port ctrl)
  6  (fmt argptr port ctrl)
  7  #(lvar thunk #f 1 0)
  8  (format #t "Checking ~s, expecting ~s => ok\n" name expected)
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/srfi/78.scm":95
  9  (do-check *global-results* '(catch-bytestring-error (base64-> ...
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/srfi/78.scm":110
        expanded from (check (catch-bytestring-error (base64->bytevector "b"...
        at "C:\\Program Files\\Gauche\\share\\gauche-0.98\\0.9.13_pre4\\lib/srfi/78.scm":112
        expanded from (check (catch-bytestring-error (base64->bytevector "b"...
        at "./test/include/srfi-207-test.scm":14
 10  (eval s #f)
 11  (with-error-handler (lambda (e) (cond (else (let1 e2 (if (con ...
 12  (load-from-port (if ignore-coding port (open-coding-aware-por ...

@Hamayama
Copy link
Contributor

もう少し調べて、gauche.vport のみになりました。

Gauche 0.9.9 でも再現するので、昔からかも。

<再現用ソース>

(use gauche.vport)

(let loop ((count 10000))
  (guard (e (else (format #t "~s~%" e)))
    (let ((out (open-output-uvector)))
      (with-output-to-port out
        (lambda ()
          (write-byte  111)
          (write-byte  108)
          (error "TEST-ERROR")
          ))))
  (when (> count 1)
    (loop (- count 1))))

<実行結果>

$ gosh test/include/srfi-207-test.scm
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR">
#<error "TEST-ERROR*** ERROR: No applicable method for write-object with (#u8(111 108) #t)
    While loading "./test/include/srfi-207-test.scm" at line 13
Stack Trace:
_______________________________________
  0  (write-object obj port)
  1  (open-input-conversion-port inp fromcode :to-code tocode :buf ...
  2  (ces-convert (x->string str/char) ces2 ces)
        at "C:\\Program Files\\Gauche\\share\\gauche-0.9Unhandled error occurred during reporting an
 error.  Process aborted.

@shirok
Copy link
Owner Author

shirok commented Aug 24, 2023

おお、最後のやつは私の手元でも再現できました。これで捗ります。多謝!

@shirok
Copy link
Owner Author

shirok commented Aug 25, 2023

10d5be5 で出るエラーメッセージが変わりますが、エラーの直接原因は同じです。%write-walk-rec のport引数に#tが渡ってくるという。

あと、ファイナライザが関係している可能性があります。上記バグ再現コードで、ループ内で(gc)するようにしたら手元でエラーが出なくなりました。output-uvector-portのゴミがたまってまとめてファイナライズされる時に何か起きてるのかもしれません。ただし、問題のエラーはファイナライザの外で発生します。

@shirok shirok added this to the 0.9.13 milestone Aug 26, 2023
@shirok
Copy link
Owner Author

shirok commented Aug 29, 2023

OK, we caught it. It's a finalization ordering issue.

When a virtual buffered port is made, a structure struct bport_rec is allocated to hold Scheme handlers and it is set to the port's data field. When the port become unreachable and garbage, the bport_rec structure also becomes garbage (unless it is pointed from elsewhere).

We use unordered mode of the bdwgc's finalizer. That means it is not guaranteed that a heap object pointed from an object being finalized is retained. When a port's finalizer is invoked, it is possible that the object pointed by its data field has already been collected and reused. That's what's happening here.

Finalizers are always a hairy stuff. It should be considered a last resort. All we can do is that vport would check if bport_rec structure is alerady collected, and if so, we just don't do anything. The check can be done using bdwgc's dissapearing link feature, but it's better to have an abstract API instead of directly calling bdwgc's API.

@shirok shirok closed this as completed in a6f4f9b Aug 30, 2023
shirok added a commit that referenced this issue Sep 1, 2023
As the issue #900 revealed, allocating extra data for a port
complicates finalization.  Since file ports are very frequently
used, and we want to release fd upon finalization, we diectly
save fd in the port structure.  For this, an idata field is added
to ScmPortBuffer.
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this issue Feb 11, 2024
Changelog:

2024-01-25  Shiro Kawai  <shiro@acm.org>

	* Release 0.9.14

2024-01-23  Shiro Kawai  <shiro@acm.org>

	* ext/charconv/jconv.c (jconv_open): If input and output encoding are
	  the same but not supported natively, use pass-through transcoder
	  instead of delegating it to iconv.  Some verion of iconv doesn't
	  seem to like it.
	  https://github.com/shirok/Gauche/issues/979

	* src/number.c (double_precision): Fix ratnum->flonum failure when
	  when either denominator or numerator is 2^(64n-1).
	  https://github.com/shirok/Gauche/issues/981

2024-01-22  Shiro Kawai  <shiro@acm.org>

	* src/libnum.scm (real-ln): Fix precision loss of taking log on
	  a large bignum. https://github.com/shirok/Gauche/issues/980

2024-01-21  Shiro Kawai  <shiro@acm.org>

	* lib/data/priority-map.scm: Allow any comparator as key-comparator;
	  we switch hashtable and treemap internally.  Then dict->priority-map
	  can take the given dictionary's key-comparator.

2024-01-20  Shiro Kawai  <shiro@acm.org>

	* lib/data/priority-map.scm (dictionary->priority-map),
	  (alist->priority-map): Added.

	* lib/text/multicolumn.scm (display-multicolumn): Add indent keyword
	  arg.

2024-01-19  Shiro Kawai  <shiro@acm.org>

	* src/gauche-package.in ("info"): Add 'gauche-package info' command.

2024-01-16  Shiro Kawai  <shiro@acm.org>

	* lib/data/random.scm: Switch the handling of current random source.
	  Now the procedures consistently captures the value of the
	  current random source at the time of creation of generators.
	  This is technically an incompatible change.
	  https://github.com/shirok/Gauche/issues/977

2024-01-15  Shiro Kawai  <shiro@acm.org>

	* lib/srfi/194.scm, lib/srfi/194/*.scm: Completing srfi-194 support.

2024-01-12  Shiro Kawai  <shiro@acm.org>

	* src/compile-5.scm (pass5/$DYNENV): Fixed a bug that when KEY or
	  VALUE of with-continuation-mark is a procedure call, its result
	  becomes the result of with-continuation-mark.

	* lib/data/random.scm (reals-between$): The range calculation was
	  broken.

2024-01-09  Shiro Kawai  <shiro@acm.org>

	* src/libfmt.scm (format-internal), src/libmacro.scm: Experimentally
	  introduce formatter cache.  The compiler determines "potentially
	  cacheable" call of `format`, and the runtime takes advantage of it
	  if possible.  The drawback is that the compiler macro now inserts
	  reference to `format-internal`.  It's embedded in the precompiled
	  code and We can't change its API across versions.

2024-01-08  Shiro Kawai  <shiro@acm.org>

	* src/libfmt.scm (formatter-parse): Support conditional directive
	  (tilde left-bracket).

2023-12-30  Shiro Kawai  <shiro@acm.org>

	* src/error.c (Scm_MessageConditionPrint): Extend the error message
	  truncation limit so that unexpected exception can give more info.

2023-12-29  Shiro Kawai  <shiro@acm.org>

	* ext/tls/tls-mbed.c (mbed_write): If the data is big, single
	  mbedtls_ssl_write may return with partial write, so we need
	  to retry to send the rest of the data.

2023-12-28  Shiro Kawai  <shiro@acm.org>

	* 0.9.14_pre1.  Preparing another release to make TLS addition
	  available.

2023-12-17  Shiro Kawai  <shiro@acm.org>

	* libsrc/file/util.scm (build-path): Allow 'cwd and 'cld as base-path
	  argument, for current workding directory and current loading
	  directory, respectively.  We've seen enough of this pattern,
	  especially the latter, so it's worth having it.

2023-12-10  Shiro Kawai  <shiro@acm.org>

	* ext/charconv: Support utf8bom encoding, which drops the optional BOM
	  at the beginning of utf8 stream.  We simply implement utf8bom->utf8
	  internal routine, and use autosynthesis of other conversions.
	  We don't support utf8bom as an output encoding, at least for now
	  (see the discussion in the issue).
	  https://github.com/shirok/Gauche/issues/966

	* src/librx.scm (%regexp-replace): Avoid rebinding current-output-port
	  during replacing, for the substitution procedure may output
	  and it's confusing that it is mixed into the result.
	  https://github.com/shirok/Gauche/issues/967

2023-12-06  Shiro Kawai  <shiro@acm.org>

	* src/string.c (string_putc): Make 'write' escape control characters
	  in strings so that it's easier if hard-to-see characters are there,
	  e.g. Zero-width no-break space.

2023-12-03  Shiro Kawai  <shiro@acm.org>

	* src/libthr.scm (run-once): Added.
	  (<mutex>, <condition-variable>, <thread-local>): Export these.
	  Class names are not in SRFI-19, but now that threads are in the
	  core, other parts of core may refer to them. (Notably, precomp
	  now needs them).

2023-11-29  Shiro Kawai  <shiro@acm.org>

	* src/gencomp: Removed.  This is an ancient script, superseded by
	  precomp long ago.

2023-11-25  Shiro Kawai  <shiro@acm.org>

	* src/system.c (Scm_ToTimeSpec): More general interface that takes
	  the base time (t0) when relative time is given.  Passing NULL
	  to t0 uses the current time.
	  Scm_GetTimeSpec() is defined on top of it.  We thought to drop it,
	  but this API may have been used from other extensions, so we may
	  keep it.

2023-11-24  Shiro Kawai  <shiro@acm.org>

	* src/builtin-sym.scm: Rearranged predefined symbols.
	  It's been for long time since we made builtin-syms.h private,
	  so no external code should depend on the order of them anymore.

	* src/system.c (Scm_GetTimeSpec): Allow negative real number
	  for relative time specification.  For the timeout argument,
	  we don't need that, but for general time operation it is useful.
	  Also support relative time specification with time-duration time.

2023-11-21  Shiro Kawai  <shiro@acm.org>

	* lib/control/pmap.scm (run-map): Terminate threads when
	  timeout reaches with fully-concurrent-mapper.
	  https://github.com/shirok/Gauche/issues/964

	* src/libsys.scm (absolute-time): Added.  Handy to canonicalize
	  'timeout' argument.

2023-11-20  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/unit.scm (<cgen-dummy-unit>): Initialize
	  cgen-current-unit with a dummy instance which issues error message
	  saying <cgen-unit> isn't set up properly.  It is better than
	  'object of class #<class <boolean>> doesn't have such slot'.

2023-11-19  Shiro Kawai  <shiro@acm.org>

	* src/libmod.scm (module-exports?, module-binds?, module-binding-ref):
	  Introduced new names in place of global-variable-visible?,
	  global-variable-bound? and global-variable-ref.
	  See https://github.com/shirok/Gauche/issues/963

2023-11-18  Shiro Kawai  <shiro@acm.org>

	* src/libmod.scm (global-variable-visible?): Added.
	  https://github.com/shirok/Gauche/issues/936

	* ext/tls/tls.scm (tls-connect, tls-bind): Make proto argument
	  optional.  DTLS is not very usable now, so there's little point
	  to allow users to specify udp here.
	* ext/tls: Add tls-poll

2023-11-17  Shiro Kawai  <shiro@acm.org>

	* ext/tls: Support get self/peer address, option to not verify
	  certificate.

2023-11-15  Shiro Kawai  <shiro@acm.org>

	* doc/: Support epub generation from @qykth-git
	 https://github.com/shirok/Gauche/pull/959

2023-11-14  Shiro Kawai  <shiro@acm.org>

	* ext/tls: Support TLS server connection.

2023-11-10  Shiro Kawai  <shiro@acm.org>

	* ext/tls: Remove AxTLS support.

	* src/module.c (Scm__InitModule): Remove obsoleted code to create
	  built-in srfi modules.  Now it is done in auto-generated libsrfi.scm
	  so they're no longer needed, but had been harmless until we switch
	  srfi-N to srfi.N naming convention.

	* lib/slib.scm (slib:features): Exclude srfi-0 from slib:features
	  to prevent slib initializer to load all available srfis, especially
	  srfi.29.  It is mentioned in the comment immediately above, but
	  I seem to have reverted the change when I updated slib.scm based
	  on a newer template. https://github.com/shirok/Gauche/issues/960

2023-11-03  Shiro Kawai  <shiro@acm.org>

	* libsrc/file/util.scm (remove-directory*): Add :if-does-not-exit
	  argument

2023-10-27  Shiro Kawai  <shiro@acm.org>

	* src/system.c (Scm__WinFastLockLock): Fast lock implementation for
	  Windows (by @Hamayama, https://github.com/shirok/Gauche/pull/955)

2023-10-26  Shiro Kawai  <shiro@acm.org>

	* src/bignum.c (bignum_mul_si): Optimize special case when bignum
	  muliplied by y=2^n (y is fixnum).

2023-10-24  Shiro Kawai  <shiro@acm.org>

	* lib/r7rs-setup.scm (open-binary-*-file): Even though Gauche
	  doesn't distinguish textual and binary ports, opening file as
	  binary may have an observable difference on Windows ('binary' mode).

2023-10-22  Shiro Kawai  <shiro@acm.org>

	* src/core.c (Scm_ObjToExitCode): Consolidate exit code translation
	  to be shared between 'exit', 'sys-exit', and 'emergency-exit'.
	  https://github.com/shirok/Gauche/issues/947
	* src/libeval.scm (exit), lib/r7rs-setup.scm (emergency-exit),
	  src/libsys.scm (sys-exit): Allow to take #f as code, which
	  is mapped to exit code 1.

2023-10-21  Shiro Kawai  <shiro@acm.org>

	* lib/srfi/74.scm: Fix blob-*-set! procedures.

	* lib/check-script, lib/tools/check-script: Move check-script
	  to tools subdirectory.

2023-10-15  Shiro Kawai  <shiro@acm.org>

	* Drop eucjp, sjis and none internal CES support.  We use utf8
	  exclusively from now on.

2023-10-14  Shiro Kawai  <shiro@acm.org>

	* Various files: Remove code with GAUCHE_API_VERSION < 98

2023-10-11  Shiro Kawai  <shiro@acm.org>

	* Release 0.9.13

2023-10-07  Shiro Kawai  <shiro@acm.org>

	* Rename gauche-default-encoding -> default-file-encoding

2023-10-05  Shiro Kawai  <shiro@acm.org>

	* src/char.c (Scm_DefaultEncodingName, gauche-default-encoding),
	  src/libio.scm (open-input-file, open-output-file),
	  ext/charconv/convaux.scm (%open-input-file/conv),
	  (%open-output-file/conv): Add support fo gauche-default-encoding,
	  the encoding to be used when no :encoding option is given when
	  performing I/O.
	  https://github.com/shirok/Gauche/issues/944

2023-10-04  Shiro Kawai  <shiro@acm.org>

	* src/core.c (init_cond_features): Define feature identifier
	  'full-unicode' only when Gauche is compiled with utf8 encoding.

2023-10-03  Shiro Kawai  <shiro@acm.org>

	* src/gauche/priv/writerP.h (SCM_WRITTEN_ELLIPSIS): Revert
	  using Unicode ellipsis to three dots for truncated output.
	  Windows terminals may not be able to handle Unicode ellipsis
	  (U+2026) depending on the OS default codepage, and it
	  triggers an error.

2023-10-01  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/json.scm (print-instance): If :json-name slot definition
	  option is #t, use slot's name as the key.

2023-09-26  Shiro Kawai  <shiro@acm.org>

	* libsrc/text/console.scm, lib/text/console/windows.scm:
	  Allow console to cache screen size.  query-screen-size
	  may return cached results, unless the optional clear-cache
	  argument is true. reset-terminal clears the cache so that
	  next query-screen-size takes the actual screen size.
	* libsrc/text/line-edit.scm: Consider screen size to show
	  completion candidates.  The screen size may be cached, but
	  updetad by refresh-display.

2023-09-24  Shiro Kawai  <shiro@acm.org>

	* src/libexc.scm, src/libthr.scm: Expose thread exception API
	  from gauche.threads module to match the document.  It was
	  defined in gauche module before, but that doesn't make sense.

	* src/liblazy.scm (make-promise), lib/r7rs-setup.scm:
	  Move R7RS make-promise into scheme.lazy, and make built-in
	  make-promise compatible to SRFI-226.  This is technically
	  an incompatible change, but we've only documented make-promise
	  under scheme.lazy, so no code should be affected.

2023-09-22  Shiro Kawai  <shiro@acm.org>

	* lib/srfi/226/parameter.scm (parameterize-srfi-226): If you
	  use srfi.226, 'parameterize' is strictly limited to the
	  srfi-226 compatible parmeters.

2023-09-20  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/literal.scm (literal-value=?): Optimized.

	* src/port.c: Reduce overhead of string port creation.  A significant
	  one is to omit registering finalizers, for they're not needed for
	  string ports.  Also a couple of micro-optimizations.

2023-09-19  Shiro Kawai  <shiro@acm.org>

	* src/parameter.c: Fix semantics of thread parameter.  To conform
	  SRFI-226, mutation of dyncamically bound thread parameter shoudln't
	  be visible from other threads.  Thus we need a fresh thread local
	  for every dynamic scope.  On the other hand, legacy parameters
	  only requires thread locals for the global scope.

	* src/threadlocal.c: Allow thread locals to be GC-ed and reused.
	  Each thread local storage keeps 'generation' along its value.
	  The generation is incremented when a thread local is GC-ed.
	  The next thread local which happens to use the same slot has
	  a different generation, so it can detect the slot is uninitialized,
	  even its value is not SCM_UNBOUND.

2023-09-14  Shiro Kawai  <shiro@acm.org>

	* src/proc.c (proc_print): Allow a procedure to have a custom
	  printer.  Scheme abstracts some kind of special constructs
	  as proceudres, e.g. parameters and continuations.  It is nice
	  if we have a specialized printer to display info specific
	  to such construct, rather than the generic procedure printer
	  which can only show procedure-info.

2023-09-13  Shiro Kawai  <shiro@acm.org>

	* src/write.c (write_object_fallback): If base class has print()
	  function pointer and derived class doesn't have write-object
	  method, we use base class's print() func instead of the
	  default printer.

2023-09-12  Shiro Kawai  <shiro@acm.org>

	* src/parameter.c, src/libparam.scm (make-legacy-parameter):
	  Added.  See https://github.com/shirok/Gauche/issues/935

2023-09-10  Shiro Kawai  <shiro@acm.org>

	* libsrc/gauche/process.scm (do-process): Add :exit-code option
	  to :on-abnormal-exit keyword arg
	  https://github.com/shirok/Gauche/issues/928

2023-09-09  Shiro Kawai  <shiro@acm.org>

	* libomega.scm: Add additional report for unbound variable error -
	  list modules that exports the name.  It may help the user
	  to import necessary module.

2023-09-08  Shiro Kawai  <shiro@acm.org>

	* libexc.scm, libomega.scm: Rename report-mixin-condition
	  to report-additional-condition, so that non-mixin condition
	  can also have customized error report.

2023-09-07  Shiro Kawai  <shiro@acm.org>

	* src/error.c (Scm_MakeUnboundVariableError): Let evaluator throw
	  <unbound-variable> error for unbound variable.

2023-09-06  Shiro Kawai  <shiro@acm.org>

	* lib/tools/docprep: Renamed from preprocess-info.  The plan is to
	  make it handle common doc preparation tasks.

2023-08-31  Shiro Kawai  <shiro@acm.org>

	* lib/tools/get-cacert: Moved from ext/tls/tls/get-cacert.scm,
	  for it's a runnable tool.

	* tools/preprocess-info: Support '@c DEPRECATED' to mark deprecated
	  APIs.

2023-08-29  Shiro Kawai  <shiro@acm.org>

	* src/port.c, src/gauche/priv/portP.h: Fix the issue that port finalizer
	  causes access to already collected object.  It was the cause of
	  https://github.com/shirok/Gauche/issues/900
	  Note that a custom port's flusher and closer are no longer called
	  from the port finalizer if the custom structure is already
	  collected.  If the custom port requires guaranteed cleanup,
	  it should attach its own finalizer to the custom port's heap
	  allocated object.  In general, port's finalizer should be regarded
	  as a fail-safe mechanism, and explicit closing is recommended.

2023-08-27  Shiro Kawai  <shiro@acm.org>

	* ext/gauche/bitvector.scm (bitvector-pad, bitvector-pad-right):
	  Fix to handle the case length argument is smaller than the length
	  of the given bitvector.  For the consistency with string-pad,
	  the bitvector should be truncated.
	  https://github.com/shirok/Gauche/issues/922

2023-08-26  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/hmac.scm: Revise API to suit for typical usage.

2023-08-25  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/base64.scm, lib/rfc/quoted-printable.scm: Revise API.
	  The encoder now can take both string and u8vector, and renamed
	  to *-encode-message to reflect the generic nature.
	  The decoder now takes target class, and renamed to *-decode-string-to.
	  The latter is consistent with message digest framework.
	  The existing APIs are kept for the backward compatibility.

	* src/libmacro.scm (typecase, etypecase): Added.

	* lib/rfc/digest.scm: Allow digest-string-to to take predefined
	  encoding targets, e.g. base64 or hex.

	* lib/rfc/base64.scm: Implement Base32, Base32hex and Base16 as
	  specified in RFC4648.

2023-08-24  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/hmac.scm, lib/util/digest.scm: Add API to return digest
	  result as <u8vector>.

	* src/libio.scm (%write-walk-rec): Avoid recursing into write-object
	  when obj is a <uvector>.  This doesn't change the result, but
	  saves time.

2023-08-22  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/json.scm (<json-mixin>): A convenient mapping from Gauche
	  instance to JSON.

	* lib/rfc/base64.scm (base64-encode): Added omit-padding keyword arg.
	  Some protocol asks to do so, e.g. JWS (rfc7515).

	* src/Makefile.in (clean-to-regenerate): Add a new target just to clean
	  Gauche-generated files.  Useful to regenerate them, but no need to
	  start from reconfigure.

2023-08-17  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/precomp.scm: Use packed debug info in the precompiled
	  C code.  This reduces compiled *.o files about 10-20%.

2023-08-11  Shiro Kawai  <shiro@acm.org>

	* doc/modutil.texi: Start documenting text.info.  It is not particulary
	  featureful, but having been used for quite a while and may be worth
	  documenting.

2023-08-09  Shiro Kawai  <shiro@acm.org>

	* src/memo.c (Scm_MemoTablePutv): Workaround for table extension
	  failure.  https://github.com/shirok/Gauche/issues/914

2023-08-07  Shiro Kawai  <shiro@acm.org>

	* lib/control/scheduler.scm (scheduler-reschedule!): Allow to change
	  only time or duration argument, leaving the other intact.

2023-08-04  Shiro Kawai  <shiro@acm.org>

	* src/compile-1.scm (pass1/extended-lambda-body): Expand :optional
	  handling hygienically.

2023-08-01  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/cookie.scm (construct-cookie-string): Catch up to
	  RFC6265.  We no longer need Version attribute, and both Expires
	  and Max-Age are honored unconditionally.
	  https://github.com/shirok/Gauche/issues/911

2023-07-23  Shiro Kawai  <shiro@acm.org>

	* src/libio.scm, src/string.c, lib/gauche/interactive.scm:
	  Add string-length slot to <write-controls>, which can limit the
	  display length of strings.
	  https://github.com/shirok/Gauche/issues/908

	* src/libstr.scm (string-ellipsis), lib/gauche/pputil.scm, etc.:
	  EXPERIMENTAL: If native CES is utf-8, use Unicode ellipsis (U+2026)
	  instead of three periods when the output is truncated.
	  We hope it makes easier to distinguish whether the output is actually
	  truncated, or there is indeed an ellipsis in the data.

2023-07-20  Shiro Kawai  <shiro@acm.org>

	* src/port.c, src/portapi.c: Remove port terminal mode; it was a wrong
	  abstraction, for multiple ports can be connected to a terminal.
	  The actual issue https://github.com/shirok/Gauche/issues/877 has
	  been addressed with termios.

2023-07-19  Shiro Kawai  <shiro@acm.org>

	* libsrc/text/console.scm (call-with-console), src/portapi.c:
	  Fix port terminal mode handling.

2023-07-16  Shiro Kawai  <shiro@acm.org>

	* src/portapi.c: (Scm_Putc, Scm_Puts, Scm_Putz): Honor port terminal
	  mode.
	* ext/termios/termios.scm: Switch port terminal mode along the
	  actial terminal state changes.

2023-07-15  Shiro Kawai  <shiro@acm.org>

	* src/port.c (Scm_GetPortTerminalMode, Scm_SetPortTerminalMode):
	Added.  This is to address managing output while editable REPL
	is active. https://github.com/shirok/Gauche/issues/877

	* tools/make-export-list: Added.

2023-07-14  Shiro Kawai  <shiro@acm.org>

	* src/libnum.scm (logset+clear): Added.

2023-07-06  Shiro Kawai  <shiro@acm.org>

	* src/hash.c, src/libdict.scm (%current-recursive-hash), src/module.c,
	  src/libomega.scm (object-hash):
	  Make %current-recursive-hash a proper parameter.
	  https://github.com/shirok/Gauche/issues/879
	  NB: This commit drops Scm_CurrentRecursiveHash().  It has only been
	  used from libdict.scm.  Technically this is incompatible change,
	  but we bet nobody else depend on this.

2023-07-04  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/uuid.scm (parse-uuid): Add if-invalid keyword argument to
	  return #f for invalid uuid format, rather than raising an error.

2023-07-03  Shiro Kawai  <shiro@acm.org>

	* doc/extract.scm, lib/tools/preprocess-info: Rename extract script
	  and make it avaialble as a tool script.

2023-06-20  Shiro Kawai  <shiro@acm.org>

	* lib/srfi/216.scm, src/srfis.scm: Support SRFI-216, SICP prerequisites.

2023-06-12  Shiro Kawai  <shiro@acm.org>

	* src/libvec.scm, ext/uvector/uvector.scm: Move string <-> uvector
	  conversion routines to core, to avoid dependency issues.

2023-06-11  Shiro Kawai  <shiro@acm.org>

	* src/genstub, lib/tools/genstub: Move genstub to tools subdir.

	* lib/gauche/parseopt.scm: Allow omitting whitespace between
	  single-letter option and its argument.
	  https://github.com/shirok/Gauche/issues/904

2023-06-09  Shiro Kawai  <shiro@acm.org>

	* src/precomp, lib/tools/precomp: Start moving standard scripts
	  to tools/ namespace, e.g. one will say 'gosh tools/precomp ...'
	  instead of 'gosh precomp ...'.
	  https://github.com/shirok/Gauche/issues/891

2023-06-07  Shiro Kawai  <shiro@acm.org>

	* src/precomp, lib/gauche/cgen/precomp.scm: Add --omit-debug-source-info
	  option to drop debug-source-info from the generated compiled-code
	  literals.  This can be used for: (1) The generated C file gets too
	  big, or (2) user wants to hide the source info for application
	  distribution.
	* src/Makefile.in: Use --omit-debug-source-info to generate compile.c
	  for now.  Adding source info makes compile.c too big to compile
	  on memory-tight machines.  Note: We may be able to revert this
	  once we split compile.c.
	* ext/uvector/Makefile.in: Ditto for gauche--uvector.c

2023-06-06  Shiro Kawai  <shiro@acm.org>

	* src/precomp, lib/gauche/cgen/precomp.scm: Rename omit-source-info
	  keyword arg to omit-line-directives.  We'll add option to omit
	  debug source info in the output, so the previous name is too
	  confusing.
	  Although this flag is in the output of 'usage' of precomp command,
	  it has never been implemented as a command-line option; the flag
	  can be turned on via an environment variable, which is not
	  documented.  So we blatantly change the name without caring
	  the backard compatibility.

	* src/code.c (Scm_CompiledCodeFinishBuilder): Revive NOSOURCE
	  compiler flag (it's been ineffective after some big compiler
	  rewrite).
	  For now, we handle source-info just the same and discard them
	  at the last moment of the code generation.  We may as well ignore
	  source-info in earlier stage, but we expect using this option
	  is relatively rare so it may not worth doing so.  Let's see.

2023-06-05  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/procedure.scm: Renamed to procutil.scm for the
	  consistency.

2023-06-04  Shiro Kawai  <shiro@acm.org>

	* gc/: bumped bdwgc 8.2.4

2023-06-02  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/precomp.scm (serializable-debug-info): Attach
	  debug info to the precompiled codes.

	* src/vm.c (Scm_VMTakeSnapshot): Added.  Since VMDump calls high-level
	  output routine that may call back to Scheme code, the dump routine
	  itself may change VM state during dumping.  To prevent that, we
	  take snapshot of VM before dumping.

2023-05-29  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/numerical.scm, lib/gauche/logical.scm,
	  lib/gauche/signal.scm: Renamed to numutil.scm, logutil.scm and
	  sigutil.scm, respectively, for the consistency of autoloaded files.

2023-05-23  Shiro Kawai  <shiro@acm.org>

	* src/thread.c (Scm_ThreadTerminate): Support
	  SCM_THREAD_TERMINATE_SCHEDULE flag.
	* src/libthr.scm (thread-schedule-terminate!): Added.

	* lib/r7rs-setup.scm, src/libexc.scm, src/liblazy.scm:
	  Move raise-continuable and make-promise to the core, for
	  they are exported from srfi.226 as well.

2023-05-22  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/base64.scm (base64-decode): Add :strict keyword argument.

2023-05-20  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/mop/typed-slot.scm: Added experimentally.

2023-05-19  Shiro Kawai  <shiro@acm.org>

	* libsrc/gauche/sequence.scm (inverse-permuter, unpermute): Added.
	  The names can be better.  Let's see.

2023-05-16  Shiro Kawai  <shiro@acm.org>

	* src/libio.scm (port-case-fold): Drop port-case-fold-set! (previously
	  undocumented) and replace (setter port-case-fold), for the API
	  consistency.  A few references to the old name in the source tree
	  are updated.  NB: lib/gauche/cgen/precomp.scm is used to compile
	  0.9.13, so it needs to work on both old and new gosh.  For now,
	  we use an ugly kludge for transition.
	  Also put port-case-fold in gauche.internal.  case-fold flag has
	  global effect and accidentally changing it can cause a wreak havoc.
	  There are already scope-delimited way to change the mode (#!fold-case
	  directive, or include-ci form).
	* 0.9.13_pre4, because of the above change.

2023-05-09  Shiro Kawai  <shiro@acm.org>

	* ext/package-templates/configure-compat: Remove compatibility hack.
	  Let's assume new modules are developed for 0.9.10 and later.

2023-05-08  Shiro Kawai  <shiro@acm.org>

	* src/main.c, src/libeval.scm (%invoke-other-version): Extend -v option
	  so that -v:VERSION tries to run VERSION, but if it can't find one,
	  falls back to the current version.

	* lib/gauche/fileutil.scm, src/libsys.scm: Move glob to libsys.scm.
	  Before, '%invoke-other-version' triggered autoload of fileutil,
	  but that caused some issue when the user use gosh -vVERSION
	  from the uninstalled source tree.

2023-05-01  Shiro Kawai  <shiro@acm.org>

	* src/libnum.scm: Dropped hidden real-only versions of elementary
	  functions, e.g. %sin, replacing with SRFI-94 real-sin etc.
	  They were never documented.  Now we document real-* version.
	* lib/compat/real-elementary-functions: Compatibility module to
	  provide the old names such as %sin etc.

2023-04-17  Shiro Kawai  <shiro@acm.org>

	* src/lazy.c (Scm_VMForce): Fix a race condition; there was a hazard
	  when one thread reads promise's state and goes to evaluate thunk,
	  while another thread changes them simultaneously.

2023-04-14  Shiro Kawai  <shiro@acm.org>

	* ext/gauche/unicode.scm (string-east-asian-width, string-take-width)
	  (string-drop-width): Added.

2023-04-13  Shiro Kawai  <shiro@acm.org>

	* src/class.c: Changed my mind.  Say :immutable instead of :init-once,
	  for the option is exacly for immutable slots.  Besides, init-once
	  is weird, for 'initialization' occurs once regardless of slot's
	  immutablility.  (Set-once would probably have been closer.)

2023-04-12  Shiro Kawai  <shiro@acm.org>

	* src/class.c: Support :init-once slot option.  This limits slot-set!
	  to a slot that's previously unbound.  If the slot already has a value,
	  an error is signaled.  This effectively works as an immutable
	  slot.  Note that the slot initialization calls the internal setter,
	  so we need to allow the first set!.

	* ext/threads, src/thread.c, src/mutex.c, src/libthr.scm,
	  src/gauche/thread.h: Move ext/threads into core.
	  Cf. https://github.com/shirok/Gauche/issues/893

2023-04-09  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/base64.scm (base64-encode-bytevector),
	  (base64-decode-bytevector): Added.  They depend on gauche.vport,
	  and their tests are done separately in ext/vport.

2023-04-05  Shiro Kawai  <shiro@acm.org>

	* src/compile-i.scm, src/vminsn.scm, src/vector.c: Allow uvector-ref
	  to be inlined.  UVEC-REF can now handle generic uvector.

2023-04-04  Shiro Kawai  <shiro@acm.org>

	* lib/math/simplex.scm: Allow any sequence to be b an c vectors;
	  we copy them internally anyway.

2023-03-27  Shiro Kawai  <shiro@acm.org>

	* 0.9.13_pre3

2023-03-25  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/base64.scm: Allow :digits keyword argument to specify
	  alternative digits.

	* src/vector.c (Scm_ReadUVector): Preliminary support of
	  SRFI-207 string-notated bytevectors.

2023-03-20  Shiro Kawai  <shiro@acm.org>

	* lib/math/simplex.scm: Added.  There are lots of room of optimization,
	  though it's working.

	* ext/uvector/matrix.scm (array-vector-mul, vector-array-mul):
	  Add (u)vector and array multiplication, for they appear frequently.
	  We may make array-mul to accept vector arguments, but it can be
	  done later.

2023-03-15  Shiro Kawai  <shiro@acm.org>

	* src/lazy.c (Scm_VMForce): Allowing multiple threads to force
	  a promise simultaneously, as SRFI-226 semantics.  We only guarantee
	  that the force value is always the same - the first delivered result
	  takes precedence.
	* src/compile-1.scm (delay): Support mv-delivering delay.

2023-03-11  Shiro Kawai  <shiro@acm.org>

	* src/lazy.c (Scm_MakePromise, Scm_VMForce): Run delayed thunk in
	  the parameterization of the time the promise is created.
	  This is for SRFI-226, but divergence from R7RS.
	  Note that this change breaks the current implementation of
	  SRFI-155 in a subtle way.  Once SRFI-226 is adopted, however,
	  SRFI-155 semantics is supported natively.  For now, we just
	  suppress the test that relies on the broken implementation.

2023-03-10  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/stub.scm (if, when): Warn when these obsoleted
	  stub toplevel forms are used.  These are never officially documented
	  and we switched to .if/.when for years ago, but just in case we
	  keep them a bit more.

2023-03-09  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/cise.scm (.error): Add CiSE macro to
	  generate #error cpp directive.  See libsys.scm for the use case.

	* src/compile-0.scm (define-simple-struct): Define macros and
	  cise-exprs that expands into slot offset.  This allows the
	  CiSE code to use slot offset without relying on literal numbers.
	  (See LVAR_* macros in compile.scm for the use case).

2023-03-07  Shiro Kawai  <shiro@acm.org>

	* src/libsys.scm (seconds+): Added (srfi-226)

2023-03-01  Shiro Kawai  <shiro@acm.org>

	* lib/srfi/235.scm: Start adding.

2023-02-28  Shiro Kawai  <shiro@acm.org>

	* src/libproc.scm (constantly): Allow to return multiple values,
	  adopting SRFI-235.
	* lib/gauche/procedure.scm (flip, swap): Added a couple of SRFI-235
	  procedures.

2023-02-27  Shiro Kawai  <shiro@acm.org>

	* src/libparam.scm (temporarily): 'with' -> 'temporarily', according
	  to srfi-226 revision.

2023-02-25  Shiro Kawai  <shiro@acm.org>

	* lib/control/plumbing.scm (plumbing): Add generic utility.
	  Simplify make-pump etc. just to take oports (without options).
	  If the user wants to specify options, they can use 'plumbing'.

2023-02-23  Shiro Kawai  <shiro@acm.org>

	* lib/math/const.scm: Add greek identifiers (π).  UTF-8 has become
	  ubiquitous and we don't need to hesitate using them.

2023-02-20  Shiro Kawai  <shiro@acm.org>

	* lib/control/plumbing.scm: Allow optional names to inlets/outlets
	  so that ports can be extracted from a plumbing by name.
	  NB: API of add-outlet-output-port! has changed.
	  We'll likely to change convenience utilities to accept names
	  as well.

2023-02-19  Shiro Kawai  <shiro@acm.org>

	* lib/srfi/239.scm: Add srfi-239 (documented).

2023-02-18  Shiro Kawai  <shiro@acm.org>

	* src/libsys.scm (time-comparator): Added.  Although <time> can be
	  compared with default-comparator, a separate comparator is handy
	  to be used to compose more complicated comparators (cf. srfi.228).
	  We also want date-comparator, but <date> is defined in srfi.19,
	  and we don't want to add bindings not defined in the srfi to
	  the srfi module.  We'll think where it should go.

2023-02-16  Shiro Kawai  <shiro@acm.org>

	* src/Makefile.in (BUILD_GOSH_VERSION): Give -v option to BUILD_GOSH
	  so that precompilation of core is guaranteed to be done with the
	  specified version of Gauche.  Without this, sometimes the changes
	  in the prerelease version caused build problems.

2023-02-10  Shiro Kawai  <shiro@acm.org>

	* src/libeval.scm (load): Change return value - on successful loading,
	  return the actual filename loaded.  It is useful, for 'load' tries
	  a few things to find the actual file (look for search paths, adding
	  file suffixes, etc.) so the actual file path may not be tha same
	  as the 'file' argument.
	  This is technically an incompatible change: Before, 'load' returns
	  #t on success, and it is documented.  We think returning pathname
	  is better, and the code that treats the return value as a
	  generalized boolean still works.

2023-02-09  Shiro Kawai  <shiro@acm.org>

	* src/portapi.c (Scm_Flush): Fix bug that stdout is locked
	  by the primoridal thread in REPL (or any thread that first
	  calls flush).  https://github.com/shirok/Gauche/issues/876

2023-02-07  Shiro Kawai  <shiro@acm.org>

	* src/srfis.scm (srfi-244): Supported (it's already in the core).

2023-02-01  Shiro Kawai  <shiro@acm.org>

	* src/precomp, lib/gauche/cgen/precomp.scm: Allow to suppress
	  #line directives with environment variable
	  GAUCHE_PRECOMP_OMIT_SOURCE_INFO.  Sometimes the error position
	  in *.scm is unreliable for troubleshooting.

	* ext/file/event.scm: Start adding file event API; inotify for
	  the starter.  We'll provide high-level API that hides
	  difference of subsystems.

2023-01-29  Shiro Kawai  <shiro@acm.org>

	* src/geninsn: Add feature to load/save insn to opcode map.
	  See https://github.com/shirok/Gauche/issues/869

2023-01-26  Shiro Kawai  <shiro@acm.org>

	* src/libfmt.scm (make-format-plural): Support ~P.

2023-01-24  Shiro Kawai  <shiro@acm.org>

	* src/libmacro.scm (define-class, define-generic, define-method):
	  Turn them into a macro rather than compiler-builtin, finally.
	  This, however, has a little side-effect; they expand to define
	  forms, so they can now appear in the declaration context,
	  not necessarily at the top-level.
	  We don't officially support non-toplevel use of these forms yet,
	  for these forms have global effect and we're not sure how they
	  should interact with lexical scope.

	* src/libobj.scm (define-method): Bind the method closure to a
	  module-local hidden toplevel variable, so that test-module
	  can find the method body and scan for undefined variable
	  references.
	  Note: This forces define-method to be on toplevel.  Although
	  it hasn't been explicitly documented, it's been assumed that
	  they're toplevel forms as the name suggests.  The code that has
	  been used define-method in non-toplevel raises an error after
	  this change; they should be rewritten to make define-method
	  toplevel.
	  Technically it can appear in the internal definition context,
	  but we're not sure about its semantics.

2023-01-23  Shiro Kawai  <shiro@acm.org>

	* src/number.c (Scm_SinPi): Make sure
	  (= (real-sinpi 0.25) (real-cospi 0.25)).

2023-01-22  Shiro Kawai  <shiro@acm.org>

	* lib/data/ulid.scm (make-ulid-generator): Use internal random source
	  when random-source argument is omitted.  Using default-random-source
	  causes ULID conflict for multiple runs if the user didn't randomize
	  it beforehand.
	  https://github.com/shirok/Gauche/issues/873

2023-01-20  Shiro Kawai  <shiro@acm.org>

	* src/compile-1.scm (pass1/body-rec): Make duplicate internal
	  definitions an error.
	  https://github.com/shirok/Gauche/issues/872

2023-01-19  Shiro Kawai  <shiro@acm.org>

	* libsrc/data/ring-buffer.scm (ring-buffer-room): API Added.

2023-01-18  Shiro Kawai  <shiro@acm.org>

	* lib/contro/plumbing.scm: Move tapping port from gauche.vport.

2023-01-15  Shiro Kawai  <shiro@acm.org>

	* ext/vport/vport.scm (open-tapping-port): Experimentally added.
	  We might make a separate module for it, so do not count on this.

2023-01-08  Shiro Kawai  <shiro@acm.org>

	* src/libnum.scm (negative-zero?): Rename undocumented '-zero?' to
	  'negative-zero?' and make it official.  Replaced internal use of
	  '-zero?' to 'negative-zero?'.

2023-01-07  Shiro Kawai  <shiro@acm.org>

	* src/libnum.scm: Change %expt -> real-expt etc.  The real-only
	  versions (%expt, %sin, etc.) are undocumented but used internally
	  when the domain and range are real.  SRFI-94 already defines
	  real-only names, so we name them accordingly and make them official.
	  NB: If an external program uses unofficial names, they would raise an
	  error.  If that causes a serious problem, we'll provide compatibility
	  layer.

	* src/libsys.scm (sys-strsignal): Added.

2023-01-04  Shiro Kawai  <shiro@acm.org>

	* lib/srfi/210.scm: Added SRFI-210.

	* src/libmacro.scm (set!-values): Allow improper list in the var list
	  for the consistency.

2023-01-02  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/fmtutil.scm: Support ~@r roman numeral formatter.

2022-12-29  Shiro Kawai  <shiro@acm.org>

	* src/libmacro.scm (rotate!): Added.  CL's rotatef.

2022-12-25  Shiro Kawai  <shiro@acm.org>

	* src/port.c, src/vm.c: Switch current-*-port and SCM_CUR* to
	  parameters; R7RS specifies them to be so, and we want new
	  parameterization scheme to work on these values too.
	  NB: This requires recompilation of extension modules, for
	  the code that refers to SCM_CUROUT etc. is compiled to refer
	  to the VM slots directly, which no longer exist.
	  This change may also affect performance; need to take benchmark.

2022-12-24  Shiro Kawai  <shiro@acm.org>

	* src/compile-i.scm (dynamic-wind): Optimized version of inlined
	  dynamic-wind incorrectly omitted POP-HANDLERS.  It's rare that
	  this optimization is triggered (after thunk must be a constant
	  lambda, which is not common), and probably that's why this
	  hasn't been revealed.
	  Existing code precompiled with 0.9.12 and before may contain
	  erroneous code (though it's very unlikely).

2022-12-22  Shiro Kawai  <shiro@acm.org>

	* lib/srfi/172.scm, lib/srfi/172/functional.scm: Added.

2022-12-21  Shiro Kawai  <shiro@acm.org>

	* libsrc/text/line-edit.scm (insert-closing-paren): Change paren
	  highlight.  Now it highlighs opening paren for a short period of
	  time when closing paren is inserted.

2022-12-11  Shiro Kawai  <shiro@acm.org>

	* lib/srfi-*.scm, lib/srfi/*.scm: Make srfi/*.scm main implementation
	  files https://github.com/shirok/Gauche/issues/680

	* src/core.c (Scm_SimpleMain): Fix exit status alined with script
	  execution.  https://github.com/shirok/Gauche/issues/861

2022-12-10  Shiro Kawai  <shiro@acm.org>

	* src/libfmt.scm (formatter-lex): Support ~ + newline

	* lib/srfi-228.scm, src/srfis.scm: Add srfi-228.

2022-12-08  Shiro Kawai  <shiro@acm.org>

	* src/libfmt.scm: Add ~&.

	* src/libio.scm (fresh-line): As a side-effect from port column
	  counting, we can now easily have CL's fresh-line.

2022-12-06  Shiro Kawai  <shiro@acm.org>

	* src/libio.scm (port-link!, port-unlink!): Added.
	* src/port.c: Reset output column count when linked input port
	  reads '\n', so that ~:W indent correctly during interactive REPL.

2022-12-05  Shiro Kawai  <shiro@acm.org>

	* src/gauche/priv/portP.h, src/port.c: Add port linking.
	  Stdin and stdout is linked by default; reading from stdin
	  causes flushing stdout.

2022-12-04  Shiro Kawai  <shiro@acm.org>

	* src/libio.scm (port-column): Expose this to Scheme (but only for
	  gauche.internal module, for now)

	* src/libfmt.scm (make-format-pprint): Support ~:w (pretty print)
	  and ~@w.

2022-12-01  Shiro Kawai  <shiro@acm.org>

	* src/write.c (Scm_Vprintf): Add provisional support of %W (pprint).
	  We still need to figure out how to set indent.

2022-11-30  Shiro Kawai  <shiro@acm.org>

	* src/write.c, src/io.scm: Add indent slot to <write-controls>
	* lib/gauche/pprint.scm: Add indentation according to the indent
	  value of the controls.

2022-11-24  Shiro Kawai  <shiro@acm.org>

	* src/vm.c: Ensure dynamic handlers are invoked on a proper dynamic
	  environment.  This is important to ensure 'with' and delimited
	  continuations work together.
	  The entry of dynamic handler chain is changed.  They should be
	  treated opaque outside of vm.c.

2022-11-23  Shiro Kawai  <shiro@acm.org>

	* libsrc/gauche/parameter.scm: Export parameterize as an alias of
	  parameterize/dynwind, so that the legacy code gets
	  backward-compatible parameterize.  New code shouldn't use this
	  module.

	* src/libparam.scm (parameterize/dynwind): Provide backward-compatible
	  parameterize under this name.

2022-11-22  Shiro Kawai  <shiro@acm.org>

	* src/libmacro.scm (independently), src/srfis.scm (srfi-236):
	  As srfi-236 is finalized, support this officially.  It's general
	  enough to be built-in.

2022-11-20  Shiro Kawai  <shiro@acm.org>

	* lib/scheme/comparator.scm: Incorporate srfi-162 as sell.

	* lib/compat/chibi-test.scm (chibi-test): Support test-equal.

2022-11-18  Shiro Kawai  <shiro@acm.org>

	* src/parameter.c, src/libparam.scm (current-parameterization),
	  (parameterization?, call-with-parameterization): Added.

2022-11-15  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/test/include.scm (test-include-r7): Added.  Make it easier
	  to include r7rs test script in Gauche tests.

2022-11-13  Shiro Kawai  <shiro@acm.org>

	* lib/srfi-236.scm: Added.

2022-11-12  Shiro Kawai  <shiro@acm.org>

	* src/parameter.c: Change how parameter procedure keeps parameter
	  object.  Now we emply the same way as continuation procedure;
	  that is, SCM_PROCEDURE_INFO holds a unique uninterned symbol,
	  and the extractino procedure can use SCM_SUBR_DATA.
	  NB: With this change, parameter? returns #t for primitive parameter
	  procedures as well.  It should be.

	* src/libparam.scm (%parameterize): Start using dynamic env to keep
	  ordinary parameters.

2022-11-10  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/time.scm (time-these/report, report-time-results):
	  Allow measure/report using not only cpu times, but also real,
	  user or sys.

2022-11-04  Shiro Kawai  <shiro@acm.org>

	* src/compaux.c, src/libmacbase.scm: Remove syntactic closure support.
	  They haven't been used at all.

	* src/vm.c, src/class.c, src/libproc.scm (make-continuation-prompt-tag,
	  default-continuation-prompt-tag): Add continuation prompt tag.

2022-11-02  Shiro Kawai  <shiro@acm.org>

	* src/vm.c: Store exception handler in DENV.

2022-10-29  Shiro Kawai  <shiro@acm.org>

	* src/vm.c: VM inherits denv from calling thread.

	* src/list.c (Scm_AlistCopy): Implement in C.

2022-10-28  Shiro Kawai  <shiro@acm.org>

	* src/compile-*.scm: Support with-continuation-mark.

2022-10-27  Shiro Kawai  <shiro@acm.org>

	* src/compile.scm ($DYNENV): New IForm node for supporting
	  continuation marks.

2022-10-20  Shiro Kawai  <shiro@acm.org>

	* src/parameter.c, ext/threads/threads.scm (make-thread-local):
	  Add srfi-226 thread-local APIs.

2022-10-19  Shiro Kawai  <shiro@acm.org>

	* src/gauche/priv/vmP.h (ScmEscapePoint),
	  src/vm.c (Scm_VMDefaultExceptionHandler, Scm_VMReraise),
	  src/libexc.scm (%reraise): Address the issue that escapePoint
	  in the floating chain loses pointer to the continuation frames.
	  https://github.com/shirok/Gauche/issues/852
	  We fell back to safe-but-slow option: Continuation chains are
	  saved as soon as default exception handler is invoked, so that
	  all active EPs point to contFrames on heap.

2022-10-03  Shiro Kawai  <shiro@acm.org>

	* src/libmacro.scm (quasirename): Attach source info of the
	  quasirename constructed lists.

2022-10-02  Shiro Kawai  <shiro@acm.org>

	* src/read.c (process_sharp_comma): Attach source info to the
	  output of sharp-comma constructor, if it yields a pair.
	  Notably, this results source info attached to string
	  interpolations.

2022-10-01  Shiro Kawai  <shiro@acm.org>

	* macro.c (compile_rule1, realize_template_rec): Carry over
	  source info of macro template and macro input.
	* libeva.scm (%show-stack-trace): Show all macro expansion
	  history along the source info.

2022-09-27  Shiro Kawai  <shiro@acm.org>

	* src/list.c (Scm_MakeImmutablePair): C API INCOMPATIBLE CHANGE:
	  Now it takes the third argument, attrs, being parallel to
	  Scm_MakeExtendedPair, for the consistency.  We expect the API
	  isn't used by external libraries, for the immutable pairs are
	  recent addition.
	* Bug fix on debug source info of quoted literals.
	  https://github.com/shirok/Gauche/issues/847

2022-09-25  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/vm/debugger.scm (debug-print-conditionally)
	  (debug-funcall-conditionally),
	  src/read.c (read_internal): Add "#??=" and "#??," debug helper
	  syntax, to print info only when condition is met.

2022-09-21  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/redefutil.scm (class-redefinition): Fix redefining
	  a class with redefined metaclass
	  https://github.com/shirok/Gauche/issues/845

	* src/libobj.scm (write-object <class>): Show 'redefined' for
	  class objects with custom metaclass.

2022-09-18  Shiro Kawai  <shiro@acm.org>

	* lib/data/range.scm (bitvector/bool-range, bitvector/int-range):
	  Added bitvector to range constructors.  Also revised <flat-range>
	  definition to allow raw-indexer customization and optimization.

2022-09-14  Shiro Kawai  <shiro@acm.org>

	* tools/tls/Makefile.in: Use mbedtls 3.2.1 for mbedtls-internal

	* src/portapi.c (Scm_Getz): Bug fix: We've treated bufport_filler
	  returning 0 as EOF, but that's not always the case---if the requested
	  size is 0, e.g. via (read-bytevector 0), returning 0 is a valid
	  return value without meaning EOF.

	* ext/tls/tls-mbed.c: Show string error message for mbedtls errors,
	  along the error code.

2022-08-26  Shiro Kawai  <shiro@acm.org>

	* src/vm.c (Scm_VMApply0, etc.): Experimentally turn on subr
	  trampoline; if a subr is tail-called from another subr, and
	  the number of argument matches, then we skip the usual
	  argument folding & procedure dispatching sequence.

2022-08-14  Shiro Kawai  <shiro@acm.org>

	* lib/srfi-222.scm: Added.

2022-08-12  Shiro Kawai  <shiro@acm.org>

	* libsrc/text/line-edit.scm (completion-command): Allow completion
	  with hyphenated prefxies, e.g. 'w-i-f' -> 'with-input-from-'.

2022-08-11  Shiro Kawai  <shiro@acm.org>

	* lib/text/segmented-match.scm (text.segmented-match): Added.

2022-08-09  Shiro Kawai  <shiro@acm.org>

	* doc/modutil.texi: Start adding text.multicolumn doc

	* lib/text/multicolumn.scm (layout-multicolumn): Make multicolumn
	  formatting two-step process for flexibility; layout-multicolumn
	  returns a list of text for each line, and display-multicolumn
	  uses it to print out the formatted text.

2022-08-06  Shiro Kawai  <shiro@acm.org>

	* src/libexc.scm, src/srfis.scm: Export missing identifiers from
	  srfi-35.

2022-08-04  Shiro Kawai  <shiro@acm.org>

	* src/libvec.scm (bitvector-any-value?, bitvector-every-value?):
	  Allow start/end optional args.

2022-08-03  Shiro Kawai  <shiro@acm.org>

	* src/vector.scm (bitvector-any-value?, bitvector-every-value?):
	  Rename bitvector-any? and bitvector-every? and let them take the
	  bit value to search.  This eliminates the need of bitvector-none?,
	  and also make it symmetric (we can test 'having at least 1 zero).

2022-07-30  Shiro Kawai  <shiro@acm.org>

	* lib/srfi-209.scm: Added, passes the tests (tests depend on
	  gauche.bitvector, so it is tested in ext/gauche).

2022-07-29  Shiro Kawai  <shiro@acm.org>

	* lib/scheme/regex.scm (scheme.regex): Export missing regex?
	  https://github.com/shirok/Gauche/pull/836

2022-07-28  Shiro Kawai  <shiro@acm.org>

	* src/vm.c (POP_CONT): Avoid copying C continuation data into
	  machine stack.  The data argument of Ccont proc now points
	  direclty to the continuation's data field.  This should be ok,
	  for subrs aren't supposed to modify these fields.
	  NB: There may be an issue if void* and ScmObj are different in size,
	  though its very unlikely in modern platforms.

2022-07-14  Shiro Kawai  <shiro@acm.org>

	* ext/srfi/srfi-178.scm, ext/gauche/bitvector.scm, lib/srfi-178.scm:
	  Move bitvector lib as gauche.bitvector, for we'll add some more
	  bitvector utilities.  srfi-178 just reexport srfi procedures.

2022-07-12  Shiro Kawai  <shiro@acm.org>

	* src/libvec.scm (bitvector-any?, bitvector-every?, bitvector-none?):
	  These are not in srfi-178 but handy to have.

2022-07-06  Shiro Kawai  <shiro@acm.org>

	* doc/corelib.texi (format): Description of ~nR was missing.

	* lib/gauche/cgen/stub.scm (define-cclass): Fix cise issue in
	  define-cclass https://github.com/shirok/Gauche/issues/832

2022-07-04  Shiro Kawai  <shiro@acm.org>

	* ext/mt-random: Make mersenne twister RNG thread-safe by default.

2022-07-03  Shiro Kawai  <shiro@acm.org>

	* lib/data/ulid.scm (ulid): Drop record type name from export list.
	  It doesn't follow Gauche's class naming convention.  We may
	  reintroduce it as <ulid> in future, but let's see.

2022-06-30  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/interactive.scm (describe <generic>): Show each method's
	  source location if available.

	* src/libobj.scm (%expand-define-method),
	  src/class.c (method_initialize): Set source location info to
	  the list in <method>'info, so that it can be retrieved by
	  source-info.

2022-06-28  Shiro Kawai  <shiro@acm.org>

	* src/libmacro.scm (assume-type): support optional msg objs ...
	  arguments for the custom error message.
	  (assume): Use custom error message if provided.

	* src/libtype.scm, src/number.c: Native type support for
	  <intptr_t> and <uintptr_t>.

2022-06-27  Shiro Kawai  <shiro@acm.org>

	* src/libalpha.scm (make-case-lambda): Make procedure-info of
	  case-lambda more readable.  It is for human reader, and having
	  #(#<closure ...> ...) is not helpful.  Now it is
	  (<name> #(<formals> ...)).

2022-06-25  Shiro Kawai  <shiro@acm.org>

	* Release 0.9.12

2022-06-21  Shiro Kawai  <shiro@acm.org>

	* src/number.c (read_number): Support srfi-169, underscores in numbers.
	  Technically this introduces incompatibility:
	  - Tokens such as 1_2_3 is now read as a number 123, instead of
	    a symbol.
	  - Underscores in prefexed numeric literals must obey srfi-169
	    instead of simply being ignored.  #x_dead_beef_ was ok before,
	    but no longer.

2022-06-19  Shiro Kawai  <shiro@acm.org>

	* ext/uvector/uvlib.scm.tmpl (@vector-segment): Check arg to avoid
	  infinite loop. https://github.com/shirok/Gauche/issues/828

2022-06-06  Shiro Kawai  <shiro@acm.org>

	* lib/srfi-232.scm: Add srfi-232 Flexible curried procedures.

2022-06-05  Shiro Kawai  <shiro@acm.org>

	* src/compile-4.scm (pass4/scan): Fix incorrect free-variable
	  propagation in $clambda node.
	  https://github.com/shirok/Gauche/issues/826

2022-06-04  Shiro Kawai  <shiro@acm.org>

	* src/liblist.scm (num-pairs): Added.

2022-05-30  Shiro Kawai  <shiro@acm.org>

	* test/net.scm: Recover gauche.net test

2022-05-29  Shiro Kawai  <shiro@acm.org>

	* src/list.c (Scm_LastPair): Detect circular list.  It is not required
	  in the spec (last and last-pair), but doing so is cheap and it's
	  something nice to have.

2022-05-28  Shiro Kawai  <shiro@acm.org>

	* src/libvec.scm (make-s8vector etc.), ext/uvector/uvlib.scm.tmpl:
	  Move constructors to the core.

2022-05-21  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/connection.scm, lib/gauche/netutil.scm: Moved
	  connection protocol implementation to gauche.net.  Keep
	  gauche.connection just for the backward compatibility.

2022-05-20  Shiro Kawai  <shiro@acm.org>

	* ext/net, src/libnet.scm, src/net.c, src/netaddr.c, src/netdb.c:
	  Move ext/net into core.  Sometimes it's handy for the extension
	  modules to be able to call net-related C functions.

2022-05-16  Shiro Kawai  <shiro@acm.org>

	* ext/tls/tls.ac: Do not compile axtls by default.  Preparing
	  to drop axtls support in future releases.

2022-05-10  Shiro Kawai  <shiro@acm.org>

	* src/signal.c (Scm_SigWait): Avoid using signal number 0 for
	  sigismember/sigdelset.  This causes failure on OSX Monterey.

2022-04-21  Shiro Kawai  <shiro@acm.org>

	* ext/srfi/srfi-19.scm: Define object-compare for <date>.

2022-04-20  Shiro Kawai  <shiro@acm.org>

	* lib/util/temporal-relation.scm: Added.

2022-04-18  Shiro Kawai  <shiro@acm.org>

	* configure.ac: 0.9.12_pre1

2022-04-17  Shiro Kawai  <shiro@acm.org>

	* src/liblist.scm (list-ref): Better error message.
	  (See comments in https://github.com/shirok/Gauche/issues/814)

2022-04-16  Shiro Kawai  <shiro@acm.org>

	* src/libmacro.scm (push-unique!): Added, finally.  CL's pushnew.
	  I've been resisting the temptation to add this, for most of the
	  times it doesn't bother me much to write out the logic explicitly.
	  However, I hit the cases where this makes code much cleaner
	  enough times.

2022-04-07  Shiro Kawai  <shiro@acm.org>

	* src/main.c (main): Noticed *program-name* and *argv* aren't defined
	  when gosh invoked as REPL.  Although they are of little use in REPL,
	  leaving them undefined may cause some inconvenience.  We just
	  define "" as *program-name* and () as *argv*.

2022-04-06  Shiro Kawai  <shiro@acm.org>

	* ext/tls/tls.c: Fix fd leak in <ax-tls>
	  https://github.com/shirok/Gauche/issues/817

2022-03-21  Shiro Kawai  <shiro@acm.org>

	* lib/control/thread-pool.scm (wait-all): Fix race condition
	  ( https://github.com/shirok/Gauche/issues/812 )

2022-03-16  Shiro Kawai  <shiro@acm.org>

	* src/system.c (Scm_StrfTime): MinGW's strftime() returns a
	  multibyte string in system's language settings, so its handling
	  is tricky.  We introduced a compatibility layer.

	* src/libsys.scm (sys-setlocale): Allow #f for locale argument
	  (corresponding to passing NULL in C API).  It can be used to
	  obtain the current locale.

2022-03-10  Shiro Kawai  <shiro@acm.org>

	* src/write.c, src/libfmt.scm: If string is truncated within double
	  quotes, add '"...' (instead of ' ..."' as before).  The normal
	  truncation is ' ...' (a whitespace before dots), so it gives a
	  clue that the string is truncated.   We also support the same
	  format in Scm_Printf().

2022-03-09  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/precomp.scm: Revert commit #f5577697cf - this
	  appears no longer needed to inline procedures within the same
	  compilation unit during precompilation.

2022-03-06  Shiro Kawai  <shiro@acm.org>

	* src/write.c (vprintf_pass2): Fix truncation of %S and %A - it looked
	  like we were in the middle of the change and then forgot to pick
	  it up.

2022-03-05  Shiro Kawai  <shiro@acm.org>

	* src/libfmt.scm (chop-and-out): Make 'truncation' format directive
	  recognize an open double quote and close it properly even if
	  the content is truncated.  This will prevent font colorlizer
	  (e.g. Emacs Scheme mode) from being messed up by unclosed
	  double quotes caused by truncation.

2022-02-26  Shiro Kawai  <shiro@acm.org>

	* src/compile-2.scm (pass2/$LET): Lift component closures of locally
	  defined case-lambda into the same level of environment.  Expecting
	  the later stage of case-lambda optimization to become easier.
	  Note that this changes ordinary let frame to letrec frame (since
	  the newly introduced variable is referred to by the case-lambda
	  construction in the same environment).  We expect such conversion
	  would occur rarely (if local case-lambda is introduced by internal
	  defines, the frame is already letrec*.)

2022-02-21  Shiro Kawai  <shiro@acm.org>

	* src/libalpha.scm (case-lambda-decompose): Rename from case-lambda-info
	  (too vague).  Use new %case-lambda-info so that it can have definite
	  info, instead of relying procedure-info slot.
	  This procedure hasn't been public, so name change shouldn't affect
	  existing code.  We may come up a better name later.

2022-02-20  Shiro Kawai  <shiro@acm.org>

	* src/compile-1.scm, src/libalpha.scm: Global case-lambda inliner.
	  Now case-lambda procedure can be define-inline'd, and if the call
	  site knows the number of arguments, it preselects the apprpricate
	  branch and direclty inlines it.

2022-02-15  Shiro Kawai  <shiro@acm.org>

	* src/libalpha.scm (make-case-lambda): No longer look at 'formals'
	  argument; the info can be extracted from closures.

2022-02-14  Shiro Kawai  <shiro@acm.org>

	* src/number.c (Scm_NumCmp): Make sure '=' transitivity is kept
	  in exact v inexact comparison.
	  https://github.com/shirok/Gauche/issues/805

2022-02-12  Shiro Kawai  <shiro@acm.org>

	* text/line-edit.scm: Add whitespace after the completed word if
	  the completion returns a single definite result.  It is indicated
	  by the lister callback returning a string, rather than a list.
	  Note that we need to distinguish the case when there's only one
	  candidate but further search is possible (e.g. completing a directory
	  name when searching the actula file).

2022-02-11  Shiro Kawai  <shiro@acm.org>

	* data/ulid.scm: Added.  Port from https://github.com/shirok/scheme-ulid

2022-02-10  Shiro Kawai  <shiro@acm.org>

	* gc: Bumped bdwgc 8.0.6

2022-02-09  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/libutil.scm (library-fold): Rewrote on top of glob-fold.
	  This allows extended glob pattern such as {} and **.

	* lib/gauche/fileutil.scm (glob-fold): Add prefix keyword arg.

2022-02-02  Shiro Kawai  <shiro@acm.org>

	* src/read.c (Scm_CharWordConstituent),
	  src/libio.scm (char-word-consituent?): Expose these for they are
	  generally useful to write something that deal with Scheme names.

2022-01-30  Shiro Kawai  <shiro@acm.org>

	* libsrc/text/gap-buffer.scm
	  (gap-buffer-contains, gap-buffer-looking-at?): Added.

	* src/libstr.scm (opt-substring): Rename %maybe-substring opt-substring
	  and officially support it in #<module gauche>.  It is generally
	  useful.

2022-01-23  Shiro Kawai  <shiro@acm.org>

	* libsrc/text/line-edit.scm: Some improvement of completion.  Now
	  if there're multiple candidate and TAB is typed twice, the candidate
	  list is displayed.

	* lib/text/multicolumn.scm: Added

2022-01-21  Shiro Kawai  <shiro@acm.org>

	* lib/srfi-227.scm: Added srfi-227.

2022-01-18  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/editable-reader.scm: Implement a rudimental symbol
	  completion.  We'll experiment for a while to see what's best
	  in REPL.

2022-01-16  Shiro Kawai  <shiro@acm.org>

	* libsrc/text/line-edit.scm: Add a hook for completion.

	* libsrc/text/gap-buffer: Drop gap-buffer-gap-start and
	  gap-buffer-gap-end.  They reveals internals unnecessarily.  They
	  weren't documented, and have only been used for testing.
	  (gap-buffer-pos-at-end?): Added.

2022-01-13  Shiro Kawai  <shiro@acm.org>

	* src/compile-1.scm (case-lambda): Change case-lambda handling.
	  Instead of expanding to the call for make-case-lambda in pass1,
	  we create $CLAMBDA node and carry it up to pass5.  This will allow
	  more optimizations.

2022-01-05  Shiro Kawai  <shiro@acm.org>

	* src/mmap.c (Scm_SysMmapWX): Separate writable pages and executable
	  page if PaX MPROTEXT is active.

2022-01-04  Shiro Kawai  <shiro@acm.org>

	* src/list-ext-objects.sh: Allow to take extra directories to scan
	  object files to archive.
	* src/Makefile.in, tools/tls/Makefile.in:
	  If --with-tls=mbedtls-internal, scan tools/tls to archive mbed
	  object files in the static library.
	  Cf. https://github.com/shirok/Gauche/issues/802

2021-12-28  Shiro Kawai  <shiro@acm.org>

	* Release 0.9.11-p1: A "patch" release fixing mbedtls-internal issue.

	* ext/tls/tls.ac: Fix build defect when internal mbedtls is used
	  https://github.com/shirok/Gauche/issues/799

2021-12-23  Shiro Kawai  <shiro@acm.org>

	* Release 0.9.11

2021-12-16  Shiro Kawai  <shiro@acm.org>

	* src/libsys.scm (sys-mmap, <memory-region>): Improve mmap API.
	  size argument needs to be mandatory (there's no reasonable default).
	  Expose fields of <memory-region> for introspection.

2021-12-14  Shiro Kawai  <shiro@acm.org>

	* ext/tls/tls-mbed.c: Support MbedTLS 3.0.  This is a partial support:
	  we need tls-bind to allow TLS-enabled server.  But at least this one
	  works as a client.

2021-12-03  Shiro Kawai  <shiro@acm.org>

	* src/libio.scm (%write-walk-rec): Handle circular reference through
	  boxes.  https://github.com/shirok/Gauche/issues/787

2021-12-01  Shiro Kawai  <shiro@acm.org>

	* check-build-version, configure.ac, Makefile.in: Before generating
	  files by BUILD_GOSH, check if it is the latest release.  With this,
	  the user who accidentally try to compile from the repo using older
	  Gauche will be told so upfront, instead of getting an misterious
	  error in the middle of building.
	  The required BUILD_GOSH version is kept in configure.ac, right
	  below the AC_INIT line.  Don't forget to update when you make
	  a new release.

2021-11-23  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/precomp.scm (handle-define-inline): Fix that
	  define-inline'ed procedures weren't expanded within the same
	  compilation unit.  We need to let the compiling enviornment know
	  about the inlined procedures.

2021-11-22  Shiro Kawai  <shiro@acm.org>

	* src/libmacro.scm (cond-expand): EXPERIMENTALLY add 'package'
	  clause to test package existence and its version.  A special
	  package name 'gauche' can be used to check running Gauche
	  version.  Let's see how it goes.

2021-11-15  Shiro Kawai  <shiro@acm.org>

	* src/gauche.h (ScmProcedure), src/proc.c (Scm__CopyProcedure):
	  Use the reserved slot of ScmProcedure as tags-alist.
	  We can keep srfi-229 procedure tag there, and more in future.
	  INCOMPATIBLE CHANGE: We make Scm_CopyProcedure private, moved
	  to priv/procP.h and renamed to Scm__CopyProcedure.  Use code
	  shouldn't need to use it, for procedures are immutable entity
	  and copying shouldn't make difference.  It is only used internally
	  to do certain bookkeeping.

	* lib/srfi-229.scm: Added.

2021-11-11  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/stub.scm (make-array-getter-setter): Support
	  treating u8int_t array in cstruct as <u8vector>.  Eventually
	  we'll extend it to other uniform vectors, and this is the first
	  step.
	  (define-cproc): Allow '_ in the arguments to indicate unused args.

	* lib/gauche/cgen/cise.scm: (define-cenum): Added.  This has been
	  in Gauche-gl for a while.

2021-11-10  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/cise.scm: Allow '_' as an unused argument in
	  define-cfn, so that we don't need a dummy cast expression to
	  suppress 'unused argument' warnings.
	  We also need the similar stuff for define-cproc and define-cmethod,
	  but the handling of arguments differ a lot.  So, maybe later.

2021-11-07  Shiro Kawai  <shiro@acm.org>

	* lib/gauche/cgen/stub.scm: Rename define-type to declare-stub-type.
	  Make it clear that it is merely a hint to the stub generator,
	  only effective during a single stub file processing.
	  (define-cclass): Let it handle declare-stub-type, even if it needs
	  custom c-predicate name or unboxer name.
	  (define-cstruct): Incorporated define-cstruct, an easier stub
	  interface for C struct.

2021-11-05  Shiro Kawai  <shiro@acm.org>

	* src/libtype.scm (ScmNativeType): Let it keep C type name as well.
	  The long-term plan is to integrate stub types to the built-in type
	  system, though we'll still keep some info outside of the built-in
	  types (e.g. C notation of boxer/unboxer won't be used except stub
	  generators, so no need to carry it around in the <native-type>).

	* lib/gauche/cgen/type.scm: Keep reference to the actual Scheme type
	  in the stub type.  Changed API of make-cgen-type.

2021-10-27  Shiro Kawai  <shiro@acm.org>

	* lib/rfc/http.scm: Use new tls-connect interface that lets TLS
	  module opens the socket.  This allows proper use of mbedTLS.

	* ext/*/Makefile.in: Adjust GENERATED and CONFIG_GENERATED macros
	  to the src/*.  The 'distcclean' target removes CONFIG_GENERATED
	  (e.g. Makefile), and 'maintainer-clean' removes GENERATED as well.
	  Before this change, a build after distclean caused an error
	  while building ext/gauche, for unicode-attr.scm is removed by
	  distclean but not regenerated since src/char_attr.c exists.
	  Also, renamed GENERATED -> PREGENERATED to avoid confusion.

	* lib/rfc/http (start-connection): When no TLS module is available,
	  raise an error saying so, rather than letting rfc.tls module
	  throw an obscure error.
	  Cf. https://github.com/shirok/Gauche/issues/784
	  NB: rfc.tls is loaded by cond-expand gauche.net.tls, so we don't
	  bother to make it autoload.

2021-10-24  Shiro Kawai  <shiro@acm.org>

	* ext/digest/sha2.c (SHA1_End): Fix strict aliasing violation.
	  The original code yields incorrect binary with gcc 11.2 when
	  compiled with -O2.

2021-10-03  Shiro Kawai  <shiro@acm.org>

	* src/gauche/priv/bignumP.h: Make bignum.h private.  It was never
	  intended for public use.  Technically this is compatiblity-breaking,
	  but if the user code directly uses bignum API, there's something wrong.

2021-09-28  Shiro Kawai  <shiro@acm.org>

	* lib/data/random.scm (random-data-random-source): A parameter to
	  keep the current random source.  Previous random-state thingy was
	  awkward and not compatible to srfi-194.

	* ext/mt-random: Add mt-random-get-seed

2021-09-07  Shiro Kawai  <shiro@acm.org>

	* src/gauche/vm/debugger.scm, src/read.c: Experimentally implemented
	  per-thread debug logging.  #?@=expr records evaluation of expr like
	  #?=, but the output goes to per-thread file, with timestamp.
	  This prevents logs to be mixed up.

	* ext/threads/threads.scm (latch-clear!): Added.

…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants