gbranden pushed a commit to branch master
in repository groff.

commit d667af72e162c3ef269f7da269ab75f186ad9e4c
Author: G. Branden Robinson <g.branden.robin...@gmail.com>
AuthorDate: Wed Feb 26 04:40:23 2025 -0600

    [troff]: Improve `node` types' const-correctness.
    
    * src/roff/troff/node.{h,cpp}: Improve `const`-correctness of
      `ascii_output_file` class and related helper functions.
    
    * src/roff/troff/node.h (struct node, class space_node)
      (class hmotion_node, class space_char_hmotion_node)
      (class zero_width_node, class left_italic_corrected_node): Mark
      `ascii_print()` member functions' `ascii_output_file` pointer argument
      as `const`.
    
    * src/roff/troff/node.cpp (class ascii_output_file): Declare `outc()`
      and `outs()` member functions as `const` (for our C-only readers, this
      means they don't mutate the object upon which they're called).
    
      (ascii_output_file::outc, ascii_output_file::outs): Mark them as
      `const` in corresponding definitions.
    
      (class glyph_node, class ligature_node, class kern_pair_node)
      (class dbreak_node, class glyph_node, class ligature_node)
      (class italic_corrected_node, class break_char_node)
      (class composite_node): Mark `ascii_print()` member functions'
      `ascii_output_file` pointer argument as `const`.
    
      (italic_corrected_node::ascii_print)
      (break_char_node::ascii_print, dbreak_node::ascii_print)
      (kern_pair_node::ascii_print, node::ascii_print)
      (space_node::ascii_print, hmotion_node::ascii_print)
      (space_char_hmotion_node::ascii_print)
      (zero_width_node::ascii_print, composite_node::ascii_print)
      (left_italic_corrected_node::ascii_print): Mark them as `const` in
      corresponding definitions.
    
      (ascii_print_node_list, ascii_print_reverse_node_list): Mark
      `ascii_output_file` pointer argument as `const`.
---
 ChangeLog               | 33 ++++++++++++++++++++++++++++++
 src/roff/troff/node.cpp | 54 +++++++++++++++++++++++++------------------------
 src/roff/troff/node.h   | 12 +++++------
 3 files changed, 67 insertions(+), 32 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 0c8e08c44..5eb4dc56e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,36 @@
+2025-02-26  G. Branden Robinson <g.branden.robin...@gmail.com>
+
+       * src/roff/troff/node.{h,cpp}: Improve `const`-correctness of
+       `ascii_output_file` class and related helper functions.
+
+       * src/roff/troff/node.h (struct node, class space_node)
+       (class hmotion_node, class space_char_hmotion_node)
+       (class zero_width_node, class left_italic_corrected_node): Mark
+       `ascii_print()` member functions' `ascii_output_file` pointer
+       argument as `const`.
+
+       * src/roff/troff/node.cpp (class ascii_output_file): Declare
+       `outc()` and `outs()` member functions as `const` (for our
+       C-only readers, this means they don't mutate the object upon
+       which they're called).
+       (ascii_output_file::outc, ascii_output_file::outs): Mark them
+       as `const` in corresponding definitions.
+       (class glyph_node, class ligature_node, class kern_pair_node)
+       (class dbreak_node, class glyph_node, class ligature_node)
+       (class italic_corrected_node, class break_char_node)
+       (class composite_node): Mark `ascii_print()` member functions'
+       `ascii_output_file` pointer argument as `const`.
+       (italic_corrected_node::ascii_print)
+       (break_char_node::ascii_print, dbreak_node::ascii_print)
+       (kern_pair_node::ascii_print, node::ascii_print)
+       (space_node::ascii_print, hmotion_node::ascii_print)
+       (space_char_hmotion_node::ascii_print)
+       (zero_width_node::ascii_print, composite_node::ascii_print)
+       (left_italic_corrected_node::ascii_print): Mark them as `const`
+       in corresponding definitions.
+       (ascii_print_node_list, ascii_print_reverse_node_list): Mark
+       `ascii_output_file` pointer argument as `const`.
+
 2025-02-26  G. Branden Robinson <g.branden.robin...@gmail.com>
 
        * src/roff/troff/node.cpp: Fix code style nit.
diff --git a/src/roff/troff/node.cpp b/src/roff/troff/node.cpp
index 4ba404a39..58e9148a8 100644
--- a/src/roff/troff/node.cpp
+++ b/src/roff/troff/node.cpp
@@ -765,17 +765,17 @@ public:
   void really_transparent_char(unsigned char);
   void really_print_line(hunits x, vunits y, node *n, vunits, vunits, hunits 
width);
   void really_begin_page(int pageno, vunits page_length);
-  void outc(unsigned char c);
-  void outs(const char *s);
+  void outc(unsigned char c) const;
+  void outs(const char *s) const;
 };
 
