aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
authorJeanHeyd Meneide <phdofthehouse@gmail.com>2020-12-01 14:39:47 -0700
committerJeff Law <law@redhat.com>2020-12-01 14:46:51 -0700
commiteccec8684142e05f2f92f0f5bd5b47dda3ba1529 (patch)
treefe7097d15b7f8eaa5cfa1635f0783e1824908083 /libcpp
parent39836f8324d819459cb21198e95b993588c6a2b1 (diff)
downloadgcc-eccec8684142e05f2f92f0f5bd5b47dda3ba1529.zip
gcc-eccec8684142e05f2f92f0f5bd5b47dda3ba1529.tar.gz
gcc-eccec8684142e05f2f92f0f5bd5b47dda3ba1529.tar.bz2
Feature: Macros for identifying the wide and narrow execution string literal encoding
gcc/c-family * c-cppbuiltin.c (c_cpp_builtins): Add predefined {__GNUC_EXECUTION_CHARSET_NAME} and _WIDE_EXECUTION_CHARSET_NAME} macros. gcc/ * doc/cpp.texi: Document new macros. gcc/testsuite/ * c-c++-common/cpp/wide-narrow-predef-macros.c: New test. libcpp/ * charset.c (init_iconv_desc): Initialize "to" and "from" fields. * directives.c (cpp_get_narrow_charset_name): New function. (cpp_get_wide_charset_name): Likewise. * include/cpplib.h (cpp_get_narrow_charset_name): Prototype. (cpp_get_wide_charset_name): Likewise. * internal.h (cset_converter): Add "to" and "from" fields.
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/charset.c3
-rw-r--r--libcpp/directives.c14
-rw-r--r--libcpp/include/cpplib.h5
-rw-r--r--libcpp/internal.h2
4 files changed, 24 insertions, 0 deletions
diff --git a/libcpp/charset.c b/libcpp/charset.c
index 28b81c9c..3e5578b 100644
--- a/libcpp/charset.c
+++ b/libcpp/charset.c
@@ -638,6 +638,9 @@ init_iconv_desc (cpp_reader *pfile, const char *to, const char *from)
char *pair;
size_t i;
+ ret.to = to;
+ ret.from = from;
+
if (!strcasecmp (to, from))
{
ret.func = convert_no_conversion;
diff --git a/libcpp/directives.c b/libcpp/directives.c
index 7511560..0d09da7 100644
--- a/libcpp/directives.c
+++ b/libcpp/directives.c
@@ -2596,6 +2596,20 @@ cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
pfile->cb = *cb;
}
+/* The narrow character set identifier. */
+const char *
+cpp_get_narrow_charset_name (cpp_reader *pfile)
+{
+ return pfile->narrow_cset_desc.to;
+}
+
+/* The wide character set identifier. */
+const char *
+cpp_get_wide_charset_name (cpp_reader *pfile)
+{
+ return pfile->wide_cset_desc.to;
+}
+
/* The dependencies structure. (Creates one if it hasn't already been.) */
class mkdeps *
cpp_get_deps (cpp_reader *pfile)
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index 2becd2e..692aee5 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -1005,6 +1005,11 @@ extern class mkdeps *cpp_get_deps (cpp_reader *) ATTRIBUTE_PURE;
extern const char *cpp_find_header_unit (cpp_reader *, const char *file,
bool angle_p, location_t);
+/* Call these to get name data about the various compile-time
+ charsets. */
+extern const char *cpp_get_narrow_charset_name (cpp_reader *) ATTRIBUTE_PURE;
+extern const char *cpp_get_wide_charset_name (cpp_reader *) ATTRIBUTE_PURE;
+
/* This function reads the file, but does not start preprocessing. It
returns the name of the original file; this is the same as the
input file, except for preprocessed input. This will generate at
diff --git a/libcpp/internal.h b/libcpp/internal.h
index 45bbbdd..4010af8 100644
--- a/libcpp/internal.h
+++ b/libcpp/internal.h
@@ -48,6 +48,8 @@ struct cset_converter
convert_f func;
iconv_t cd;
int width;
+ const char* from;
+ const char* to;
};
#define BITS_PER_CPPCHAR_T (CHAR_BIT * sizeof (cppchar_t))