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:
Carl Worth
2010-05-12 12:17:10 -07:00
parent df2ab5b992
commit 33cc400714
5 changed files with 203 additions and 54 deletions
+17 -8
View File
@@ -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 */