-void ascii_output_file::outc(unsigned char c)
+void ascii_output_file::outc(unsigned char c) const
 {
   if (fp != 0 /* nullptr */)
     fputc(c, fp);
 }
 
-void ascii_output_file::outs(const char *s)
+void ascii_output_file::outs(const char *s) const
 {
   if (fp != 0 /* nullptr */) {
     fputc('<', fp);
@@ -1925,7 +1925,7 @@ public:
   void zero_width_tprint(troff_output_file *);
   hyphen_list *get_hyphen_list(hyphen_list *, int *);
   node *add_self(node *, hyphen_list **);
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   int character_type();
   bool is_same_as(node *);
@@ -1953,7 +1953,7 @@ public:
   node *copy();
   node *add_self(node *, hyphen_list **);
   hyphen_list *get_hyphen_list(hyphen_list *, int *);
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   bool is_same_as(node *);
   const char *type();
@@ -1981,7 +1981,7 @@ public:
   void tprint(troff_output_file *);
   hyphenation_type get_hyphenation_type();
   int ends_sentence();
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   bool is_same_as(node *);
   const char *type();
@@ -2012,7 +2012,7 @@ public:
   int ends_sentence();
   void split(int, node **, node **);
   hyphenation_type get_hyphenation_type();
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   bool is_same_as(node *);
   const char *type();
@@ -2201,7 +2201,7 @@ hyphenation_type glyph_node::get_hyphenation_type()
   return HYPHEN_MIDDLE;
 }
 
-void glyph_node::ascii_print(ascii_output_file *ascii)
+void glyph_node::ascii_print(const ascii_output_file *ascii)
 {
   unsigned char c = ci->get_ascii_code();
   if (c != '\0')
@@ -2265,7 +2265,7 @@ node *ligature_node::copy()
 #endif
 }
 
-void ligature_node::ascii_print(ascii_output_file *ascii)
+void ligature_node::ascii_print(const ascii_output_file *ascii)
 {
   n1->ascii_print(ascii);
   n2->ascii_print(ascii);
@@ -2670,7 +2670,7 @@ public:
                        node * = 0 /* nullptr */);
   ~italic_corrected_node();
   node *copy();
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   hunits width();
   node *last_char_node();
@@ -2748,7 +2748,7 @@ hunits italic_corrected_node::subscript_correction()
   return n->subscript_correction() - x;
 }
 
-void italic_corrected_node::ascii_print(ascii_output_file *out)
+void italic_corrected_node::ascii_print(const ascii_output_file *out)
 {
   n->ascii_print(out);
 }
@@ -2824,7 +2824,7 @@ public:
   hyphen_list *get_hyphen_list(hyphen_list *, int *);
   void tprint(troff_output_file *);
   void zero_width_tprint(troff_output_file *);
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   hyphenation_type get_hyphenation_type();
   int overlaps_vertically();
@@ -2947,7 +2947,7 @@ hyphenation_type break_char_node::get_hyphenation_type()
   return HYPHEN_MIDDLE;
 }
 
-void break_char_node::ascii_print(ascii_output_file *ascii)
+void break_char_node::ascii_print(const ascii_output_file *ascii)
 {
   ch->ascii_print(ascii);
 }
@@ -3531,7 +3531,8 @@ void vline_node::vertical_extent(vunits *min, vunits *max)
 
 /* ascii_print methods */
 
-static void ascii_print_node_list(ascii_output_file *ascii, node *n)
+static void ascii_print_node_list(const ascii_output_file *ascii,
+                                 node *n)
 {
   node *nn = n;
   while(nn != 0 /* nullptr */) {
@@ -3540,7 +3541,8 @@ static void ascii_print_node_list(ascii_output_file 
*ascii, node *n)
   }
 }
 
-static void ascii_print_reverse_node_list(ascii_output_file *ascii, node *n)
+static void ascii_print_reverse_node_list(
+    const ascii_output_file *ascii, node *n)
 {
   if (0 /* nullptr */ == n)
     return;
@@ -3548,40 +3550,40 @@ static void 
ascii_print_reverse_node_list(ascii_output_file *ascii, node *n)
   n->ascii_print(ascii);
 }
 
