texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

branch master updated: intptr_t for KEY_PAIR


From: Gavin D. Smith
Subject: branch master updated: intptr_t for KEY_PAIR
Date: Wed, 05 Apr 2023 10:46:36 -0400

This is an automated email from the git hooks/post-receive script.

gavin pushed a commit to branch master
in repository texinfo.

The following commit(s) were added to refs/heads/master by this push:
     new d58abbbb85 intptr_t for KEY_PAIR
d58abbbb85 is described below

commit d58abbbb85fd2a27b3b1d1174b1616946a6070c5
Author: Gavin Smith <gavinsmith0123@gmail.com>
AuthorDate: Wed Apr 5 15:46:26 2023 +0100

    intptr_t for KEY_PAIR
    
    * tp/Texinfo/XS/parsetexi/tree_types.h (KEY_PAIR):
    Store 'value' field as an 'intptr_t', which is said to
    allow storage of pointer values, and may avoid possible
    warnings of pointer/integer casts when storing integer values,
    especially on MS-Windows.  Consequent changes throughout the
    rest of the code.
    
    * tp/Texinfo/XS/parsetexi/extra.c
    (lookup_extra_element, lookup_info_element): New functions to
    simplify some code that called lookup_info and lookup_extra.
    
    Suggestion From Eli.
---
 ChangeLog                                 | 17 +++++++++
 tp/Texinfo/XS/parsetexi/api.c             |  2 +-
 tp/Texinfo/XS/parsetexi/convert.c         | 53 ++++++++++++++--------------
 tp/Texinfo/XS/parsetexi/end_line.c        | 34 +++++++++---------
 tp/Texinfo/XS/parsetexi/extra.c           | 57 +++++++++++++++++++++++--------
 tp/Texinfo/XS/parsetexi/handle_commands.c |  2 +-
 tp/Texinfo/XS/parsetexi/parser.h          |  2 ++
 tp/Texinfo/XS/parsetexi/tree.c            |  8 ++---
 tp/Texinfo/XS/parsetexi/tree_types.h      |  3 +-
 9 files changed, 112 insertions(+), 66 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 3322baf69a..c27a617551 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2023-04-05  Gavin Smith <gavinsmith0123@gmail.com>
+
+       intptr_t for KEY_PAIR
+
+       * tp/Texinfo/XS/parsetexi/tree_types.h (KEY_PAIR):
+       Store 'value' field as an 'intptr_t', which is said to
+       allow storage of pointer values, and may avoid possible
+       warnings of pointer/integer casts when storing integer values,
+       especially on MS-Windows.  Consequent changes throughout the
+       rest of the code.
+
+       * tp/Texinfo/XS/parsetexi/extra.c
+       (lookup_extra_element, lookup_info_element): New functions to
+       simplify some code that called lookup_info and lookup_extra.
+
+       Suggestion From Eli.
+
 2023-04-04  Gavin Smith <gavinsmith0123@gmail.com>
 
        * doc/texinfo.texi (Line Macros): Change second example to
