diff options
author | Karl Berry <karl@freefriends.org> | 2023-02-21 22:26:33 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-02-21 22:26:33 +0000 |
commit | a3b9579689d76ded1ca36281779b5f4eb08c5451 (patch) | |
tree | f55f88010d6b2b5c3c324138698e338256615206 /Build/source/texk/web2c | |
parent | b5d532a9dcae838d0ead1a88c75156168d146fb4 (diff) |
transfer memory reduction for \special shipout from luatex to the other engines
git-svn-id: svn://tug.org/texlive/trunk@66038 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c')
-rw-r--r-- | Build/source/texk/web2c/alephdir/ChangeLog | 4 | ||||
-rw-r--r-- | Build/source/texk/web2c/alephdir/latespecial.ch | 19 | ||||
-rw-r--r-- | Build/source/texk/web2c/eptexdir/ChangeLog | 5 | ||||
-rw-r--r-- | Build/source/texk/web2c/eptexdir/pdfutils.ch | 13 | ||||
-rw-r--r-- | Build/source/texk/web2c/pdftexdir/ChangeLog | 5 | ||||
-rw-r--r-- | Build/source/texk/web2c/pdftexdir/pdftex.web | 30 | ||||
-rw-r--r-- | Build/source/texk/web2c/xetexdir/ChangeLog | 5 | ||||
-rw-r--r-- | Build/source/texk/web2c/xetexdir/xetex.web | 13 |
8 files changed, 71 insertions, 23 deletions
diff --git a/Build/source/texk/web2c/alephdir/ChangeLog b/Build/source/texk/web2c/alephdir/ChangeLog index e7921499efe..0d97ac202da 100644 --- a/Build/source/texk/web2c/alephdir/ChangeLog +++ b/Build/source/texk/web2c/alephdir/ChangeLog @@ -1,3 +1,7 @@ +2023-02-21 Phelype Oleinik <phelype.oleinik@latex-project.org> + + * latespecial.ch: reduce memory usage, a la HH/luatex. + 2023-02-15 Phelype Oleinik <phelype.oleinik@latex-project.org> * latespecial.ch: new change file for "\special shipout". diff --git a/Build/source/texk/web2c/alephdir/latespecial.ch b/Build/source/texk/web2c/alephdir/latespecial.ch index 5f31ca1632a..429cd4d2c38 100644 --- a/Build/source/texk/web2c/alephdir/latespecial.ch +++ b/Build/source/texk/web2c/alephdir/latespecial.ch @@ -74,18 +74,27 @@ begin synch_h; synch_v;@/ old_setting:=selector; selector:=new_string; show_token_list(link(write_tokens(p)),null,pool_size-pool_ptr); @y +@!h:halfword; @!q,@!r:pointer; {temporary variables for list manipulation} @!old_mode:integer; {saved |mode|} begin synch_h; synch_v;@/ -old_setting:=selector; selector:=new_string; -selector:=old_setting; +old_setting:=selector; if subtype(p)=latespecial_node then begin @<Expand macros in the token list and make |link(def_ref)| point to the result@>; - write_tokens(p):=def_ref; - end; + h:=def_ref; + end +else h:=write_tokens(p); selector:=new_string; -show_token_list(link(write_tokens(p)),null,pool_size-pool_ptr); +show_token_list(link(h),null,pool_size-pool_ptr); +@z + +@x +pool_ptr:=str_start(str_ptr); {erase the string} +@y +pool_ptr:=str_start(str_ptr); {erase the string} +if subtype(p)=latespecial_node then + flush_list(def_ref); @z @x diff --git a/Build/source/texk/web2c/eptexdir/ChangeLog b/Build/source/texk/web2c/eptexdir/ChangeLog index 6b719214613..74a73d2d85c 100644 --- a/Build/source/texk/web2c/eptexdir/ChangeLog +++ b/Build/source/texk/web2c/eptexdir/ChangeLog @@ -1,3 +1,8 @@ +2023-02-21 Phelype Oleinik <phelype.oleinik@latex-project.org> + + * pdfutils.ch: reduce memory usage for \special shipout, + a la HH/luatex. + 2023-02-14 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp> * wcfname.test: diff --git a/Build/source/texk/web2c/eptexdir/pdfutils.ch b/Build/source/texk/web2c/eptexdir/pdfutils.ch index 69701de923e..73dfb8e3fe6 100644 --- a/Build/source/texk/web2c/eptexdir/pdfutils.ch +++ b/Build/source/texk/web2c/eptexdir/pdfutils.ch @@ -1689,10 +1689,12 @@ var old_setting:0..max_selector; {holds print |selector|} @!k:pool_pointer; {index into |str_pool|} begin synch_h; synch_v;@/ old_setting:=selector; selector:=new_string; +show_token_list(link(write_tokens(p)),null,pool_size-pool_ptr); @y procedure special_out(@!p:pointer); label done; var old_setting:0..max_selector; {holds print |selector|} +@!h:halfword; @!k:pool_pointer; {index into |str_pool|} @!q,@!r:pointer; {temporary variables for list manipulation} @!old_mode:integer; {saved |mode|} @@ -1700,14 +1702,15 @@ var old_setting:0..max_selector; {holds print |selector|} @!bl: boolean; @!i: small_number; begin synch_h; synch_v;@/ -old_setting:=selector; selector:=new_string; -selector:=old_setting; +old_setting:=selector; if subtype(p)=latespecial_node then begin @<Expand macros in the token list and make |link(def_ref)| point to the result@>; - write_tokens(p):=def_ref; - end; + h:=def_ref; + end +else h:=write_tokens(p); selector:=new_string; +show_token_list(link(h),null,pool_size-pool_ptr); @z @x @@ -1716,6 +1719,8 @@ pool_ptr:=str_start[str_ptr]; {erase the string} if read_papersize_special>0 then @<Determine whether this \.{\\special} is a papersize special@>; done: pool_ptr:=str_start[str_ptr]; {erase the string} +if subtype(p)=latespecial_node then + flush_list(def_ref); @z @x diff --git a/Build/source/texk/web2c/pdftexdir/ChangeLog b/Build/source/texk/web2c/pdftexdir/ChangeLog index 1bcc3fe47da..bed7a1c1293 100644 --- a/Build/source/texk/web2c/pdftexdir/ChangeLog +++ b/Build/source/texk/web2c/pdftexdir/ChangeLog @@ -1,3 +1,8 @@ +2023-02-21 Phelype Oleinik <phelype.oleinik@latex-project.org> + + * pdftex.web: reduce memory usage for \special shipout, + a la HH/luatex. + 2023-02-14 Thanh Han The <hanthethanh@gmail.com> * writet1.c (cs_mark) <CS_SEAC>: look for the composite(d) glyphs too, diff --git a/Build/source/texk/web2c/pdftexdir/pdftex.web b/Build/source/texk/web2c/pdftexdir/pdftex.web index fa3172c2df8..765bc64abcf 100644 --- a/Build/source/texk/web2c/pdftexdir/pdftex.web +++ b/Build/source/texk/web2c/pdftexdir/pdftex.web @@ -18511,6 +18511,7 @@ need to declare some procedures needed in |pdf_hlist_out| and |pdf_vlist_out|. procedure pdf_out_literal(p:pointer); var old_setting:0..max_selector; {holds print |selector|} s: str_number; + h: halfword; @!q,@!r:pointer; {temporary variables for list manipulation} @!old_mode:integer; {saved |mode|} begin @@ -18518,14 +18519,17 @@ begin if subtype(p)=pdf_lateliteral_node then begin @<Expand macros in the token list and make |link(def_ref)| point to the result@>; - pdf_literal_data(p):=def_ref; - end; + h:=def_ref; + end + else h:=pdf_literal_data(p); selector:=new_string; - show_token_list(link(pdf_literal_data(p)),null,pool_size-pool_ptr); + show_token_list(link(h),null,pool_size-pool_ptr); selector:=old_setting; s := make_string; literal(s, pdf_literal_mode(p), false); flush_str(s); + if subtype(p)=pdf_lateliteral_node then + flush_list(def_ref); end; procedure pdf_out_colorstack(p:pointer); @@ -18636,6 +18640,7 @@ end; procedure pdf_special(p: pointer); var old_setting:0..max_selector; {holds print |selector|} s: str_number; + h: halfword; @!q,@!r:pointer; {temporary variables for list manipulation} @!old_mode:integer; {saved |mode|} begin @@ -18644,14 +18649,17 @@ begin if subtype(p)=latespecial_node then begin @<Expand macros in the token list and make |link(def_ref)| point to the result@>; - write_tokens(p):=def_ref; - end; + h:=def_ref; + end + else h:=write_tokens(p); selector:=new_string; - show_token_list(link(write_tokens(p)),null,pool_size-pool_ptr); + show_token_list(link(h),null,pool_size-pool_ptr); selector:=old_setting; s := make_string; literal(s, scan_special, true); flush_str(s); + if subtype(p)=latespecial_node then + flush_list(def_ref); end; procedure pdf_print_toks(p: pointer); {print tokens list |p|} @@ -35959,6 +35967,7 @@ that actually send out the requested data. Let's do \.{\\special} first procedure special_out(@!p:pointer); var old_setting:0..max_selector; {holds print |selector|} @!k:pool_pointer; {index into |str_pool|} +@!h:halfword; @!q,@!r:pointer; {temporary variables for list manipulation} @!old_mode:integer; {saved |mode|} begin synch_h; synch_v;@/ @@ -35967,10 +35976,11 @@ selector:=old_setting; if subtype(p)=latespecial_node then begin @<Expand macros in the token list and make |link(def_ref)| point to the result@>; - write_tokens(p):=def_ref; - end; + h:=def_ref; + end +else h:=write_tokens(p); selector:=new_string; -show_token_list(link(write_tokens(p)),null,pool_size-pool_ptr); +show_token_list(link(h),null,pool_size-pool_ptr); selector:=old_setting; str_room(1); if cur_length<256 then @@ -35980,6 +35990,8 @@ else begin dvi_out(xxx4); dvi_four(cur_length); end; for k:=str_start[str_ptr] to pool_ptr-1 do dvi_out(so(str_pool[k])); pool_ptr:=str_start[str_ptr]; {erase the string} +if subtype(p)=latespecial_node then + flush_list(def_ref); end; @ To write a token list, we must run it through \TeX's scanner, expanding diff --git a/Build/source/texk/web2c/xetexdir/ChangeLog b/Build/source/texk/web2c/xetexdir/ChangeLog index 469fd9add49..a7879ba2ac5 100644 --- a/Build/source/texk/web2c/xetexdir/ChangeLog +++ b/Build/source/texk/web2c/xetexdir/ChangeLog @@ -1,3 +1,8 @@ +2023-02-21 Phelype Oleinik <phelype.oleinik@latex-project.org> + + * xetex.web: reduce memory usage for \special shipout, + a la HH/luatex. + 2023-02-19 Martin Hosken <martin_hosken@sil.org> * xetex.web (Insert glue for |split_top_skip|...), diff --git a/Build/source/texk/web2c/xetexdir/xetex.web b/Build/source/texk/web2c/xetexdir/xetex.web index 966ecd7b666..998d0774c06 100644 --- a/Build/source/texk/web2c/xetexdir/xetex.web +++ b/Build/source/texk/web2c/xetexdir/xetex.web @@ -30251,19 +30251,20 @@ that actually send out the requested data. Let's do \.{\\special} first procedure special_out(@!p:pointer); var old_setting:0..max_selector; {holds print |selector|} @!k:pool_pointer; {index into |str_pool|} +@!h:halfword; @!q,@!r:pointer; {temporary variables for list manipulation} @!old_mode:integer; {saved |mode|} begin synch_h; synch_v;@/ doing_special:=true; -old_setting:=selector; selector:=new_string; -selector:=old_setting; +old_setting:=selector; if subtype(p)=latespecial_node then begin @<Expand macros in the token list and make |link(def_ref)| point to the result@>; - write_tokens(p):=def_ref; - end; + h:=def_ref; + end +else h:=write_tokens(p); selector:=new_string; -show_token_list(link(write_tokens(p)),null,pool_size-pool_ptr); +show_token_list(link(h),null,pool_size-pool_ptr); selector:=old_setting; str_room(1); if cur_length<256 then @@ -30273,6 +30274,8 @@ else begin dvi_out(xxx4); dvi_four(cur_length); end; for k:=str_start_macro(str_ptr) to pool_ptr-1 do dvi_out(so(str_pool[k])); pool_ptr:=str_start_macro(str_ptr); {erase the string} +if subtype(p)=latespecial_node then + flush_list(def_ref); doing_special:=false; end; |