texlive[66038] Build/source/texk/web2c: transfer memory reduction for

commits+karl at tug.org commits+karl at tug.org
Tue Feb 21 23:26:33 CET 2023


Revision: 66038
          http://tug.org/svn/texlive?view=revision&revision=66038
Author:   karl
Date:     2023-02-21 23:26:33 +0100 (Tue, 21 Feb 2023)
Log Message:
-----------
transfer memory reduction for \special shipout from luatex to the other engines

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/alephdir/ChangeLog
    trunk/Build/source/texk/web2c/alephdir/latespecial.ch
    trunk/Build/source/texk/web2c/eptexdir/ChangeLog
    trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch
    trunk/Build/source/texk/web2c/pdftexdir/ChangeLog
    trunk/Build/source/texk/web2c/pdftexdir/pdftex.web
    trunk/Build/source/texk/web2c/xetexdir/ChangeLog
    trunk/Build/source/texk/web2c/xetexdir/xetex.web

Modified: trunk/Build/source/texk/web2c/alephdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/ChangeLog	2023-02-21 21:58:06 UTC (rev 66037)
+++ trunk/Build/source/texk/web2c/alephdir/ChangeLog	2023-02-21 22:26:33 UTC (rev 66038)
@@ -1,3 +1,7 @@
+2023-02-21  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* latespecial.ch: reduce memory usage, a la HH/luatex.
+
 2023-02-15  Phelype Oleinik  <phelype.oleinik at latex-project.org>
 
 	* latespecial.ch: new change file for "\special shipout".

Modified: trunk/Build/source/texk/web2c/alephdir/latespecial.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/latespecial.ch	2023-02-21 21:58:06 UTC (rev 66037)
+++ trunk/Build/source/texk/web2c/alephdir/latespecial.ch	2023-02-21 22:26:33 UTC (rev 66038)
@@ -74,21 +74,30 @@
 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}
+ at y
+pool_ptr:=str_start(str_ptr); {erase the string}
+if subtype(p)=latespecial_node then
+  flush_list(def_ref);
+ at z
+
+ at x
 special_node:special_out(p);
 @y
 special_node,latespecial_node:special_out(p);

Modified: trunk/Build/source/texk/web2c/eptexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/eptexdir/ChangeLog	2023-02-21 21:58:06 UTC (rev 66037)
+++ trunk/Build/source/texk/web2c/eptexdir/ChangeLog	2023-02-21 22:26:33 UTC (rev 66038)
@@ -1,3 +1,8 @@
+2023-02-21  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* pdfutils.ch: reduce memory usage for \special shipout,
+	a la HH/luatex.
+
 2023-02-14  Hironori Kitagawa  <h_kitagawa2001 at yahoo.co.jp>
 
 	* wcfname.test:

Modified: trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch
===================================================================
--- trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch	2023-02-21 21:58:06 UTC (rev 66037)
+++ trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch	2023-02-21 22:26:33 UTC (rev 66038)
@@ -1689,10 +1689,12 @@
 @!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 @@
 @!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 @@
 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

Modified: trunk/Build/source/texk/web2c/pdftexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/ChangeLog	2023-02-21 21:58:06 UTC (rev 66037)
+++ trunk/Build/source/texk/web2c/pdftexdir/ChangeLog	2023-02-21 22:26:33 UTC (rev 66038)
@@ -1,3 +1,8 @@
+2023-02-21  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* pdftex.web: reduce memory usage for \special shipout,
+	a la HH/luatex.
+
 2023-02-14  Thanh Han The  <hanthethanh at gmail.com>
 
 	* writet1.c (cs_mark) <CS_SEAC>: look for the composite(d) glyphs too,

Modified: trunk/Build/source/texk/web2c/pdftexdir/pdftex.web
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/pdftex.web	2023-02-21 21:58:06 UTC (rev 66037)
+++ trunk/Build/source/texk/web2c/pdftexdir/pdftex.web	2023-02-21 22:26:33 UTC (rev 66038)
@@ -18511,6 +18511,7 @@
 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 @@
     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 @@
 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 @@
     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 @@
 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 @@
 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 @@
   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

Modified: trunk/Build/source/texk/web2c/xetexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/ChangeLog	2023-02-21 21:58:06 UTC (rev 66037)
+++ trunk/Build/source/texk/web2c/xetexdir/ChangeLog	2023-02-21 22:26:33 UTC (rev 66038)
@@ -1,3 +1,8 @@
+2023-02-21  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* xetex.web: reduce memory usage for \special shipout,
+	a la HH/luatex.
+
 2023-02-19  Martin Hosken  <martin_hosken at sil.org>
 
 	* xetex.web (Insert glue for |split_top_skip|...),

Modified: trunk/Build/source/texk/web2c/xetexdir/xetex.web
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/xetex.web	2023-02-21 21:58:06 UTC (rev 66037)
+++ trunk/Build/source/texk/web2c/xetexdir/xetex.web	2023-02-21 22:26:33 UTC (rev 66038)
@@ -30251,19 +30251,20 @@
 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 @@
   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;
 



More information about the tex-live-commits mailing list.