File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 112010-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 うに修正。
Original file line number Diff line number Diff line change @@ -1549,8 +1549,17 @@ Fsave_restriction (lisp arg, lex_env &lex)
15491549lisp
15501550Fsave_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
15561565lisp
You can’t perform that action at this time.
0 commit comments