Commit 613bc14f by David Malcolm Committed by David Malcolm

Move macro-spellchecking code from "gcc" to new files in c-family

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
parent 06f97084
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
......@@ -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
......
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"
......
/* 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);
}
/* 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 */
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>
......
......@@ -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
......
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
......
......@@ -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);
......
......@@ -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 {
......
......@@ -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 */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment