]>
git.saurik.com Git - bison.git/blob - src/muscle_tab.h
   1 /* Muscle table manager for Bison, 
   2    Copyright (C) 2001, 2002 Free Software Foundation, Inc. 
   4    This file is part of Bison, the GNU Compiler Compiler. 
   6    Bison is free software; you can redistribute it and/or modify 
   7    it under the terms of the GNU General Public License as published by 
   8    the Free Software Foundation; either version 2, or (at your option) 
  11    Bison is distributed in the hope that it will be useful, 
  12    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  14    GNU General Public License for more details. 
  16    You should have received a copy of the GNU General Public License 
  17    along with Bison; see the file COPYING.  If not, write to 
  18    the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
  19    Boston, MA 02111-1307, USA.  */ 
  22 # define MUSCLE_TAB_H_ 
  24 typedef struct muscle_entry_s
 
  30 void muscle_init (void); 
  31 void muscle_insert (const char *key
, char *value
); 
  32 char *muscle_find (const char *key
); 
  33 void muscle_free (void); 
  36 /* An obstack dedicated to receive muscle keys and values.  */ 
  37 extern struct obstack muscle_obstack
; 
  39 #define MUSCLE_INSERT_INT(Key, Value)                           \ 
  41   obstack_fgrow1 (&muscle_obstack, "%d", Value);                \ 
  42   obstack_1grow (&muscle_obstack, 0);                           \ 
  43   muscle_insert (Key, obstack_finish (&muscle_obstack));        \ 
  46 #define MUSCLE_INSERT_LONG_INT(Key, Value)                      \ 
  48   obstack_fgrow1 (&muscle_obstack, "%ld", Value);               \ 
  49   obstack_1grow (&muscle_obstack, 0);                           \ 
  50   muscle_insert (Key, obstack_finish (&muscle_obstack));        \ 
  53 #define MUSCLE_INSERT_STRING(Key, Value)                        \ 
  55   obstack_sgrow (&muscle_obstack, Value);                       \ 
  56   obstack_1grow (&muscle_obstack, 0);                           \ 
  57   muscle_insert (Key, obstack_finish (&muscle_obstack));        \ 
  60 #define MUSCLE_GROW_STRING_PAIR(Key, Value1, Value2)            \ 
  62   obstack_sgrow (&muscle_obstack, Value1);                      \ 
  63   obstack_1grow (&muscle_obstack, 0);                           \ 
  64   muscle_insert (Key, obstack_finish (&muscle_obstack));        \ 
  67 /* Insert (KEY, VALUE).  If KEY already existed, overwrite the 
  68    previous value.  Uses MUSCLE_OBSTACK.  De-allocates the previously 
  69    associated value.  VALUE and SEPARATOR are copied.  */ 
  71 void muscle_grow (const char *key
, const char *value
, const char *separator
); 
  73 /* MUSCLE is an M4 list of pairs.  Create or extend it with the pair 
  74    (A1, A2).  Note that because the muscle values are output *double* 
  75    quoted, one needs to strip the first level of quotes to reach the 
  78 void muscle_pair_list_grow (const char *muscle
, 
  79                             const char *a1
, const char *a2
); 
  81 void muscles_m4_output (FILE *out
); 
  83 #endif /* not MUSCLE_TAB_H_ */