texlive[45394] Build/source/texk/web2c: pdftex.web, xetex.web: Avoid

commits+kakuto at tug.org commits+kakuto at tug.org
Sun Sep 24 06:09:47 CEST 2017


Revision: 45394
          http://tug.org/svn/texlive?view=revision&revision=45394
Author:   kakuto
Date:     2017-09-24 06:09:46 +0200 (Sun, 24 Sep 2017)
Log Message:
-----------
pdftex.web, xetex.web: Avoid overwriting prim_* entries by primitive() (H. Kitagawa)

Modified Paths:
--------------
    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/pdftexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/ChangeLog	2017-09-24 00:21:49 UTC (rev 45393)
+++ trunk/Build/source/texk/web2c/pdftexdir/ChangeLog	2017-09-24 04:09:46 UTC (rev 45394)
@@ -1,3 +1,7 @@
+2017-09-24  Hironori Kitagawa  <h_kitagawa2001 at yahoo.co.jp>
+
+	* pdxtex.web: Avoid overwriting prim_* entries by primitive().
+
 2017-09-14  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	* pdftosrc.cc: Fix a potential bug which I introduced on

Modified: trunk/Build/source/texk/web2c/pdftexdir/pdftex.web
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/pdftex.web	2017-09-24 00:21:49 UTC (rev 45393)
+++ trunk/Build/source/texk/web2c/pdftexdir/pdftex.web	2017-09-24 04:09:46 UTC (rev 45394)
@@ -6459,7 +6459,7 @@
 @d prim_prime=1777 {about 85\pct! of |primitive_size|}
 @d prim_base=1
 @d prim_next(#) == prim[#].lh {link for coalesced lists}
- at d prim_text(#) == prim[#].rh {string number for control sequence name}
+ at d prim_text(#) == prim[#].rh {string number for control sequence name, plus one}
 @d prim_is_full == (prim_used=prim_base) {test if all positions are occupied}
 @d prim_eq_level_field(#)==#.hh.b1
 @d prim_eq_type_field(#)==#.hh.b0
@@ -6468,6 +6468,7 @@
 @d prim_eq_type(#)==prim_eq_type_field(prim_eqtb[#]) {command code for equivalent}
 @d prim_equiv(#)==prim_equiv_field(prim_eqtb[#]) {equivalent value}
 @d undefined_primitive=0
+ at d biggest_char=255 { 65535 in XeTeX }
 
 @<Glob...@>=
 @!prim: array [0..prim_size] of two_halves;  {the primitives table}
@@ -6566,27 +6567,30 @@
 @!k:pointer; {index in string pool}
 @!j,@!l:integer;
 begin
-if s<256 then begin
-  p := s;
-  if (p<0) or (prim_eq_level(p)<>level_one) then
-    p := undefined_primitive;
-end
+if s<=biggest_char then begin
+  if s<0 then begin p:=undefined_primitive; goto found; end
+  else p:=(s mod prim_prime)+prim_base; {we start searching here}
+  end
 else begin
   j:=str_start[s];
   if s = str_ptr then l := cur_length else l := length(s);
   @<Compute the primitive code |h|@>;
-  p:=h+prim_base; {we start searching here; note that |0<=h<hash_prime|}
-  loop at +begin if prim_text(p)>0 then if length(prim_text(p))=l then
-    if str_eq_str(prim_text(p),s) then goto found;
-    if prim_next(p)=0 then
-      begin if no_new_control_sequence then
-        p:=undefined_primitive
-      else @<Insert a new primitive after |p|, then make
-        |p| point to it@>;
-      goto found;
-      end;
-    p:=prim_next(p);
+  p:=h+prim_base; {we start searching here; note that |0<=h<prim_prime|}
+  end;
+loop at +begin
+  if prim_text(p)>1+biggest_char then { |p| points a multi-letter primitive }
+    begin if length(prim_text(p)-1)=l then
+      if str_eq_str(prim_text(p)-1,s) then goto found;
+    end
+  else if prim_text(p)=1+s then goto found; { |p| points a single-letter primitive }
+  if prim_next(p)=0 then
+    begin if no_new_control_sequence then
+      p:=undefined_primitive
+    else @<Insert a new primitive after |p|, then make
+      |p| point to it@>;
+    goto found;
     end;
+  p:=prim_next(p);
   end;
 found: prim_lookup:=p;
 end;
@@ -6599,7 +6603,7 @@
   until prim_text(prim_used)=0; {search for an empty location in |prim|}
   prim_next(p):=prim_used; p:=prim_used;
   end;
-prim_text(p):=s;
+prim_text(p):=s+1;
 end
 
 @ The value of |prim_prime| should be roughly 85\pct! of
@@ -6669,7 +6673,7 @@
 @!prim_val:integer; {needed to fill |prim_eqtb|}
 begin if s<256 then begin
   cur_val:=s+single_base;
-  prim_val:=s;
+  prim_val:=prim_lookup(s);
 end
 else  begin k:=str_start[s]; l:=str_start[s+1]-k;
     {we will move |s| into the (possibly non-empty) |buffer|}
@@ -8918,7 +8922,7 @@
 begin save_scanner_status := scanner_status; scanner_status:=normal;
 get_token; scanner_status:=save_scanner_status;
 if cur_cs < hash_base then
-  cur_cs := prim_lookup(cur_cs-257)
+  cur_cs := prim_lookup(cur_cs-single_base)
 else
   cur_cs := prim_lookup(text(cur_cs));
 if cur_cs<>undefined_primitive then begin
@@ -11802,7 +11806,7 @@
   get_next;
   scanner_status:=save_scanner_status;
   if cur_cs < hash_base then
-    m := prim_lookup(cur_cs-257)
+    m := prim_lookup(cur_cs-single_base)
   else
     m := prim_lookup(text(cur_cs));
   b :=((cur_cmd<>undefined_cs) and
@@ -28797,7 +28801,7 @@
     get_next;
     scanner_status:=t;
     if cur_cs < hash_base then
-      cur_cs := prim_lookup(cur_cs-257)
+      cur_cs := prim_lookup(cur_cs-single_base)
     else
       cur_cs  := prim_lookup(text(cur_cs));
     if cur_cs<>undefined_primitive then begin

Modified: trunk/Build/source/texk/web2c/xetexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/ChangeLog	2017-09-24 00:21:49 UTC (rev 45393)
+++ trunk/Build/source/texk/web2c/xetexdir/ChangeLog	2017-09-24 04:09:46 UTC (rev 45394)
@@ -1,3 +1,7 @@
+2017-09-24  Hironori Kitagawa  <h_kitagawa2001 at yahoo.co.jp>
+
+	* xetex.web: Avoid overwriting prim_* entries by primitive().
+
 2017-09-05  Karl Berry  <karl at tug.org>
         and Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 

Modified: trunk/Build/source/texk/web2c/xetexdir/xetex.web
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/xetex.web	2017-09-24 00:21:49 UTC (rev 45393)
+++ trunk/Build/source/texk/web2c/xetexdir/xetex.web	2017-09-24 04:09:46 UTC (rev 45394)
@@ -6074,7 +6074,7 @@
 @d prim_prime=431 {about 85\pct! of |primitive_size|}
 @d prim_base=1
 @d prim_next(#) == prim[#].lh {link for coalesced lists}
- at d prim_text(#) == prim[#].rh {string number for control sequence name}
+ at d prim_text(#) == prim[#].rh {string number for control sequence name, plus one}
 @d prim_is_full == (prim_used=prim_base) {test if all positions are occupied}
 @d prim_eq_level_field(#)==#.hh.b1
 @d prim_eq_type_field(#)==#.hh.b0
@@ -6190,27 +6190,30 @@
 @!k:pointer; {index in string pool}
 @!j,@!l:integer;
 begin
-if s<256 then begin
-  p:=s;
-  if (p<0) or (prim_eq_level(p)<>level_one) then
-    p:=undefined_primitive;
-end
+if s<=biggest_char then begin
+  if s<0 then begin p:=undefined_primitive; goto found; end
+  else p:=(s mod prim_prime)+prim_base; {we start searching here}
+  end
 else begin
   j:=str_start_macro(s);
   if s = str_ptr then l:=cur_length else l:=length(s);
   @<Compute the primitive code |h|@>;
-  p:=h+prim_base; {we start searching here; note that |0<=h<hash_prime|}
-  loop at +begin if prim_text(p)>0 then if length(prim_text(p))=l then
-    if str_eq_str(prim_text(p),s) then goto found;
-    if prim_next(p)=0 then
-      begin if no_new_control_sequence then
-        p:=undefined_primitive
-      else @<Insert a new primitive after |p|, then make
-        |p| point to it@>;
-      goto found;
-      end;
-    p:=prim_next(p);
+  p:=h+prim_base; {we start searching here; note that |0<=h<prim_prime|}
+  end;
+loop at +begin
+  if prim_text(p)>1+biggest_char then { |p| points a multi-letter primitive }
+    begin if length(prim_text(p)-1)=l then
+      if str_eq_str(prim_text(p)-1,s) then goto found;
+    end
+  else if prim_text(p)=1+s then goto found; { |p| points a single-letter primitive }
+  if prim_next(p)=0 then
+    begin if no_new_control_sequence then
+      p:=undefined_primitive
+    else @<Insert a new primitive after |p|, then make
+      |p| point to it@>;
+    goto found;
     end;
+  p:=prim_next(p);
   end;
 found: prim_lookup:=p;
 end;
@@ -6223,7 +6226,7 @@
   until prim_text(prim_used)=0; {search for an empty location in |prim|}
   prim_next(p):=prim_used; p:=prim_used;
   end;
-prim_text(p):=s;
+prim_text(p):=s+1;
 end
 
 @ The value of |prim_prime| should be roughly 85\pct! of
@@ -6292,7 +6295,7 @@
 @!prim_val:integer; {needed to fill |prim_eqtb|}
 begin if s<256 then begin
   cur_val:=s+single_base;
-  prim_val:=s;
+  prim_val:=prim_lookup(s);
 end
 else  begin k:=str_start_macro(s); l:=str_start_macro(s+1)-k;
     {we will move |s| into the (possibly non-empty) |buffer|}
@@ -8633,7 +8636,7 @@
 begin save_scanner_status:=scanner_status; scanner_status:=normal;
 get_token; scanner_status:=save_scanner_status;
 if cur_cs < hash_base then
-  cur_cs:=prim_lookup(cur_cs-257)
+  cur_cs:=prim_lookup(cur_cs-single_base)
 else
   cur_cs:=prim_lookup(text(cur_cs));
 if cur_cs<>undefined_primitive then begin
@@ -11175,7 +11178,7 @@
   get_next;
   scanner_status:=save_scanner_status;
   if cur_cs < hash_base then
-    m:=prim_lookup(cur_cs-257)
+    m:=prim_lookup(cur_cs-single_base)
   else
     m:=prim_lookup(text(cur_cs));
   b :=((cur_cmd<>undefined_cs) and
@@ -24069,7 +24072,7 @@
     get_next;
     scanner_status:=t;
     if cur_cs < hash_base then
-      cur_cs:=prim_lookup(cur_cs-257)
+      cur_cs:=prim_lookup(cur_cs-single_base)
     else
       cur_cs :=prim_lookup(text(cur_cs));
     if cur_cs<>undefined_primitive then begin



More information about the tex-live-commits mailing list