From 9bda2c4c81b668b1d9abbb58cc4e805ac955a639 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 28 May 2024 15:55:24 -0400 Subject: libcpp: move label_text to its own header No functional change intended. libcpp/ChangeLog: * Makefile.in (TAGS_SOURCES): Add include/label-text.h. * include/label-text.h: New file. * include/rich-location.h: Include "label-text.h". (class label_text): Move to label-text.h. Signed-off-by: David Malcolm --- libcpp/Makefile.in | 2 +- libcpp/include/label-text.h | 102 +++++++++++++++++++++++++++++++++++++++++ libcpp/include/rich-location.h | 79 +------------------------------ 3 files changed, 105 insertions(+), 78 deletions(-) create mode 100644 libcpp/include/label-text.h diff --git a/libcpp/Makefile.in b/libcpp/Makefile.in index ebbca37777f..7e47153264c 100644 --- a/libcpp/Makefile.in +++ b/libcpp/Makefile.in @@ -271,7 +271,7 @@ ETAGS = @ETAGS@ TAGS_SOURCES = $(libcpp_a_SOURCES) internal.h system.h ucnid.h \ include/cpplib.h include/line-map.h include/mkdeps.h include/symtab.h \ - include/rich-location.h + include/rich-location.h include/label-text.h TAGS: $(TAGS_SOURCES) diff --git a/libcpp/include/label-text.h b/libcpp/include/label-text.h new file mode 100644 index 00000000000..13562cda41f --- /dev/null +++ b/libcpp/include/label-text.h @@ -0,0 +1,102 @@ +/* A very simple string class. + Copyright (C) 2015-2024 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 the +Free Software Foundation; either version 3, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING3. If not see +. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#ifndef LIBCPP_LABEL_TEXT_H +#define LIBCPP_LABEL_TEXT_H + +/* A struct for the result of range_label::get_text: a NUL-terminated buffer + of localized text, and a flag to determine if the caller should "free" the + buffer. */ + +class label_text +{ +public: + label_text () + : m_buffer (NULL), m_owned (false) + {} + + ~label_text () + { + if (m_owned) + free (m_buffer); + } + + /* Move ctor. */ + label_text (label_text &&other) + : m_buffer (other.m_buffer), m_owned (other.m_owned) + { + other.release (); + } + + /* Move assignment. */ + label_text & operator= (label_text &&other) + { + if (m_owned) + free (m_buffer); + m_buffer = other.m_buffer; + m_owned = other.m_owned; + other.release (); + return *this; + } + + /* Delete the copy ctor and copy-assignment operator. */ + label_text (const label_text &) = delete; + label_text & operator= (const label_text &) = delete; + + /* Create a label_text instance that borrows BUFFER from a + longer-lived owner. */ + static label_text borrow (const char *buffer) + { + return label_text (const_cast (buffer), false); + } + + /* Create a label_text instance that takes ownership of BUFFER. */ + static label_text take (char *buffer) + { + return label_text (buffer, true); + } + + void release () + { + m_buffer = NULL; + m_owned = false; + } + + const char *get () const + { + return m_buffer; + } + + bool is_owner () const + { + return m_owned; + } + +private: + char *m_buffer; + bool m_owned; + + label_text (char *buffer, bool owned) + : m_buffer (buffer), m_owned (owned) + {} +}; + +#endif /* !LIBCPP_LABEL_TEXT_H */ diff --git a/libcpp/include/rich-location.h b/libcpp/include/rich-location.h index a2ece8b033c..be424cb4b65 100644 --- a/libcpp/include/rich-location.h +++ b/libcpp/include/rich-location.h @@ -22,6 +22,8 @@ along with this program; see the file COPYING3. If not see #ifndef LIBCPP_RICH_LOCATION_H #define LIBCPP_RICH_LOCATION_H +#include "label-text.h" + class range_label; class label_effects; @@ -541,83 +543,6 @@ protected: const diagnostic_path *m_path; }; -/* A struct for the result of range_label::get_text: a NUL-terminated buffer - of localized text, and a flag to determine if the caller should "free" the - buffer. */ - -class label_text -{ -public: - label_text () - : m_buffer (NULL), m_owned (false) - {} - - ~label_text () - { - if (m_owned) - free (m_buffer); - } - - /* Move ctor. */ - label_text (label_text &&other) - : m_buffer (other.m_buffer), m_owned (other.m_owned) - { - other.release (); - } - - /* Move assignment. */ - label_text & operator= (label_text &&other) - { - if (m_owned) - free (m_buffer); - m_buffer = other.m_buffer; - m_owned = other.m_owned; - other.release (); - return *this; - } - - /* Delete the copy ctor and copy-assignment operator. */ - label_text (const label_text &) = delete; - label_text & operator= (const label_text &) = delete; - - /* Create a label_text instance that borrows BUFFER from a - longer-lived owner. */ - static label_text borrow (const char *buffer) - { - return label_text (const_cast (buffer), false); - } - - /* Create a label_text instance that takes ownership of BUFFER. */ - static label_text take (char *buffer) - { - return label_text (buffer, true); - } - - void release () - { - m_buffer = NULL; - m_owned = false; - } - - const char *get () const - { - return m_buffer; - } - - bool is_owner () const - { - return m_owned; - } - -private: - char *m_buffer; - bool m_owned; - - label_text (char *buffer, bool owned) - : m_buffer (buffer), m_owned (owned) - {} -}; - /* Abstract base class for labelling a range within a rich_location (e.g. for labelling expressions with their type). -- cgit v1.2.3