LCOV - code coverage report
Current view: top level - gcc - xml.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 95.7 % 23 22
Test Date: 2026-02-28 14:20:25 Functions: 83.3 % 6 5
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* Classes for representing XML trees.
       2              :    Copyright (C) 2024-2026 Free Software Foundation, Inc.
       3              :    Contributed by David Malcolm <dmalcolm@redhat.com>.
       4              : 
       5              : This file is part of GCC.
       6              : 
       7              : GCC is free software; you can redistribute it and/or modify it under
       8              : the terms of the GNU General Public License as published by the Free
       9              : Software Foundation; either version 3, or (at your option) any later
      10              : version.
      11              : 
      12              : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      13              : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      14              : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      15              : for more details.
      16              : 
      17              : You should have received a copy of the GNU General Public License
      18              : along with GCC; see the file COPYING3.  If not see
      19              : <http://www.gnu.org/licenses/>.  */
      20              : 
      21              : #ifndef GCC_XML_H
      22              : #define GCC_XML_H
      23              : 
      24              : namespace xml {
      25              : 
      26              : // Forward decls; indentation reflects inheritance
      27              : struct node;
      28              :   struct text;
      29              :   struct node_with_children;
      30              :     struct document;
      31              :     struct element;
      32              :   struct doctypedecl;
      33              :   struct comment;
      34              :   struct raw;
      35              : 
      36        15134 : struct node
      37              : {
      38              :   virtual ~node () {}
      39              :   virtual void write_as_xml (pretty_printer *pp,
      40              :                              int depth, bool indent) const = 0;
      41          512 :   virtual text *dyn_cast_text ()
      42              :   {
      43          512 :     return nullptr;
      44              :   }
      45            4 :   virtual element *dyn_cast_element ()
      46              :   {
      47            4 :     return nullptr;
      48              :   }
      49              :   void dump (FILE *out) const;
      50            0 :   void DEBUG_FUNCTION dump () const { dump (stderr); }
      51              : };
      52              : 
      53              : struct text : public node
      54              : {
      55         5836 :   text (std::string str)
      56         5836 :   : m_str (std::move (str))
      57              :   {}
      58              : 
      59              :   void write_as_xml (pretty_printer *pp,
      60              :                      int depth, bool indent) const final override;
      61              : 
      62        25617 :   text *dyn_cast_text () final override
      63              :   {
      64        25617 :     return this;
      65              :   }
      66              : 
      67              :   std::string m_str;
      68              : };
      69              : 
      70         9201 : struct node_with_children : public node
      71              : {
      72              :   void add_child (std::unique_ptr<node> node);
      73              :   void add_text (std::string str);
      74              :   void add_text_from_pp (pretty_printer &pp);
      75              :   void add_comment (std::string str);
      76              : 
      77              :   element *find_child_element (std::string kind) const;
      78              : 
      79              :   std::vector<std::unique_ptr<node>> m_children;
      80              : };
      81              : 
      82           30 : struct document : public node_with_children
      83              : {
      84              :   void write_as_xml (pretty_printer *pp,
      85              :                      int depth, bool indent) const final override;
      86              : 
      87              :   std::unique_ptr<doctypedecl> m_doctypedecl;
      88              : };
      89              : 
      90           22 : struct doctypedecl : public node
      91              : {
      92              :   // still abstract
      93              : };
      94              : 
      95              : struct element : public node_with_children
      96              : {
      97         9171 :   element (std::string kind, bool preserve_whitespace)
      98         9171 :     : m_kind (std::move (kind)),
      99         9171 :     m_preserve_whitespace (preserve_whitespace)
     100         9171 :   {}
     101              : 
     102           12 :   element *dyn_cast_element () final override
     103              :   {
     104           12 :     return this;
     105              :   }
     106              : 
     107              :   void write_as_xml (pretty_printer *pp,
     108              :                      int depth, bool indent) const final override;
     109              : 
     110              :   void set_attr (const char *name, std::string value);
     111              :   const char *get_attr (const char *name) const;
     112              : 
     113              :   std::string m_kind;
     114              :   bool m_preserve_whitespace;
     115              :   std::map<std::string, std::string> m_attributes;
     116              :   std::vector<std::string> m_key_insertion_order;
     117              : };
     118              : 
     119              : /* An XML comment.  */
     120              : 
     121              : struct comment : public node
     122              : {
     123            8 :   comment (std::string text)
     124            8 :   : m_text (std::move (text))
     125              :   {
     126              :   }
     127              : 
     128              :   void write_as_xml (pretty_printer *pp,
     129              :                      int depth, bool indent) const final override;
     130              : 
     131              :   std::string m_text;
     132              : };
     133              : 
     134              : /* A fragment of raw XML source, to be spliced in directly.
     135              :    Use sparingly.  */
     136              : 
     137              : struct raw : public node
     138              : {
     139           67 :   raw (std::string xml_src)
     140          134 :   : m_xml_src (xml_src)
     141              :   {
     142              :   }
     143              : 
     144              :   void write_as_xml (pretty_printer *pp,
     145              :                      int depth, bool indent) const final override;
     146              : 
     147              :   std::string m_xml_src;
     148              : };
     149              : 
     150              : } // namespace xml
     151              : 
     152              : #endif /* GCC_XML_H.  */
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.