Skip to content

Commit 2ff8fc3

Browse files
committed
xyzzy.src : fix save-window-excursion.
1 parent a01b7ad commit 2ff8fc3

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

ChangeLog.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
2010-01-11 NANRI Masaoki <southly@gmail.com>
22

3+
* src : fix save-window-excursion.
4+
(save-window-excursion (values 1 2 3))
5+
で正しく多値が返らない場合があるのを修正。
6+
xyzzy Part11 8
7+
8+
WindowConfigurationのデストラクタ内でLispのコードが実行されるので、
9+
WindowConfigurationのデストラクタを実行したあとで、多値を元の値に戻
10+
す必要がある。
11+
312
* lisp : fix long-operation.
413
long-operationの戻り値がprog1相当になっているのをprogn相当になるよ
514
うに修正。

src/eval.cc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,8 +1549,17 @@ Fsave_restriction (lisp arg, lex_env &lex)
15491549
lisp
15501550
Fsave_window_excursion (lisp arg, lex_env &lex)
15511551
{
1552-
WindowConfiguration wc;
1553-
return Fprogn (arg, lex);
1552+
WindowConfiguration *wc = new WindowConfiguration;
1553+
lisp x = Fprogn (arg, lex);
1554+
multiple_value::value (0) = x;
1555+
multiple_value_data save;
1556+
save.count = multiple_value::count ();
1557+
bcopy (multiple_value::data ()->values, save.values, save.count);
1558+
protect_gc gcpro (save.values, save.count);
1559+
delete wc;
1560+
bcopy (save.values, multiple_value::data ()->values, save.count);
1561+
multiple_value::count () = save.count;
1562+
return x;
15541563
}
15551564

15561565
lisp

0 commit comments

Comments
 (0)