/[m4]/m4/m4/utility.c
ViewVC logotype

Diff of /m4/m4/utility.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.32 by gary, Thu Jul 24 11:37:44 2003 UTC revision 1.33 by gary, Thu Jul 24 14:21:02 2003 UTC
# Line 145  m4_expand_ranges (const char *s, m4_obst Line 145  m4_expand_ranges (const char *s, m4_obst
145    obstack_1grow (obs, '\0');    obstack_1grow (obs, '\0');
146    return obstack_finish (obs);    return obstack_finish (obs);
147  }  }
   
 /* qsort comparison routine, for sorting the table made in m4_dumpdef ().  */  
 static int  
 dumpdef_cmp (const void *s1, const void *s2)  
 {  
   return strcmp (*(const char **) s1, *(const char **) s2);  
 }  
   
 /* The function dump_symbol () is for use by "dumpdef".  It builds up a  
    table of all defined symbol names.  */  
 void *  
 m4_dump_symbol_CB (m4_symbol_table *ignored, const char *name, m4_symbol *symbol,  
                    void *userdata)  
 {  
   assert (name);  
   assert (symbol);  
   assert (symbol->value);  
   
   if (symbol->value->type != M4_SYMBOL_VOID)  
     {  
       struct m4_dump_symbol_data *symbol_data  
         = (struct m4_dump_symbol_data *) userdata;  
   
       obstack_blank (symbol_data->obs, sizeof (const char *));  
       symbol_data->base = (const char **) obstack_base (symbol_data->obs);  
       symbol_data->base[symbol_data->size++] = (const char *) name;  
     }  
   
   return NULL;  
 }  
   
 /* If there are no arguments, build a sorted list of all defined  
    symbols, otherwise, only the specified symbols.  */  
 void  
 m4_dump_symbols (m4 *context, struct m4_dump_symbol_data *data, int argc,  
                  m4_symbol_value **argv, boolean complain)  
 {  
   data->base = (const char **) obstack_base (data->obs);  
   data->size = 0;  
   
   if (argc == 1)  
     {  
       m4_symtab_apply (M4SYMTAB, m4_dump_symbol_CB, data);  
     }  
   else  
     {  
       int i;  
       m4_symbol *symbol;  
   
       for (i = 1; i < argc; i++)  
         {  
           symbol = m4_symbol_lookup (M4SYMTAB, M4ARG (i));  
           if (symbol != NULL && symbol->value->type != M4_SYMBOL_VOID)  
             m4_dump_symbol_CB (NULL, M4ARG (i), symbol, data);  
           else if (complain)  
             M4WARN ((m4_get_warning_status_opt (context), 0,  
                      _("Warning: %s: undefined name: %s"),  
                      M4ARG (0), M4ARG (i)));  
         }  
     }  
   
   obstack_finish (data->obs);  
   qsort ((void *) data->base, data->size, sizeof (const char *), dumpdef_cmp);  
 }  

Legend:
Removed from v.1.32  
changed lines
  Added in v.1.33

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26