1 |
|
2003-06-16 Gary V. Vaughan <gary@gnu.org> |
2 |
|
|
3 |
|
Begin work on lifting the curse of the global variables. To start |
4 |
|
with create a `struct m4' context container, and replace |
5 |
|
`m4__symtab' with `context->symtab' throughout. This means |
6 |
|
initialising a context container in main, and adjusting many |
7 |
|
functions between main and the module entry points so that the |
8 |
|
container gets passed through. It would have been nice to |
9 |
|
defer this until after 1.5, but it has a major effect on the |
10 |
|
user's module writing ABI, so it needs to be addressed now - at |
11 |
|
least in the areas that impact the ABI. An interrelatated change |
12 |
|
in the symtab API removes the dependency on a global symbol table, |
13 |
|
and instead focuses on a passed table (from the context |
14 |
|
container). |
15 |
|
|
16 |
|
* TODO: Reminders for finishing context functionality. |
17 |
|
* m4/Makefile.am (libm4_la_SOURCES): Add m4.c. |
18 |
|
* m4/m4.c: New file. Manage new struct m4 objects to eliminate |
19 |
|
global variables and eventually allow m4 to be reentrant. |
20 |
|
* m4/m4private.h (m4): Define the new structure here... |
21 |
|
(M4_SYMTAB, m4_get_symtab): ...so we can have fast accessors that |
22 |
|
don't carry the overhead of a function call. |
23 |
|
* m4/m4module.h: Prototype extern functions from m4/m4.c. |
24 |
|
(m4): Declare type for new struct m4 objects. |
25 |
|
(M4SYMTAB): User macro to ease finding the symbol table for the |
26 |
|
current context for module developers. |
27 |
|
(m4_symbol_token): Renamed to m4_symbol_set_token which contains a |
28 |
|
verb. |
29 |
|
(M4_BUILTIN, m4_builtin_func, M4_BUILTIN_HANDLER) |
30 |
|
(m4_builtin_define, m4_builtin_pushdef, m4_builtin_table_install) |
31 |
|
(m4_call_macro, m4_dump_symbols, m4_expand_input) |
32 |
|
(M4_FINISH_HANDLER, M4_INIT_HANDLE, m4_macro_define) |
33 |
|
(m4_macro_pushdef, m4_macro_table_install, m4_module_load) |
34 |
|
(m4_module_unload, m4_process_macro, m4_symbol_set_token): Add an |
35 |
|
m4* context parameter. Changed definitions and all callers. |
36 |
|
(m4_symtab): Alias for m4_hash to decouple the |
37 |
|
m4_symtab api from m4_hash. |
38 |
|
(m4_symtab_apply, m4_symtab_apply_func): Use m4_symtab instead of |
39 |
|
m4_hash. |
40 |
|
(m4_symtab_create): New function to return an initialised |
41 |
|
m4_symtab. |
42 |
|
(m4_symtab_delete): New function to delete an m4_symtab's memory. |
43 |
|
(m4_symbol_define, m4_symbol_delete, m4_symbol_lookup) |
44 |
|
(m4_symbol_popdef, m4_symbol_pushdef): Add an m4_symtab parameter |
45 |
|
instead of simply using the global m4__symtab. Changed |
46 |
|
definitions and all callers. |
47 |
|
* m4/m4private.h (m4__symtab_remove_module_references): Ditto. |
48 |
|
* m4/symtab.c (m4__symtab_init, m4__symtab_exit): Removed. |
49 |
|
* src/main.c (main): Create a context and use that instead of the |
50 |
|
former global m4__symtab. |
51 |
|
|
52 |
2003-06-13 Gary V. Vaughan <gary@gnu.org> |
2003-06-13 Gary V. Vaughan <gary@gnu.org> |
53 |
|
|
54 |
* m4/hash.c (m4_hash_apply): Pass an initial hash table parameter |
* m4/hash.c (m4_hash_apply): Pass an initial hash table parameter |