/[m4]/m4/m4/m4private.h
ViewVC logotype

Diff of /m4/m4/m4private.h

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

revision 1.23 by gary, Wed Jun 18 16:21:54 2003 UTC revision 1.24 by gary, Thu Jun 19 14:51:04 2003 UTC
# Line 25  Line 25 
25  #endif  #endif
26    
27  #include <assert.h>  #include <assert.h>
 #include <m4module.h>  
28    
29    #include "m4module.h"
30    
31    typedef enum {
32      M4_SYMBOL_VOID,
33      M4_SYMBOL_TEXT,
34      M4_SYMBOL_FUNC
35    } m4__symbol_type;
36    
37    #define BIT_TEST(flags, bit)    (((flags) & (bit)) == (bit))
38    #define BIT_SET(flags, bit)     ((flags) |= (bit))
39    #define BIT_RESET(flags, bit)   ((flags) &= ~(bit))
40    
41    
42  /* --- CONTEXT MANAGEMENT --- */  /* --- CONTEXT MANAGEMENT --- */
# Line 35  struct m4 { Line 45  struct m4 {
45    m4_symtab *symtab;    m4_symtab *symtab;
46  };  };
47    
48  #define M4_SYMTAB(context) ((context)->symtab)  #ifdef NDEBUG
49    #  define m4_get_symtab(context)        ((context)->symtab)
50  #define m4_get_symtab(context)  ((context)->symtab)  #endif
   
51    
52    
53  /* --- MODULE MANAGEMENT --- */  /* --- MODULE MANAGEMENT --- */
# Line 58  extern void        m4__module_exit (m4 *con Line 67  extern void        m4__module_exit (m4 *con
67    
68  /* --- SYMBOL TABLE MANAGEMENT --- */  /* --- SYMBOL TABLE MANAGEMENT --- */
69    
70  extern void     m4__symtab_remove_module_references (m4_symtab*, lt_dlhandle);  struct m4_symbol
71    {
72      boolean               traced;
73  /* TRUE iff strlen(rquote) == strlen(lquote) == 1 */    m4_symbol_value *     value;
 extern boolean m4__single_quotes;  
   
 /* TRUE iff strlen(bcomm) == strlen(ecomm) == 1 */  
 extern boolean m4__single_comments;  
   
 /* TRUE iff some character has M4_SYNTAX_ESCAPE */  
 extern boolean m4__use_macro_escape;  
   
 struct m4_symbol_arg {  
   int           index;  
   int           flags;  
   char *        default_val;  
74  };  };
75    
 #define SYMBOL_ARG_INDEX(A)     ((A)->index)  
 #define SYMBOL_ARG_FLAGS(A)     ((A)->flags)  
 #define SYMBOL_ARG_DEFAULT(A)   ((A)->default_val)  
   
 /* m4_symbol_arg.flags bit masks:  */  
   
 #define SYMBOL_ARG_REST_BIT     (1 << 0)  
 #define SYMBOL_ARG_KEY_BIT      (1 << 1)  
   
