]>
git.saurik.com Git - bison.git/blob - src/muscle_tab.c
1 /* Macro 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. */
24 #include "muscle_tab.h"
27 /* Initial capacity of muscles hash table. */
28 #define HT_INITIAL_CAPACITY 257
30 struct hash_table
*muscle_table
= NULL
;
33 hash_compare_muscles (void const *x
, void const *y
)
35 const muscle_entry_t
*m1
= x
;
36 const muscle_entry_t
*m2
= y
;
37 return strcmp (m1
->key
, m2
->key
) ? FALSE
: TRUE
;
41 hash_muscle (const void *x
, unsigned int tablesize
)
43 const muscle_entry_t
*m
= x
;
44 return hash_string (m
->key
, tablesize
);
50 muscle_table
= hash_initialize (HT_INITIAL_CAPACITY
, NULL
, hash_muscle
,
51 hash_compare_muscles
, NULL
);
53 /* Version and input file. */
54 muscle_insert ("version", VERSION
);
55 muscle_insert ("filename", infile
);
58 muscle_insert ("stype", "int");
59 muscle_insert ("ltype", "yyltype");
61 /* Default #line formatting. */
62 muscle_insert ("linef", "#line %d %s\n");
64 /* Stack parameters. */
65 muscle_insert ("maxdepth", "10000");
66 muscle_insert ("initdepth", "200");
69 muscle_insert ("name", "Parser");
73 muscle_insert (const char *key
, const char *value
)
75 muscle_entry_t pair
= { key
, NULL
};
76 muscle_entry_t
*entry
= hash_lookup (muscle_table
, &pair
);
80 /* First insertion in the hash. */
81 entry
= XMALLOC (muscle_entry_t
, 1);
83 hash_insert (muscle_table
, entry
);
89 muscle_find (const char *key
)
91 muscle_entry_t pair
= { key
, NULL
};
92 muscle_entry_t
*result
= hash_lookup (muscle_table
, &pair
);
93 return result
? result
->value
: NULL
;
97 /* Output the definition of all the current muscles into a list of
101 muscle_m4_output (muscle_entry_t
*entry
, FILE *out
)
103 fprintf (out
, "m4_define([b4_%s],\n", entry
->key
);
104 fprintf (out
, " [[%s]])\n\n\n", entry
->value
);
108 /* Output the definition of all the current muscles into a list of
112 muscles_m4_output (FILE *out
)
114 hash_do_for_each (muscle_table
,
115 (Hash_processor
) muscle_m4_output
,