-void dbreak_node::ascii_print(ascii_output_file *ascii)
+void dbreak_node::ascii_print(const ascii_output_file *ascii)
 {
   ascii_print_reverse_node_list(ascii, none);
 }
 
-void kern_pair_node::ascii_print(ascii_output_file *ascii)
+void kern_pair_node::ascii_print(const ascii_output_file *ascii)
 {
   n1->ascii_print(ascii);
   n2->ascii_print(ascii);
 }
 
-void node::ascii_print(ascii_output_file *)
+void node::ascii_print(const ascii_output_file *)
 {
 }
 
-void space_node::ascii_print(ascii_output_file *ascii)
+void space_node::ascii_print(const ascii_output_file *ascii)
 {
   if (!n.is_zero())
     ascii->outc(' ');
 }
 
-void hmotion_node::ascii_print(ascii_output_file *ascii)
+void hmotion_node::ascii_print(const ascii_output_file *ascii)
 {
   // this is pretty arbitrary
   if (n >= points_to_units(2))
     ascii->outc(' ');
 }
 
-void space_char_hmotion_node::ascii_print(ascii_output_file *ascii)
+void space_char_hmotion_node::ascii_print(const ascii_output_file *ascii)
 {
   ascii->outc(' ');
 }
 
-void zero_width_node::ascii_print(ascii_output_file *out)
+void zero_width_node::ascii_print(const ascii_output_file *out) const
 {
   ascii_print_node_list(out, n);
 }
@@ -4330,7 +4332,7 @@ public:
   units size();
   void tprint(troff_output_file *);
   hyphenation_type get_hyphenation_type();
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   hyphen_list *get_hyphen_list(hyphen_list *, int *);
   node *add_self(node *, hyphen_list **);
@@ -4411,7 +4413,7 @@ void composite_node::asciify(macro *m)
     m->append(this);
 }
 
-void composite_node::ascii_print(ascii_output_file *ascii)
+void composite_node::ascii_print(const ascii_output_file *ascii)
 {
   unsigned char c = ci->get_ascii_code();
   if (c != 0)
@@ -5615,7 +5617,7 @@ bool left_italic_corrected_node::is_same_as(node *nd)
          && same_node(n, ((left_italic_corrected_node *)nd)->n));
 }
 
-void left_italic_corrected_node::ascii_print(ascii_output_file *out)
+void left_italic_corrected_node::ascii_print(const ascii_output_file *out)
 {
   if (n)
     n->ascii_print(out);
diff --git a/src/roff/troff/node.h b/src/roff/troff/node.h
index fe96fa1c6..3bf034876 100644
--- a/src/roff/troff/node.h
+++ b/src/roff/troff/node.h
@@ -85,7 +85,7 @@ struct node {
   virtual node *add_discretionary_hyphen();
   virtual node *add_self(node *, hyphen_list **);
   virtual hyphen_list *get_hyphen_list(hyphen_list *, int *);
-  virtual void ascii_print(ascii_output_file *);
+  virtual void ascii_print(const ascii_output_file *);
   virtual void asciify(macro *);
   virtual int discardable();
   virtual void spread_space(int *, hunits *);
@@ -201,7 +201,7 @@ public:
                              bool /* is_inner */ = false);
   int nbreaks();
   void split(int, node **, node **);
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   bool is_same_as(node *);
   void asciify(macro *);
   const char *type();
@@ -350,7 +350,7 @@ public:
   void asciify(macro *);
   void tprint(troff_output_file *);
   hunits width();
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   bool is_same_as(node *);
   const char *type();
   bool causes_tprint();
@@ -367,7 +367,7 @@ public:
   space_char_hmotion_node(hunits, color *, statem *, int,
                          node * /* nxt */ = 0 /* nullptr */);
   node *copy();
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   void tprint(troff_output_file *);
   bool is_same_as(node *);
@@ -461,7 +461,7 @@ public:
   ~zero_width_node();
   node *copy();
   void tprint(troff_output_file *);
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *) const;
   bool is_same_as(node *);
   const char *type();
   bool causes_tprint();
@@ -480,7 +480,7 @@ public:
                             node * /* xx */ = 0 /* nullptr */);
   ~left_italic_corrected_node();
   void tprint(troff_output_file *);
-  void ascii_print(ascii_output_file *);
+  void ascii_print(const ascii_output_file *);
   void asciify(macro *);
   node *copy();
   bool is_same_as(node *);

_______________________________________________
groff-commit mailing list
groff-commit@gnu.org
https://lists.gnu.org/mailman/listinfo/groff-commit

Reply via email to