Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01762c4e authored by Michal Marek's avatar Michal Marek
Browse files

genksyms: simplify usage of find_symbol()



Allow searching for symbols of an exact type. The lexer does this and a
subsequent patch will add one more usage.

Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent 68eb8563
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -156,7 +156,7 @@ static enum symbol_type map_to_ns(enum symbol_type t)
	return t;
	return t;
}
}


struct symbol *find_symbol(const char *name, enum symbol_type ns)
struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact)
{
{
	unsigned long h = crc32(name) % HASH_BUCKETS;
	unsigned long h = crc32(name) % HASH_BUCKETS;
	struct symbol *sym;
	struct symbol *sym;
@@ -167,6 +167,8 @@ struct symbol *find_symbol(const char *name, enum symbol_type ns)
		    sym->is_declared)
		    sym->is_declared)
			break;
			break;


	if (exact && sym && sym->type != ns)
		return NULL;
	return sym;
	return sym;
}
}


@@ -511,7 +513,7 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc)
			break;
			break;


		case SYM_TYPEDEF:
		case SYM_TYPEDEF:
			subsym = find_symbol(cur->string, cur->tag);
			subsym = find_symbol(cur->string, cur->tag, 0);
			/* FIXME: Bad reference files can segfault here. */
			/* FIXME: Bad reference files can segfault here. */
			if (subsym->expansion_trail) {
			if (subsym->expansion_trail) {
				if (flag_dump_defs)
				if (flag_dump_defs)
@@ -528,7 +530,7 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc)
		case SYM_STRUCT:
		case SYM_STRUCT:
		case SYM_UNION:
		case SYM_UNION:
		case SYM_ENUM:
		case SYM_ENUM:
			subsym = find_symbol(cur->string, cur->tag);
			subsym = find_symbol(cur->string, cur->tag, 0);
			if (!subsym) {
			if (!subsym) {
				struct string_list *n;
				struct string_list *n;


@@ -582,7 +584,7 @@ void export_symbol(const char *name)
{
{
	struct symbol *sym;
	struct symbol *sym;


	sym = find_symbol(name, SYM_NORMAL);
	sym = find_symbol(name, SYM_NORMAL, 0);
	if (!sym)
	if (!sym)
		error_with_pos("export undefined symbol %s", name);
		error_with_pos("export undefined symbol %s", name);
	else {
	else {
+1 −1
Original line number Original line Diff line number Diff line
@@ -58,7 +58,7 @@ typedef struct string_list **yystype;
extern int cur_line;
extern int cur_line;
extern char *cur_filename;
extern char *cur_filename;


struct symbol *find_symbol(const char *name, enum symbol_type ns);
struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact);
struct symbol *add_symbol(const char *name, enum symbol_type type,
struct symbol *add_symbol(const char *name, enum symbol_type type,
			  struct string_list *defn, int is_extern);
			  struct string_list *defn, int is_extern);
void export_symbol(const char *);
void export_symbol(const char *);
+1 −2
Original line number Original line Diff line number Diff line
@@ -2347,8 +2347,7 @@ repeat:
	      }
	      }
	    if (!suppress_type_lookup)
	    if (!suppress_type_lookup)
	      {
	      {
		struct symbol *sym = find_symbol(yytext, SYM_TYPEDEF);
		if (find_symbol(yytext, SYM_TYPEDEF, 1))
		if (sym && sym->type == SYM_TYPEDEF)
		  token = TYPE;
		  token = TYPE;
	      }
	      }
	  }
	  }
+1 −2
Original line number Original line Diff line number Diff line
@@ -193,8 +193,7 @@ repeat:
	      }
	      }
	    if (!suppress_type_lookup)
	    if (!suppress_type_lookup)
	      {
	      {
		struct symbol *sym = find_symbol(yytext, SYM_TYPEDEF);
		if (find_symbol(yytext, SYM_TYPEDEF, 1))
		if (sym && sym->type == SYM_TYPEDEF)
		  token = TYPE;
		  token = TYPE;
	      }
	      }
	  }
	  }