Fix defines involving both literals and other defined macros.
We now store a list of tokens in our hash-table rather than a single string. This lets us replace each macro in the value as necessary. This code adds a link dependency on talloc which does exactly what we want in terms of memory management for a parser. The 3 tests added in the previous commit now pass.
This commit is contained in:
@@ -26,22 +26,31 @@
|
||||
|
||||
#include "hash_table.h"
|
||||
|
||||
#define YYSTYPE char *
|
||||
#define yyscan_t void*
|
||||
|
||||
typedef struct {
|
||||
yyscan_t scanner;
|
||||
struct hash_table *defines;
|
||||
} glcpp_parser_t;
|
||||
/* Some data types used for parser value. */
|
||||
|
||||
void
|
||||
glcpp_parser_init (glcpp_parser_t *parser);
|
||||
|
||||
typedef struct node {
|
||||
const char *str;
|
||||
struct node *next;
|
||||
} node_t;
|
||||
|
||||
typedef struct list {
|
||||
node_t *head;
|
||||
node_t *tail;
|
||||
} list_t;
|
||||
|
||||
typedef struct glcpp_parser glcpp_parser_t;
|
||||
|
||||
glcpp_parser_t *
|
||||
glcpp_parser_create (void);
|
||||
|
||||
int
|
||||
glcpp_parser_parse (glcpp_parser_t *parser);
|
||||
|
||||
void
|
||||
glcpp_parser_fini (glcpp_parser_t *parser);
|
||||
glcpp_parser_destroy (glcpp_parser_t *parser);
|
||||
|
||||
/* Generated by glcpp-lex.l to glcpp-lex.c */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user