[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 {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: intptr_t for KEY_PAIR,
Gavin D. Smith <=