diff --git a/tp/Texinfo/XS/parsetexi/api.c b/tp/Texinfo/XS/parsetexi/api.c
index a96b7ceda4..816d6f7472 100644
--- a/tp/Texinfo/XS/parsetexi/api.c
+++ b/tp/Texinfo/XS/parsetexi/api.c
@@ -316,7 +316,7 @@ store_additional_info (ELEMENT *e, ASSOCIATED_INFO* a, char 
*key)
         {
 #define STORE(sv) hv_store (extra, key, strlen (key), sv, 0)
           char *key = a->info[i].key;
-          ELEMENT *f = a->info[i].value;
+          ELEMENT *f = (ELEMENT *) a->info[i].value;
 
           if (a->info[i].type == extra_deleted)
             continue;
diff --git a/tp/Texinfo/XS/parsetexi/convert.c 
b/tp/Texinfo/XS/parsetexi/convert.c
index 0c7a4b91b6..f8cc69e510 100644
--- a/tp/Texinfo/XS/parsetexi/convert.c
+++ b/tp/Texinfo/XS/parsetexi/convert.c
@@ -1,4 +1,4 @@
-/* Copyright 2010-2019 Free Software Foundation, Inc.
+/* Copyright 2010-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -61,26 +61,26 @@ static void
 expand_cmd_args_to_texi (ELEMENT *e, TEXT *result)
 {
   enum command_id cmd = e->cmd;
-  KEY_PAIR *k, *arg_line, *k_spc_before_arg;
+  KEY_PAIR *k, *arg_line;
+  ELEMENT *elt, *spc_before_arg;
 
   if (cmd)
     {
-      KEY_PAIR *k;
       ADD("@");  ADD(command_name(cmd));
-      k = lookup_info (e, "spaces_after_cmd_before_arg");
-      if (k)
-        ADD((char *)k->value->text.text);
+      elt = lookup_info_element (e, "spaces_after_cmd_before_arg");
+      if (elt)
+        ADD((char *)elt->text.text);
     }
 
-  k_spc_before_arg = lookup_info (e, "spaces_before_argument");
+  spc_before_arg = lookup_info_element (e, "spaces_before_argument");
 
   arg_line = lookup_info (e, "arg_line");
   if (arg_line)
     {
       char *s = 0;
 
-      if (k_spc_before_arg)
-        ADD((char *)k_spc_before_arg->value->text.text);
+      if (spc_before_arg)
+        ADD((char *)spc_before_arg->text.text);
 
       s = (char *)arg_line->value;
       if (s)
@@ -105,8 +105,8 @@ expand_cmd_args_to_texi (ELEMENT *e, TEXT *result)
           ADD((char *)k->value);
         }
 
-      if (k_spc_before_arg)
-        ADD((char *)k_spc_before_arg->value->text.text);
+      if (spc_before_arg)
+        ADD((char *)spc_before_arg->text.text);
 
       if ((command_data(cmd).flags & CF_block
            && ! (command_data(cmd).flags & CF_def
@@ -145,14 +145,15 @@ expand_cmd_args_to_texi (ELEMENT *e, TEXT *result)
     }
   else
     {
-      if (k_spc_before_arg)
-        ADD((char *)k_spc_before_arg->value->text.text);
+      if (spc_before_arg)
+        ADD((char *)spc_before_arg->text.text);
     }
 }
 
 static void
 convert_to_texinfo_internal (ELEMENT *e, TEXT *result)
 {
+  ELEMENT *elt;
 
   if (e->type == ET_spaces_inserted
       || e->type == ET_bracketed_inserted
@@ -162,7 +163,6 @@ convert_to_texinfo_internal (ELEMENT *e, TEXT *result)
     ADD(e->text.text);
   else
     {
-      KEY_PAIR *k;
       if (e->cmd
           || e->type == ET_def_line)
         {
@@ -170,13 +170,10 @@ convert_to_texinfo_internal (ELEMENT *e, TEXT *result)
         }
 
       if (e->type == ET_bracketed_arg)
-        {
-          KEY_PAIR *k;
-          ADD("{");
-        }
-      k = lookup_info (e, "spaces_before_argument");
-      if (k)
-        ADD((char *)k->value->text.text);
+        ADD("{");
+      elt = lookup_info_element (e, "spaces_before_argument");
+      if (elt)
+        ADD((char *)elt->text.text);
       if (e->contents.number > 0)
         {
           int i;
@@ -184,13 +181,15 @@ convert_to_texinfo_internal (ELEMENT *e, TEXT *result)
             convert_to_texinfo_internal (e->contents.list[i], result);
         }
 
-      k = lookup_info (e, "spaces_after_argument");
-      if (k)
-        ADD((char *)k->value->text.text);
+      elt = lookup_info_element (e, "spaces_after_argument");
+      if (elt)
+        {
+          ADD((char *)elt->text.text);
+        }
 
-      k = lookup_info (e, "comment_at_end");
-      if (k)
-        convert_to_texinfo_internal ((ELEMENT *)k->value, result);
+      elt = lookup_info_element (e, "comment_at_end");
+      if (elt)
+        convert_to_texinfo_internal (elt, result);
 
       if (e->type == ET_bracketed_arg)
         ADD("}");
diff --git a/tp/Texinfo/XS/parsetexi/end_line.c 
b/tp/Texinfo/XS/parsetexi/end_line.c
index b52291ced9..d40721c508 100644
--- a/tp/Texinfo/XS/parsetexi/end_line.c
+++ b/tp/Texinfo/XS/parsetexi/end_line.c
@@ -709,30 +709,30 @@ end_line_def_line (ELEMENT *current)
                   if (arg->type == ET_bracketed_arg)
                     {
                       /* duplicate leading and trailing spaces info */
-                      KEY_PAIR *kspaces_before
-                        = lookup_info (arg, "spaces_before_argument");
-                      KEY_PAIR *kspaces_after
-                        = lookup_info (arg, "spaces_after_argument");
+                      ELEMENT *spaces_before
+                        = lookup_info_element (arg, "spaces_before_argument");
+                      ELEMENT *spaces_after
+                        = lookup_info_element (arg, "spaces_after_argument");
 
                       if (arg->contents.number > 0
-                          || kspaces_before || kspaces_after)
+                          || spaces_before || spaces_after)
                         {
                           ELEMENT *tmp_element = new_element (ET_NONE);
                           tmp_element->contents = arg->contents;
-                          if (kspaces_before)
+                          if (spaces_before)
                             {
                               ELEMENT *spaces_element = new_element (ET_NONE);
                               text_append (&spaces_element->text,
-                                           (char 
*)kspaces_before->value->text.text);
+                                           (char *)spaces_before->text.text);
                               add_info_element_oot (tmp_element,
                                                     "spaces_before_argument",
                                                     spaces_element);
                             }
