Move macro-spellchecking code from "gcc" to new files in c-family
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 6 Dec 2017 19:56:11 +0000 (19:56 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Wed, 6 Dec 2017 19:56:11 +0000 (19:56 +0000)
The code for spellchecking macros really belongs in c-family, rather
than in gcc/spellcheck-tree.c, so this patch moves it there.

gcc/ChangeLog:
* Makefile.in (C_COMMON_OBJS): Add c-family/c-spellcheck.o.
* spellcheck-tree.c (find_closest_macro_cpp_cb): Move to
c-family/c-spellcheck.cc.
(best_macro_match::best_macro_match): Likewise.
* spellcheck-tree.h
(struct edit_distance_traits<cpp_hashnode *>): Move to
c-family/c-spellcheck.h.
(class best_macro_match): Likewise.

gcc/c-family/ChangeLog:
* c-spellcheck.cc: New file, taken from macro-handling code in
spellcheck-tree.c.
* c-spellcheck.h: New file, taken from macro-handling code in
spellcheck-tree.h.

gcc/c/ChangeLog:
* c-decl.c: Include "c-family/c-spellcheck.h".

gcc/cp/ChangeLog:
* name-lookup.c: Include "c-family/c-spellcheck.h".

From-SVN: r255452

gcc/ChangeLog
gcc/Makefile.in
gcc/c-family/ChangeLog
gcc/c-family/c-spellcheck.cc [new file with mode: 0644]
gcc/c-family/c-spellcheck.h [new file with mode: 0644]
gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/cp/ChangeLog
gcc/cp/name-lookup.c
gcc/spellcheck-tree.c
gcc/spellcheck-tree.h

index 0310a5202d86f8693a64f6ced115f451213e4d4a..3661e97950078294afbc86069771ec444f7daa2d 100644 (file)
@@ -1,3 +1,14 @@
+2017-12-06  David Malcolm  <dmalcolm@redhat.com>
+
+       * Makefile.in (C_COMMON_OBJS): Add c-family/c-spellcheck.o.
+       * spellcheck-tree.c (find_closest_macro_cpp_cb): Move to
+       c-family/c-spellcheck.cc.
+       (best_macro_match::best_macro_match): Likewise.
+       * spellcheck-tree.h
+       (struct edit_distance_traits<cpp_hashnode *>): Move to
+       c-family/c-spellcheck.h.
+       (class best_macro_match): Likewise.
+
 2017-12-06  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/83293
index db43fc1dee0bc3be6070cf76957bd393ed58f999..6874f94e7f6f92a1600fdfc99dfed97083bcc65e 100644 (file)
@@ -1196,7 +1196,7 @@ C_COMMON_OBJS = c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o \
   c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o \
   c-family/c-semantics.o c-family/c-ada-spec.o \
   c-family/c-ubsan.o c-family/known-headers.o \
-  c-family/c-attribs.o c-family/c-warn.o
+  c-family/c-attribs.o c-family/c-warn.o c-family/c-spellcheck.o
 
 # Language-independent object files.
 # We put the *-match.o and insn-*.o files first so that a parallel make
index 8b619adaada3971cf1120e455078f9638d0803eb..ee590ed10a59cbb4300b5f1b431ba6fdc885afa4 100644 (file)
@@ -1,3 +1,10 @@
+2017-12-06  David Malcolm  <dmalcolm@redhat.com>
+
+       * c-spellcheck.cc: New file, taken from macro-handling code in
+       spellcheck-tree.c.
+       * c-spellcheck.h: New file, taken from macro-handling code in
+       spellcheck-tree.h.
+
 2017-12-01  Jakub Jelinek  <jakub@redhat.com>
 
        * c-attribs.c (c_common_attribute_table): Remove "cilk simd function"
diff --git a/gcc/c-family/c-spellcheck.cc b/gcc/c-family/c-spellcheck.cc
new file mode 100644 (file)
index 0000000..db70a64
--- /dev/null
@@ -0,0 +1,57 @@
+/* Find near-matches for macros.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC 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.
+
+GCC 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 GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tree.h"
+#include "cpplib.h"
+#include "spellcheck-tree.h"
+#include "c-family/c-spellcheck.h"
+
+/* A callback for cpp_forall_identifiers, for use by best_macro_match's ctor.
+   Process HASHNODE and update the best_macro_match instance pointed to be
+   USER_DATA.  */
+
+static int
+find_closest_macro_cpp_cb (cpp_reader *, cpp_hashnode *hashnode,
+                          void *user_data)
+{
+  if (hashnode->type != NT_MACRO)
+    return 1;
+
+  best_macro_match *bmm = (best_macro_match *)user_data;
+  bmm->consider (hashnode);
+
+  /* Keep iterating.  */
+  return 1;
+}
+
+/* Constructor for best_macro_match.
+   Use find_closest_macro_cpp_cb to find the closest matching macro to
+   NAME within distance < best_distance_so_far. */
+
+best_macro_match::best_macro_match (tree goal,
+                                   edit_distance_t best_distance_so_far,
+                                   cpp_reader *reader)
+: best_match <goal_t, candidate_t> (goal, best_distance_so_far)
+{
+  cpp_forall_identifiers (reader, find_closest_macro_cpp_cb, this);
+}
diff --git a/gcc/c-family/c-spellcheck.h b/gcc/c-family/c-spellcheck.h
new file mode 100644 (file)
index 0000000..adc539a
--- /dev/null
@@ -0,0 +1,51 @@
+/* Find near-matches for macros.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC 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.
+
+GCC 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 GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef C_SPELLCHECK_H
+#define C_SPELLCHECK_H
+
+#include "spellcheck.h"
+
+/* Specialization of edit_distance_traits for preprocessor macros.  */
+
+template <>
+struct edit_distance_traits<cpp_hashnode *>
+{
+  static size_t get_length (cpp_hashnode *hashnode)
+  {
+    return hashnode->ident.len;
+  }
+
+  static const char *get_string (cpp_hashnode *hashnode)
+  {
+    return (const char *)hashnode->ident.str;
+  }
+};
+
+/* Specialization of best_match<> for finding the closest preprocessor
+   macro to a given identifier.  */
+
+class best_macro_match : public best_match<tree, cpp_hashnode *>
+{
+ public:
+  best_macro_match (tree goal, edit_distance_t best_distance_so_far,
+                   cpp_reader *reader);
+};
+
+#endif  /* C_SPELLCHECK_H  */
index 8fea42622b233e40b497e197178acb4d1c2cd45c..b89939e24ad3cce720f67b1fabb01ae4978fccb7 100644 (file)
@@ -1,3 +1,7 @@
+2017-12-06  David Malcolm  <dmalcolm@redhat.com>
+
+       * c-decl.c: Include "c-family/c-spellcheck.h".
+
 2017-12-05  Martin Liska  <mliska@suse.cz>
            Jakub Jelinek  <jakub@redhat.com>
 
index 56c63d80ec4b0407872d493e6704a48bcd4c051e..d7dad1a29a5a2ddde6778c0c34990c6dda7ac7cb 100644 (file)
@@ -56,6 +56,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "asan.h"
 #include "c-family/name-hint.h"
 #include "c-family/known-headers.h"
+#include "c-family/c-spellcheck.h"
 
 /* In grokdeclarator, distinguish syntactic contexts of declarators.  */
 enum decl_context
index 122045b3535802376825522670a618ace2a8dd48..4cd3917d8844173e976d9465df204df15f2ddf44 100644 (file)
@@ -1,3 +1,7 @@
+2017-12-06  David Malcolm  <dmalcolm@redhat.com>
+
+       * name-lookup.c: Include "c-family/c-spellcheck.h".
+
 2017-12-05  Jason Merrill  <jason@redhat.com>
 
        PR c++/82331 - ICE with variadic partial specialization of auto
index 62ea564cedd58458b7737388e64be4e8ffa0e1a5..482ddccfaa56818d9ddc3cee3051f20d2e896851 100644 (file)
@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "parser.h"
 #include "c-family/name-hint.h"
 #include "c-family/known-headers.h"
+#include "c-family/c-spellcheck.h"
 
 static cxx_binding *cxx_binding_make (tree value, tree type);
 static cp_binding_level *innermost_nonclass_level (void);
index b819980b62bbe51892670acadfdbedb554057069..99878d5d9e543052613a85008a2863bb5364ad54 100644 (file)
@@ -66,36 +66,6 @@ find_closest_identifier (tree target, const auto_vec<tree> *candidates)
   return bm.get_best_meaningful_candidate ();
 }
 