76  struct m4_symbol_value {  struct m4_symbol_value {
77    m4_symbol_value *     next;    m4_symbol_value *     next;
78    lt_dlhandle           handle;    lt_dlhandle           handle;
# Line 93  struct m4_symbol_value { Line 81  struct m4_symbol_value {
81    m4_hash *             arg_signature;    m4_hash *             arg_signature;
82    int                   min_args, max_args;    int                   min_args, max_args;
83    
84    m4_symbol_type        type;    m4__symbol_type       type;
85    union {    union {
86      char *              text;      char *              text;
87      m4_builtin_func *   func;      m4_builtin_func *   func;
# Line 106  struct m4_symbol_value { Line 94  struct m4_symbol_value {
94  #define VALUE_ARG_SIGNATURE(T)  ((T)->arg_signature)  #define VALUE_ARG_SIGNATURE(T)  ((T)->arg_signature)
95  #define VALUE_MIN_ARGS(T)       ((T)->min_args)  #define VALUE_MIN_ARGS(T)       ((T)->min_args)
96  #define VALUE_MAX_ARGS(T)       ((T)->max_args)  #define VALUE_MAX_ARGS(T)       ((T)->max_args)
97  #define VALUE_TYPE(T)           ((T)->type)  
98  #define VALUE_TEXT(T)           ((T)->u.text)  #define SYMBOL_NEXT(S)          (VALUE_NEXT          ((S)->value))
99  #define VALUE_FUNC(T)           ((T)->u.func)  #define SYMBOL_HANDLE(S)        (VALUE_HANDLE        ((S)->value))
100    #define SYMBOL_FLAGS(S)         (VALUE_FLAGS         ((S)->value))
101    #define SYMBOL_ARG_SIGNATURE(S) (VALUE_ARG_SIGNATURE ((S)->value))
102    #define SYMBOL_MIN_ARGS(S)      (VALUE_MIN_ARGS      ((S)->value))
103    #define SYMBOL_MAX_ARGS(S)      (VALUE_MAX_ARGS      ((S)->value))
104    
105    #ifdef NDEBUG
106    #  define m4_get_symbol_traced(S)       ((S)->traced)
107    #  define m4_set_symbol_traced(S, V)    ((S)->traced = (V))
108    
109    #  define m4_symbol_value_create()      (XCALLOC (m4_symbol_value, 1))
110    #  define m4_symbol_value_delete(V)     (XFREE (V))
111    
112    #  define m4_is_symbol_value_text(V)    ((V)->type == M4_SYMBOL_TEXT)
113    #  define m4_is_symbol_value_func(V)    ((V)->type == M4_SYMBOL_FUNC)
114    #  define m4_get_symbol_value_text(V)   ((V)->u.text)
115    #  define m4_get_symbol_value_func(V)   ((V)->u.func)
116    
117    #  define m4_set_symbol_value_text(V, T)                                \
118            ((V)->type = M4_SYMBOL_TEXT, (V)->u.text = (T))
119    #  define m4_set_symbol_value_func(V, F)                                \
120            ((V)->type = M4_SYMBOL_FUNC, (V)->u.func = (F))
121    #endif
122    
123    
124    
125  /* m4_symbol_value.flags bit masks:  */  /* m4_symbol_value.flags bit masks:  */
126    
127  #define VALUE_MACRO_ARGS_BIT    (1 << 0)  #define VALUE_MACRO_ARGS_BIT    (1 << 0)
128  #define VALUE_BLIND_ARGS_BIT    (1 << 1)  #define VALUE_BLIND_ARGS_BIT    (1 << 1)
129    
 #define BIT_TEST(flags, bit)    (((flags) & (bit)) == (bit))  
 #define BIT_SET(flags, bit)     ((flags) |= (bit))  
 #define BIT_RESET(flags, bit)   ((flags) &= ~(bit))  
130    
131    struct m4_symbol_arg {
132      int           index;
133      int           flags;
134      char *        default_val;
135    };
136    
137    #define SYMBOL_ARG_INDEX(A)     ((A)->index)
138    #define SYMBOL_ARG_FLAGS(A)     ((A)->flags)
139    #define SYMBOL_ARG_DEFAULT(A)   ((A)->default_val)
140    
141    /* m4_symbol_arg.flags bit masks:  */
142    
143  /* Redefine the exported function to this faster  #define SYMBOL_ARG_REST_BIT     (1 << 0)
144     macro based version for internal use by the m4 code. */  #define SYMBOL_ARG_KEY_BIT      (1 << 1)
 #undef M4ARG  
 #define M4ARG(i)        (argc > (i) ? VALUE_TEXT (argv[i]) : "")  
145    
146    extern void     m4__symtab_remove_module_references (m4_symtab*, lt_dlhandle);
147    
 struct m4_symbol  
 {  
   boolean               traced;  
   m4_symbol_value *     value;  
 };  
148    
 #define SYMBOL_TRACED(S)        ((S)->traced)  
 #define SYMBOL_VALUE(S)         ((S)->value)  
149    
150  #define SYMBOL_NEXT(S)          (VALUE_NEXT          (SYMBOL_VALUE (S)))  
151  #define SYMBOL_HANDLE(S)        (VALUE_HANDLE        (SYMBOL_VALUE (S)))  /* TRUE iff strlen(rquote) == strlen(lquote) == 1 */
152  #define SYMBOL_FLAGS(S)         (VALUE_FLAGS         (SYMBOL_VALUE (S)))  extern boolean m4__single_quotes;
 #define SYMBOL_ARG_SIGNATURE(S) (VALUE_ARG_SIGNATURE (SYMBOL_VALUE (S)))  
 #define SYMBOL_MIN_ARGS(S)      (VALUE_MIN_ARGS      (SYMBOL_VALUE (S)))  
 #define SYMBOL_MAX_ARGS(S)      (VALUE_MAX_ARGS      (SYMBOL_VALUE (S)))  
 #define SYMBOL_TYPE(S)          (VALUE_TYPE          (SYMBOL_VALUE (S)))  
 #define SYMBOL_TEXT(S)          (VALUE_TEXT          (SYMBOL_VALUE (S)))  
 #define SYMBOL_FUNC(S)          (VALUE_FUNC          (SYMBOL_VALUE (S)))  
153    
154    /* TRUE iff strlen(bcomm) == strlen(ecomm) == 1 */
155    extern boolean m4__single_comments;
156    
157    /* TRUE iff some character has M4_SYNTAX_ESCAPE */
158    extern boolean m4__use_macro_escape;
159    
160  /* Various different token types.  */  /* Various different token types.  */
161  typedef enum {  typedef enum {

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.24

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