-                          if (kspaces_after)
+                          if (spaces_after)
                             {
                               ELEMENT *spaces_element = new_element (ET_NONE);
                               text_append (&spaces_element->text,
-                                           (char 
*)kspaces_after->value->text.text);
+                                           (char *)spaces_after->text.text);
                               add_info_element_oot (tmp_element,
                                                     "spaces_after_argument",
                                                     spaces_element);
@@ -901,13 +901,13 @@ end_line_starting_block (ELEMENT *current)
   if (command == CM_multitable
       && (k = lookup_extra (current->parent, "columnfractions")))
     {
-      ELEMENT *misc_cmd = k->value;
-      KEY_PAIR *misc_args;
+      ELEMENT *misc_cmd = (ELEMENT *) k->value;
+      ELEMENT *misc_args;
 
-      if ((misc_args = lookup_extra (misc_cmd, "misc_args")))
+      if ((misc_args = lookup_extra_element (misc_cmd, "misc_args")))
         {
           add_extra_integer (current->parent, "max_columns",
-                             misc_args->value->contents.number);
+                             misc_args->contents.number);
         }
       else
         {
@@ -1046,7 +1046,7 @@ end_line_starting_block (ELEMENT *current)
             }
           else
             {
-              ELEMENT *e = k->value;
+              ELEMENT *e = (ELEMENT *) k->value;
               if (!(command_flags(e) & CF_brace)
                   || (command_data(e->cmd).data == BRACE_noarg))
                 {
@@ -1074,7 +1074,7 @@ end_line_starting_block (ELEMENT *current)
 
               for (i = 0; i < e->contents.number; i++)
                 {
-                  if (contents_child_by_index (e, i) == k->value)
+                  if (contents_child_by_index (e, i) == (ELEMENT *) k->value)
                     {
                       i++;
                       break;
@@ -1089,7 +1089,7 @@ end_line_starting_block (ELEMENT *current)
                            && !*(f->text.text
                                  + strspn (f->text.text, whitespace_chars))))
                     {
-                      k->value->type = ET_NONE;
+                      ((ELEMENT *) k->value)->type = ET_NONE;
                       k->key = "";
                       k->type = extra_deleted;
                       break;
@@ -1102,7 +1102,7 @@ end_line_starting_block (ELEMENT *current)
       KEY_PAIR *k = lookup_extra (current, "command_as_argument");
       if (k && k->value)
         {
-          enum command_id cmd = k->value->cmd;
+          enum command_id cmd = ((ELEMENT *) k->value)->cmd;
           if (cmd && (command_data(cmd).flags & CF_accent))
             {
               command_warn (current, "accent command `@%s' "
diff --git a/tp/Texinfo/XS/parsetexi/extra.c b/tp/Texinfo/XS/parsetexi/extra.c
index 5afac91d36..90ad6dfc1d 100644
--- a/tp/Texinfo/XS/parsetexi/extra.c
+++ b/tp/Texinfo/XS/parsetexi/extra.c
@@ -1,4 +1,4 @@
-/* Copyright 2010-2019 Free Software Foundation, Inc.
+/* Copyright 2010-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@
 #include "parser.h"
 
 static void
-add_associated_info_key (ASSOCIATED_INFO *a, char *key, ELEMENT *value,
+add_associated_info_key (ASSOCIATED_INFO *a, char *key, intptr_t value,
                          enum extra_type type)
 {
   int i;
@@ -50,7 +50,8 @@ add_associated_info_key (ASSOCIATED_INFO *a, char *key, 
ELEMENT *value,
 void
 add_extra_element (ELEMENT *e, char *key, ELEMENT *value)
 {
-  add_associated_info_key (e->extra_info, key, value, extra_element);
+  add_associated_info_key (e->extra_info, key,
+                           (intptr_t) value, extra_element);
 }
 
 /* Add an extra key that is a reference to another element that is
@@ -60,13 +61,15 @@ add_extra_element (ELEMENT *e, char *key, ELEMENT *value)
 void
 add_extra_element_oot (ELEMENT *e, char *key, ELEMENT *value)
 {
-  add_associated_info_key (e->extra_info, key, value, extra_element_oot);
+  add_associated_info_key (e->extra_info,
+                           key, (intptr_t) value, extra_element_oot);
 }
 
 void
 add_info_element_oot (ELEMENT *e, char *key, ELEMENT *value)
 {
-  add_associated_info_key (e->info_info, key, value, extra_element_oot);
+  add_associated_info_key (e->info_info,
+                           key, (intptr_t) value, extra_element_oot);
 }
 
 /* Add an extra key that is a reference to the contents array of another
@@ -74,7 +77,8 @@ add_info_element_oot (ELEMENT *e, char *key, ELEMENT *value)
 void
 add_extra_contents (ELEMENT *e, char *key, ELEMENT *value)
 {
-  add_associated_info_key (e->extra_info, key, value, extra_contents);
+  add_associated_info_key (e->extra_info,
+                           key, (intptr_t) value, extra_contents);
 }
 
 /* Add an extra key that is a reference to the text field of another
@@ -82,46 +86,48 @@ add_extra_contents (ELEMENT *e, char *key, ELEMENT *value)
 void
 add_extra_text (ELEMENT *e, char *key, ELEMENT *value)
 {
-  add_associated_info_key (e->extra_info, key, value, extra_text);
+  add_associated_info_key (e->extra_info, key, (intptr_t) value, extra_text);
 }
 
 void
 add_extra_misc_args (ELEMENT *e, char *key, ELEMENT *value)
 {
   if (!value) return;
-  add_associated_info_key (e->extra_info, key, value, extra_misc_args);
+  add_associated_info_key (e->extra_info,
+                           key, (intptr_t) value, extra_misc_args);
 }
 
 void
 add_extra_string (ELEMENT *e, char *key, char *value)
 {
-  add_associated_info_key (e->extra_info, key, (ELEMENT *) value, 
extra_string);
+  add_associated_info_key (e->extra_info, key, (intptr_t) value, extra_string);
 }
 
 void
 add_info_string (ELEMENT *e, char *key, char *value)
 {
-  add_associated_info_key (e->info_info, key, (ELEMENT *) value, extra_string);
+  add_associated_info_key (e->info_info, key, (intptr_t) value, extra_string);
 }
 
 void
 add_extra_string_dup (ELEMENT *e, char *key, char *value)
 {
-  add_associated_info_key (e->extra_info, key, (ELEMENT *) strdup (value),
-                           extra_string);
+  add_associated_info_key (e->extra_info,
+                           key, (intptr_t) strdup (value), extra_string);
 }
 
 void
 add_info_string_dup (ELEMENT *e, char *key, char *value)
 {
-  add_associated_info_key (e->info_info, key, (ELEMENT *) strdup (value),
-                           extra_string);
+  add_associated_info_key (e->info_info,
+                           key, (intptr_t) strdup (value), extra_string);
 }
 
 void
 add_extra_integer (ELEMENT *e, char *key, long value)
 {
-  add_associated_info_key (e->extra_info, key, (ELEMENT *) value, 
extra_integer);
+  add_associated_info_key (e->extra_info,
+                           key, (intptr_t) value, extra_integer);
 }
 
 KEY_PAIR *
@@ -136,12 +142,33 @@ lookup_associated_info (ASSOCIATED_INFO *a, char *key)
   return 0;
 }
 
+ELEMENT *
+lookup_extra_element (ELEMENT *e, char *key)
+{
+  KEY_PAIR *k;
+  k = lookup_associated_info (e->extra_info, key);
+  if (!k)
+    return 0;
+  return (ELEMENT *) k->value;
+}
+
 KEY_PAIR *
 lookup_extra (ELEMENT *e, char *key)
 {
   return lookup_associated_info (e->extra_info, key);
 }
 
+ELEMENT *
+lookup_info_element (ELEMENT *e, char *key)
+{
+  KEY_PAIR *k;
+  k = lookup_associated_info (e->info_info, key);
+  if (!k)
+    return 0;
+  return (ELEMENT *) k->value;
+}
+
+
 KEY_PAIR *
 lookup_info (ELEMENT *e, char *key)
 {
diff --git a/tp/Texinfo/XS/parsetexi/handle_commands.c 
b/tp/Texinfo/XS/parsetexi/handle_commands.c
index 9020e29af0..814bcb2456 100644
--- a/tp/Texinfo/XS/parsetexi/handle_commands.c
+++ b/tp/Texinfo/XS/parsetexi/handle_commands.c
@@ -892,7 +892,7 @@ handle_line_command (ELEMENT *current, char **line_inout,
                   KEY_PAIR *k; ELEMENT *e;
                   k = lookup_extra (parent, "authors");
                   if (k)
-                    e = k->value;
+                    e = (ELEMENT *) k->value;
                   else
                     {
                       e = new_element (ET_NONE);
diff --git a/tp/Texinfo/XS/parsetexi/parser.h b/tp/Texinfo/XS/parsetexi/parser.h
index f29e11d3ab..644f861dd2 100644
--- a/tp/Texinfo/XS/parsetexi/parser.h
+++ b/tp/Texinfo/XS/parsetexi/parser.h
@@ -235,6 +235,8 @@ void add_info_string_dup (ELEMENT *e, char *key, char 
*value);
 void add_info_element_oot (ELEMENT *e, char *key, ELEMENT *value);
 KEY_PAIR *lookup_extra (ELEMENT *e, char *key);
 KEY_PAIR *lookup_info (ELEMENT *e, char *key);
+ELEMENT *lookup_extra_element (ELEMENT *e, char *key);
+ELEMENT *lookup_info_element (ELEMENT *e, char *key);
 
 /* In menus.c */
 int handle_menu_entry_separators (ELEMENT **current_inout, char **line_inout);
diff --git a/tp/Texinfo/XS/parsetexi/tree.c b/tp/Texinfo/XS/parsetexi/tree.c
index e1e3341951..4062aab49e 100644
--- a/tp/Texinfo/XS/parsetexi/tree.c
+++ b/tp/Texinfo/XS/parsetexi/tree.c
@@ -1,4 +1,4 @@
-/* Copyright 2010-2019 Free Software Foundation, Inc.
+/* Copyright 2010-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -75,17 +75,17 @@ destroy_associated_info (ASSOCIATED_INFO *a)
       switch (a->info[i].type)
         {
         case extra_string:
-          free (a->info[i].value);
+          free ((char *) a->info[i].value);
           break;
         case extra_element_oot:
-          destroy_element_and_children (a->info[i].value);
+          destroy_element_and_children ((ELEMENT *) a->info[i].value);
           break;
         case extra_contents:
           if (a->info[i].value)
             destroy_element ((ELEMENT *) a->info[i].value);
           break;
         case extra_misc_args:
-          destroy_element_and_children (a->info[i].value);
+          destroy_element_and_children ((ELEMENT *) a->info[i].value);
           break;
 
         default:
diff --git a/tp/Texinfo/XS/parsetexi/tree_types.h 
b/tp/Texinfo/XS/parsetexi/tree_types.h
index 9d5e81d005..aedbeaccaa 100644
--- a/tp/Texinfo/XS/parsetexi/tree_types.h
+++ b/tp/Texinfo/XS/parsetexi/tree_types.h
@@ -17,6 +17,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stdlib.h>
+#include <stdint.h>
 
 #include "command_ids.h"
 #include "element_types.h"
@@ -57,7 +58,7 @@ enum source_mark_status {
 typedef struct KEY_PAIR {
     char *key;
     enum extra_type type;
-    struct ELEMENT *value;
+    intptr_t value;
 } KEY_PAIR;
 
 typedef struct ELEMENT_LIST {



reply via email to

[Prev in Thread] Current Thread [Next in Thread]