-/* A callback for cpp_forall_identifiers, for use by best_macro_match's ctor.
-   Process HASHNODE and update the best_macro_match instance pointed to be
-   USER_DATA.  */
-
-static int
-find_closest_macro_cpp_cb (cpp_reader *, cpp_hashnode *hashnode,
-                          void *user_data)
-{
-  if (hashnode->type != NT_MACRO)
-    return 1;
-
-  best_macro_match *bmm = (best_macro_match *)user_data;
-  bmm->consider (hashnode);
-
-  /* Keep iterating.  */
-  return 1;
-}
-
-/* Constructor for best_macro_match.
-   Use find_closest_macro_cpp_cb to find the closest matching macro to
-   NAME within distance < best_distance_so_far. */
-
-best_macro_match::best_macro_match (tree goal,
-                                   edit_distance_t best_distance_so_far,
-                                   cpp_reader *reader)
-: best_match <goal_t, candidate_t> (goal, best_distance_so_far)
-{
-  cpp_forall_identifiers (reader, find_closest_macro_cpp_cb, this);
-}
-
 #if CHECKING_P
 
 namespace selftest {
index eecfd1a199307adb85ab7ed049ab64e695d04139..84b76e00a00c7346e048353090603f18a16331bc 100644 (file)
@@ -48,30 +48,4 @@ struct edit_distance_traits<tree>
   }
 };
 
-/* Specialization of edit_distance_traits for preprocessor macros.  */
-
-template <>
-struct edit_distance_traits<cpp_hashnode *>
-{
-  static size_t get_length (cpp_hashnode *hashnode)
-  {
-    return hashnode->ident.len;
-  }
-
-  static const char *get_string (cpp_hashnode *hashnode)
-  {
-    return (const char *)hashnode->ident.str;
-  }
-};
-
-/* Specialization of best_match<> for finding the closest preprocessor
-   macro to a given identifier.  */
-
-class best_macro_match : public best_match<tree, cpp_hashnode *>
-{
- public:
-  best_macro_match (tree goal, edit_distance_t best_distance_so_far,
-                   cpp_reader *reader);
-};
-
 #endif  /* GCC_SPELLCHECK_TREE_H  */