2003-06-08 Andrew Cagney <cagney@redhat.com>
[external/binutils.git] / gdb / macrotab.c
1 /* C preprocessor macro tables for GDB.
2    Copyright 2002 Free Software Foundation, Inc.
3    Contributed by Red Hat, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 #include "defs.h"
23 #include "gdb_obstack.h"
24 #include "splay-tree.h"
25 #include "symtab.h"
26 #include "symfile.h"
27 #include "objfiles.h"
28 #include "macrotab.h"
29 #include "gdb_assert.h"
30 #include "bcache.h"
31 #include "complaints.h"
32
33 \f
34 /* The macro table structure.  */
35
36 struct macro_table
37 {
38   /* The obstack this table's data should be allocated in, or zero if
39      we should use xmalloc.  */
40   struct obstack *obstack;
41
42   /* The bcache we should use to hold macro names, argument names, and
43      definitions, or zero if we should use xmalloc.  */
44   struct bcache *bcache;
45
46   /* The main source file for this compilation unit --- the one whose
47      name was given to the compiler.  This is the root of the
48      #inclusion tree; everything else is #included from here.  */
49   struct macro_source_file *main_source;
50
51   /* The table of macro definitions.  This is a splay tree (an ordered
52      binary tree that stays balanced, effectively), sorted by macro
53      name.  Where a macro gets defined more than once (presumably with
54      an #undefinition in between), we sort the definitions by the
55      order they would appear in the preprocessor's output.  That is,
56      if `a.c' #includes `m.h' and then #includes `n.h', and both
57      header files #define X (with an #undef somewhere in between),
58      then the definition from `m.h' appears in our splay tree before
59      the one from `n.h'.
60
61      The splay tree's keys are `struct macro_key' pointers;
62      the values are `struct macro_definition' pointers.
63
64      The splay tree, its nodes, and the keys and values are allocated
65      in obstack, if it's non-zero, or with xmalloc otherwise.  The
66      macro names, argument names, argument name arrays, and definition
67      strings are all allocated in bcache, if non-zero, or with xmalloc
68      otherwise.  */
69   splay_tree definitions;
70 };
71
72
73 \f
74 /* Allocation and freeing functions.  */
75
76 /* Allocate SIZE bytes of memory appropriately for the macro table T.
77    This just checks whether T has an obstack, or whether its pieces
78    should be allocated with xmalloc.  */
79 static void *
80 macro_alloc (int size, struct macro_table *t)
81 {
82   if (t->obstack)
83     return obstack_alloc (t->obstack, size);
84   else
85     return xmalloc (size);
86 }
87
88
89 static void
90 macro_free (void *object, struct macro_table *t)
91 {
92   gdb_assert (! t->obstack);
93   xfree (object);
94 }
95
96
97 /* If the macro table T has a bcache, then cache the LEN bytes at ADDR
98    there, and return the cached copy.  Otherwise, just xmalloc a copy
99    of the bytes, and return a pointer to that.  */
100 static const void *
101 macro_bcache (struct macro_table *t, const void *addr, int len)
102 {
103   if (t->bcache)
104     return bcache (addr, len, t->bcache);
105   else
106     {
107       void *copy = xmalloc (len);
108       memcpy (copy, addr, len);
109       return copy;
110     }
111 }
112
113
114 /* If the macro table T has a bcache, cache the null-terminated string
115    S there, and return a pointer to the cached copy.  Otherwise,
116    xmalloc a copy and return that.  */
117 static const char *
118 macro_bcache_str (struct macro_table *t, const char *s)
119 {
120   return (char *) macro_bcache (t, s, strlen (s) + 1);
121 }
122
123
124 /* Free a possibly bcached object OBJ.  That is, if the macro table T
125    has a bcache, it's an error; otherwise, xfree OBJ.  */
126 static void
127 macro_bcache_free (struct macro_table *t, void *obj)
128 {
129   gdb_assert (! t->bcache);
130   xfree (obj);
131 }
132
133
134 \f
135 /* Macro tree keys, w/their comparison, allocation, and freeing functions.  */
136
137 /* A key in the splay tree.  */
138 struct macro_key
139 {
140   /* The table we're in.  We only need this in order to free it, since
141      the splay tree library's key and value freeing functions require
142      that the key or value contain all the information needed to free
143      themselves.  */
144   struct macro_table *table;
145
146   /* The name of the macro.  This is in the table's bcache, if it has
147      one. */
148   const char *name;
149
150   /* The source file and line number where the definition's scope
151      begins.  This is also the line of the definition itself.  */
152   struct macro_source_file *start_file;
153   int start_line;
154
155   /* The first source file and line after the definition's scope.
156      (That is, the scope does not include this endpoint.)  If end_file
157      is zero, then the definition extends to the end of the
158      compilation unit.  */
159   struct macro_source_file *end_file;
160   int end_line;
161 };
162
163
164 /* Return the #inclusion depth of the source file FILE.  This is the
165    number of #inclusions it took to reach this file.  For the main
166    source file, the #inclusion depth is zero; for a file it #includes
167    directly, the depth would be one; and so on.  */
168 static int
169 inclusion_depth (struct macro_source_file *file)
170 {
171   int depth;
172
173   for (depth = 0; file->included_by; depth++)
174     file = file->included_by;
175
176   return depth;
177 }
178
179
180 /* Compare two source locations (from the same compilation unit).
181    This is part of the comparison function for the tree of
182    definitions.
183
184    LINE1 and LINE2 are line numbers in the source files FILE1 and
185    FILE2.  Return a value:
186    - less than zero if {LINE,FILE}1 comes before {LINE,FILE}2,
187    - greater than zero if {LINE,FILE}1 comes after {LINE,FILE}2, or
188    - zero if they are equal.
189
190    When the two locations are in different source files --- perhaps
191    one is in a header, while another is in the main source file --- we
192    order them by where they would appear in the fully pre-processed
193    sources, where all the #included files have been substituted into
194    their places.  */
195 static int
196 compare_locations (struct macro_source_file *file1, int line1, 
197                    struct macro_source_file *file2, int line2)
198 {
199   /* We want to treat positions in an #included file as coming *after*
200      the line containing the #include, but *before* the line after the
201      include.  As we walk up the #inclusion tree toward the main
202      source file, we update fileX and lineX as we go; includedX
203      indicates whether the original position was from the #included
204      file.  */
205   int included1 = 0;
206   int included2 = 0;
207
208   /* If a file is zero, that means "end of compilation unit."  Handle
209      that specially.  */
210   if (! file1)
211     {
212       if (! file2)
213         return 0;
214       else
215         return 1;
216     }
217   else if (! file2)
218     return -1;
219
220   /* If the two files are not the same, find their common ancestor in
221      the #inclusion tree.  */
222   if (file1 != file2)
223     {
224       /* If one file is deeper than the other, walk up the #inclusion
225          chain until the two files are at least at the same *depth*.
226          Then, walk up both files in synchrony until they're the same
227          file.  That file is the common ancestor.  */
228       int depth1 = inclusion_depth (file1);
229       int depth2 = inclusion_depth (file2);
230
231       /* Only one of these while loops will ever execute in any given
232          case.  */
233       while (depth1 > depth2)
234         {
235           line1 = file1->included_at_line;
236           file1 = file1->included_by;
237           included1 = 1;
238           depth1--;
239         }
240       while (depth2 > depth1)
241         {
242           line2 = file2->included_at_line;
243           file2 = file2->included_by;
244           included2 = 1;
245           depth2--;
246         }
247
248       /* Now both file1 and file2 are at the same depth.  Walk toward
249          the root of the tree until we find where the branches meet.  */
250       while (file1 != file2)
251         {
252           line1 = file1->included_at_line;
253           file1 = file1->included_by;
254           /* At this point, we know that the case the includedX flags
255              are trying to deal with won't come up, but we'll just
256              maintain them anyway.  */
257           included1 = 1;
258
259           line2 = file2->included_at_line;
260           file2 = file2->included_by;
261           included2 = 1;
262
263           /* Sanity check.  If file1 and file2 are really from the
264              same compilation unit, then they should both be part of
265              the same tree, and this shouldn't happen.  */
266           gdb_assert (file1 && file2);
267         }
268     }
269
270   /* Now we've got two line numbers in the same file.  */
271   if (line1 == line2)
272     {
273       /* They can't both be from #included files.  Then we shouldn't
274          have walked up this far.  */
275       gdb_assert (! included1 || ! included2);
276
277       /* Any #included position comes after a non-#included position
278          with the same line number in the #including file.  */
279       if (included1)
280         return 1;
281       else if (included2)
282         return -1;
283       else
284         return 0;
285     }
286   else
287     return line1 - line2;
288 }
289
290
291 /* Compare a macro key KEY against NAME, the source file FILE, and
292    line number LINE.
293
294    Sort definitions by name; for two definitions with the same name,
295    place the one whose definition comes earlier before the one whose
296    definition comes later.
297
298    Return -1, 0, or 1 if key comes before, is identical to, or comes
299    after NAME, FILE, and LINE.  */
300 static int
301 key_compare (struct macro_key *key,
302              const char *name, struct macro_source_file *file, int line)
303 {
304   int names = strcmp (key->name, name);
305   if (names)
306     return names;
307
308   return compare_locations (key->start_file, key->start_line,
309                             file, line);
310 }
311
312
313 /* The macro tree comparison function, typed for the splay tree
314    library's happiness.  */
315 static int
316 macro_tree_compare (splay_tree_key untyped_key1,
317                     splay_tree_key untyped_key2)
318 {
319   struct macro_key *key1 = (struct macro_key *) untyped_key1;
320   struct macro_key *key2 = (struct macro_key *) untyped_key2;
321
322   return key_compare (key1, key2->name, key2->start_file, key2->start_line);
323 }
324
325
326 /* Construct a new macro key node for a macro in table T whose name is
327    NAME, and whose scope starts at LINE in FILE; register the name in
328    the bcache.  */
329 static struct macro_key *
330 new_macro_key (struct macro_table *t,
331                const char *name,
332                struct macro_source_file *file,
333                int line)
334 {
335   struct macro_key *k = macro_alloc (sizeof (*k), t);
336
337   memset (k, 0, sizeof (*k));
338   k->table = t;
339   k->name = macro_bcache_str (t, name);
340   k->start_file = file;
341   k->start_line = line;
342   k->end_file = 0;
343
344   return k;
345 }
346
347
348 static void
349 macro_tree_delete_key (void *untyped_key)
350 {
351   struct macro_key *key = (struct macro_key *) untyped_key;
352
353   macro_bcache_free (key->table, (char *) key->name);
354   macro_free (key, key->table);
355 }
356
357
358 \f
359 /* Building and querying the tree of #included files.  */
360
361
362 /* Allocate and initialize a new source file structure.  */
363 static struct macro_source_file *
364 new_source_file (struct macro_table *t,
365                  const char *filename)
366 {
367   /* Get space for the source file structure itself.  */
368   struct macro_source_file *f = macro_alloc (sizeof (*f), t);
369
370   memset (f, 0, sizeof (*f));
371   f->table = t;
372   f->filename = macro_bcache_str (t, filename);
373   f->includes = 0;
374
375   return f;
376 }
377
378
379 /* Free a source file, and all the source files it #included.  */
380 static void
381 free_macro_source_file (struct macro_source_file *src)
382 {
383   struct macro_source_file *child, *next_child;
384
385   /* Free this file's children.  */
386   for (child = src->includes; child; child = next_child)
387     {
388       next_child = child->next_included;
389       free_macro_source_file (child);
390     }
391
392   macro_bcache_free (src->table, (char *) src->filename);
393   macro_free (src, src->table);
394 }
395
396
397 struct macro_source_file *
398 macro_set_main (struct macro_table *t,
399                 const char *filename)
400 {
401   /* You can't change a table's main source file.  What would that do
402      to the tree?  */
403   gdb_assert (! t->main_source);
404
405   t->main_source = new_source_file (t, filename);
406
407   return t->main_source;
408 }
409
410
411 struct macro_source_file *
412 macro_main (struct macro_table *t)
413 {
414   gdb_assert (t->main_source);
415
416   return t->main_source;
417 }
418
419
420 struct macro_source_file *
421 macro_include (struct macro_source_file *source,
422                int line,
423                const char *included)
424 {
425   struct macro_source_file *new;
426   struct macro_source_file **link;
427
428   /* Find the right position in SOURCE's `includes' list for the new
429      file.  Scan until we find the first file we shouldn't follow ---
430      which is therefore the file we should directly precede --- or
431      reach the end of the list.  */
432   for (link = &source->includes;
433        *link && line < (*link)->included_at_line;
434        link = &(*link)->next_included)
435     ;
436
437   /* Did we find another file already #included at the same line as
438      the new one?  */
439   if (*link && line == (*link)->included_at_line)
440     {
441       /* This means the compiler is emitting bogus debug info.  (GCC
442          circa March 2002 did this.)  It also means that the splay
443          tree ordering function, macro_tree_compare, will abort,
444          because it can't tell which #inclusion came first.  But GDB
445          should tolerate bad debug info.  So:
446
447          First, squawk.  */
448       complaint (&symfile_complaints,
449                  "both `%s' and `%s' allegedly #included at %s:%d", included,
450                  (*link)->filename, source->filename, line);
451
452       /* Now, choose a new, unoccupied line number for this
453          #inclusion, after the alleged #inclusion line.  */
454       while (*link && line == (*link)->included_at_line)
455         {
456           /* This line number is taken, so try the next line.  */
457           line++;
458           link = &(*link)->next_included;
459         }
460     }
461
462   /* At this point, we know that LINE is an unused line number, and
463      *LINK points to the entry an #inclusion at that line should
464      precede.  */
465   new = new_source_file (source->table, included);
466   new->included_by = source;
467   new->included_at_line = line;
468   new->next_included = *link;
469   *link = new;
470
471   return new;
472 }
473
474
475 struct macro_source_file *
476 macro_lookup_inclusion (struct macro_source_file *source, const char *name)
477 {
478   /* Is SOURCE itself named NAME?  */
479   if (strcmp (name, source->filename) == 0)
480     return source;
481
482   /* The filename in the source structure is probably a full path, but
483      NAME could be just the final component of the name.  */
484   {
485     int name_len = strlen (name);
486     int src_name_len = strlen (source->filename);
487
488     /* We do mean < here, and not <=; if the lengths are the same,
489        then the strcmp above should have triggered, and we need to
490        check for a slash here.  */
491     if (name_len < src_name_len
492         && source->filename[src_name_len - name_len - 1] == '/'
493         && strcmp (name, source->filename + src_name_len - name_len) == 0)
494       return source;
495   }
496
497   /* It's not us.  Try all our children, and return the lowest.  */
498   {
499     struct macro_source_file *child;
500     struct macro_source_file *best = NULL;
501     int best_depth = 0;
502
503     for (child = source->includes; child; child = child->next_included)
504       {
505         struct macro_source_file *result
506           = macro_lookup_inclusion (child, name);
507
508         if (result)
509           {
510             int result_depth = inclusion_depth (result);
511
512             if (! best || result_depth < best_depth)
513               {
514                 best = result;
515                 best_depth = result_depth;
516               }
517           }
518       }
519
520     return best;
521   }
522 }
523
524
525 \f
526 /* Registering and looking up macro definitions.  */
527
528
529 /* Construct a definition for a macro in table T.  Cache all strings,
530    and the macro_definition structure itself, in T's bcache.  */
531 static struct macro_definition *
532 new_macro_definition (struct macro_table *t,
533                       enum macro_kind kind,
534                       int argc, const char **argv,
535                       const char *replacement)
536 {
537   struct macro_definition *d = macro_alloc (sizeof (*d), t);
538
539   memset (d, 0, sizeof (*d));
540   d->table = t;
541   d->kind = kind;
542   d->replacement = macro_bcache_str (t, replacement);
543
544   if (kind == macro_function_like)
545     {
546       int i;
547       const char **cached_argv;
548       int cached_argv_size = argc * sizeof (*cached_argv);
549
550       /* Bcache all the arguments.  */
551       cached_argv = alloca (cached_argv_size);
552       for (i = 0; i < argc; i++)
553         cached_argv[i] = macro_bcache_str (t, argv[i]);
554
555       /* Now bcache the array of argument pointers itself.  */
556       d->argv = macro_bcache (t, cached_argv, cached_argv_size);
557       d->argc = argc;
558     }
559
560   /* We don't bcache the entire definition structure because it's got
561      a pointer to the macro table in it; since each compilation unit
562      has its own macro table, you'd only get bcache hits for identical
563      definitions within a compilation unit, which seems unlikely.
564
565      "So, why do macro definitions have pointers to their macro tables
566      at all?"  Well, when the splay tree library wants to free a
567      node's value, it calls the value freeing function with nothing
568      but the value itself.  It makes the (apparently reasonable)
569      assumption that the value carries enough information to free
570      itself.  But not all macro tables have bcaches, so not all macro
571      definitions would be bcached.  There's no way to tell whether a
572      given definition is bcached without knowing which table the
573      definition belongs to.  ...  blah.  The thing's only sixteen
574      bytes anyway, and we can still bcache the name, args, and
575      definition, so we just don't bother bcaching the definition
576      structure itself.  */
577   return d;
578 }
579
580
581 /* Free a macro definition.  */
582 static void
583 macro_tree_delete_value (void *untyped_definition)
584 {
585   struct macro_definition *d = (struct macro_definition *) untyped_definition;
586   struct macro_table *t = d->table;
587
588   if (d->kind == macro_function_like)
589     {
590       int i;
591
592       for (i = 0; i < d->argc; i++)
593         macro_bcache_free (t, (char *) d->argv[i]);
594       macro_bcache_free (t, (char **) d->argv);
595     }
596   
597   macro_bcache_free (t, (char *) d->replacement);
598   macro_free (d, t);
599 }
600
601
602 /* Find the splay tree node for the definition of NAME at LINE in
603    SOURCE, or zero if there is none.  */
604 static splay_tree_node
605 find_definition (const char *name,
606                  struct macro_source_file *file,
607                  int line)
608 {
609   struct macro_table *t = file->table;
610   splay_tree_node n;
611
612   /* Construct a macro_key object, just for the query.  */
613   struct macro_key query;
614
615   query.name = name;
616   query.start_file = file;
617   query.start_line = line;
618   query.end_file = NULL;
619
620   n = splay_tree_lookup (t->definitions, (splay_tree_key) &query);
621   if (! n)
622     {
623       /* It's okay for us to do two queries like this: the real work
624          of the searching is done when we splay, and splaying the tree
625          a second time at the same key is a constant time operation.
626          If this still bugs you, you could always just extend the
627          splay tree library with a predecessor-or-equal operation, and
628          use that.  */
629       splay_tree_node pred = splay_tree_predecessor (t->definitions,
630                                                      (splay_tree_key) &query);
631      
632       if (pred)
633         {
634           /* Make sure this predecessor actually has the right name.
635              We just want to search within a given name's definitions.  */
636           struct macro_key *found = (struct macro_key *) pred->key;
637
638           if (strcmp (found->name, name) == 0)
639             n = pred;
640         }
641     }
642
643   if (n)
644     {
645       struct macro_key *found = (struct macro_key *) n->key;
646
647       /* Okay, so this definition has the right name, and its scope
648          begins before the given source location.  But does its scope
649          end after the given source location?  */
650       if (compare_locations (file, line, found->end_file, found->end_line) < 0)
651         return n;
652       else
653         return 0;
654     }
655   else
656     return 0;
657 }
658
659
660 /* If NAME already has a definition in scope at LINE in SOURCE, return
661    the key.  If the old definition is different from the definition
662    given by KIND, ARGC, ARGV, and REPLACEMENT, complain, too.
663    Otherwise, return zero.  (ARGC and ARGV are meaningless unless KIND
664    is `macro_function_like'.)  */
665 static struct macro_key *
666 check_for_redefinition (struct macro_source_file *source, int line,
667                         const char *name, enum macro_kind kind,
668                         int argc, const char **argv,
669                         const char *replacement)
670 {
671   splay_tree_node n = find_definition (name, source, line);
672
673   if (n)
674     {
675       struct macro_key *found_key = (struct macro_key *) n->key;
676       struct macro_definition *found_def
677         = (struct macro_definition *) n->value;
678       int same = 1;
679
680       /* Is this definition the same as the existing one?
681          According to the standard, this comparison needs to be done
682          on lists of tokens, not byte-by-byte, as we do here.  But
683          that's too hard for us at the moment, and comparing
684          byte-by-byte will only yield false negatives (i.e., extra
685          warning messages), not false positives (i.e., unnoticed
686          definition changes).  */
687       if (kind != found_def->kind)
688         same = 0;
689       else if (strcmp (replacement, found_def->replacement))
690         same = 0;
691       else if (kind == macro_function_like)
692         {
693           if (argc != found_def->argc)
694             same = 0;
695           else
696             {
697               int i;
698
699               for (i = 0; i < argc; i++)
700                 if (strcmp (argv[i], found_def->argv[i]))
701                   same = 0;
702             }
703         }
704
705       if (! same)
706         {
707           complaint (&symfile_complaints,
708                      "macro `%s' redefined at %s:%d; original definition at %s:%d",
709                      name, source->filename, line,
710                      found_key->start_file->filename, found_key->start_line);
711         }
712
713       return found_key;
714     }
715   else
716     return 0;
717 }
718
719
720 void
721 macro_define_object (struct macro_source_file *source, int line,
722                      const char *name, const char *replacement)
723 {
724   struct macro_table *t = source->table;
725   struct macro_key *k;
726   struct macro_definition *d;
727
728   k = check_for_redefinition (source, line, 
729                               name, macro_object_like,
730                               0, 0,
731                               replacement);
732
733   /* If we're redefining a symbol, and the existing key would be
734      identical to our new key, then the splay_tree_insert function
735      will try to delete the old definition.  When the definition is
736      living on an obstack, this isn't a happy thing.
737
738      Since this only happens in the presence of questionable debug
739      info, we just ignore all definitions after the first.  The only
740      case I know of where this arises is in GCC's output for
741      predefined macros, and all the definitions are the same in that
742      case.  */
743   if (k && ! key_compare (k, name, source, line))
744     return;
745
746   k = new_macro_key (t, name, source, line);
747   d = new_macro_definition (t, macro_object_like, 0, 0, replacement);
748   splay_tree_insert (t->definitions, (splay_tree_key) k, (splay_tree_value) d);
749 }
750
751
752 void
753 macro_define_function (struct macro_source_file *source, int line,
754                        const char *name, int argc, const char **argv,
755                        const char *replacement)
756 {
757   struct macro_table *t = source->table;
758   struct macro_key *k;
759   struct macro_definition *d;
760
761   k = check_for_redefinition (source, line,
762                               name, macro_function_like,
763                               argc, argv,
764                               replacement);
765
766   /* See comments about duplicate keys in macro_define_object.  */
767   if (k && ! key_compare (k, name, source, line))
768     return;
769
770   /* We should also check here that all the argument names in ARGV are
771      distinct.  */
772
773   k = new_macro_key (t, name, source, line);
774   d = new_macro_definition (t, macro_function_like, argc, argv, replacement);
775   splay_tree_insert (t->definitions, (splay_tree_key) k, (splay_tree_value) d);
776 }
777
778
779 void
780 macro_undef (struct macro_source_file *source, int line,
781              const char *name)
782 {
783   splay_tree_node n = find_definition (name, source, line);
784
785   if (n)
786     {
787       /* This function is the only place a macro's end-of-scope
788          location gets set to anything other than "end of the
789          compilation unit" (i.e., end_file is zero).  So if this macro
790          already has its end-of-scope set, then we're probably seeing
791          a second #undefinition for the same #definition.  */
792       struct macro_key *key = (struct macro_key *) n->key;
793
794       if (key->end_file)
795         {
796           complaint (&symfile_complaints,
797                      "macro '%s' is #undefined twice, at %s:%d and %s:%d", name,
798                      source->filename, line, key->end_file->filename,
799                      key->end_line);
800         }
801
802       /* Whatever the case, wipe out the old ending point, and 
803          make this the ending point.  */
804       key->end_file = source;
805       key->end_line = line;
806     }
807   else
808     {
809       /* According to the ISO C standard, an #undef for a symbol that
810          has no macro definition in scope is ignored.  So we should
811          ignore it too.  */
812 #if 0
813       complaint (&symfile_complaints,
814                  "no definition for macro `%s' in scope to #undef at %s:%d",
815                  name, source->filename, line);
816 #endif
817     }
818 }
819
820
821 struct macro_definition *
822 macro_lookup_definition (struct macro_source_file *source,
823                          int line, const char *name)
824 {
825   splay_tree_node n = find_definition (name, source, line);
826
827   if (n)
828     return (struct macro_definition *) n->value;
829   else
830     return 0;
831 }
832
833
834 struct macro_source_file *
835 macro_definition_location (struct macro_source_file *source,
836                            int line,
837                            const char *name,
838                            int *definition_line)
839 {
840   splay_tree_node n = find_definition (name, source, line);
841
842   if (n)
843     {
844       struct macro_key *key = (struct macro_key *) n->key;
845       *definition_line = key->start_line;
846       return key->start_file;
847     }
848   else
849     return 0;
850 }
851
852
853 \f
854 /* Creating and freeing macro tables.  */
855
856
857 struct macro_table *
858 new_macro_table (struct obstack *obstack,
859                  struct bcache *b)
860 {
861   struct macro_table *t;
862
863   /* First, get storage for the `struct macro_table' itself.  */
864   if (obstack)
865     t = obstack_alloc (obstack, sizeof (*t));
866   else
867     t = xmalloc (sizeof (*t));
868
869   memset (t, 0, sizeof (*t));
870   t->obstack = obstack;
871   t->bcache = b;
872   t->main_source = NULL;
873   t->definitions = (splay_tree_new_with_allocator
874                     (macro_tree_compare,
875                      ((splay_tree_delete_key_fn) macro_tree_delete_key),
876                      ((splay_tree_delete_value_fn) macro_tree_delete_value),
877                      ((splay_tree_allocate_fn) macro_alloc),
878                      ((splay_tree_deallocate_fn) macro_free),
879                      t));
880   
881   return t;
882 }
883
884
885 void
886 free_macro_table (struct macro_table *table)
887 {
888   /* Free the source file tree.  */
889   free_macro_source_file (table->main_source);
890
891   /* Free the table of macro definitions.  */
892   splay_tree_delete (table->definitions);
893 }