Parser: simplification, don't abuse of macros (work in progress)
This commit is contained in:
@@ -28,13 +28,6 @@
|
|||||||
|
|
||||||
extern char *__progname;
|
extern char *__progname;
|
||||||
|
|
||||||
#define TOKEN(t) \
|
|
||||||
do { \
|
|
||||||
kw->type = (t); \
|
|
||||||
TAILQ_INSERT_TAIL(&keywords, kw, entry); \
|
|
||||||
kw = malloc(sizeof(*kw)); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define NEW_WORD() \
|
#define NEW_WORD() \
|
||||||
do { \
|
do { \
|
||||||
if (j > 0) { \
|
if (j > 0) { \
|
||||||
@@ -43,7 +36,7 @@ extern char *__progname;
|
|||||||
TAILQ_INSERT_TAIL(&stack, e, entry); \
|
TAILQ_INSERT_TAIL(&stack, e, entry); \
|
||||||
e = malloc(sizeof(*e)); \
|
e = malloc(sizeof(*e)); \
|
||||||
j = 0; \
|
j = 0; \
|
||||||
TOKEN(WORD); \
|
push_keyword(WORD); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@@ -67,6 +60,7 @@ struct conf_state {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void get_keyword(const char *buf, size_t n);
|
static void get_keyword(const char *buf, size_t n);
|
||||||
|
static void push_keyword(enum conf_type);
|
||||||
static void pop_keyword(void);
|
static void pop_keyword(void);
|
||||||
static void pop_stack(void);
|
static void pop_stack(void);
|
||||||
static void syntax(const char *, ...);
|
static void syntax(const char *, ...);
|
||||||
@@ -135,7 +129,7 @@ get_keyword(const char *buf, size_t n)
|
|||||||
|
|
||||||
if (buf[i] == '[' && s.quote == False) {
|
if (buf[i] == '[' && s.quote == False) {
|
||||||
NEW_WORD();
|
NEW_WORD();
|
||||||
TOKEN((buf[i+1] == '/') ? SEC_END : SEC_START);
|
push_keyword((buf[i+1] == '/') ? SEC_END : SEC_START);
|
||||||
if (buf[i+1] == '/')
|
if (buf[i+1] == '/')
|
||||||
i++;
|
i++;
|
||||||
continue;
|
continue;
|
||||||
@@ -148,13 +142,13 @@ get_keyword(const char *buf, size_t n)
|
|||||||
|
|
||||||
if (buf[i] == '{' && s.quote == False) {
|
if (buf[i] == '{' && s.quote == False) {
|
||||||
NEW_WORD();
|
NEW_WORD();
|
||||||
TOKEN(LIST_START);
|
push_keyword(LIST_START);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf[i] == '}' && s.quote == False) {
|
if (buf[i] == '}' && s.quote == False) {
|
||||||
NEW_WORD();
|
NEW_WORD();
|
||||||
TOKEN(LIST_END);
|
push_keyword(LIST_END);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +159,7 @@ get_keyword(const char *buf, size_t n)
|
|||||||
|
|
||||||
if (buf[i] == '=' && s.quote == False) {
|
if (buf[i] == '=' && s.quote == False) {
|
||||||
NEW_WORD();
|
NEW_WORD();
|
||||||
TOKEN(EQUAL);
|
push_keyword(EQUAL);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,6 +174,15 @@ get_keyword(const char *buf, size_t n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
push_keyword(enum conf_type type)
|
||||||
|
{
|
||||||
|
struct conf_keyword *kw;
|
||||||
|
kw = emalloc(1, sizeof(*kw));
|
||||||
|
kw->type = type;
|
||||||
|
TAILQ_INSERT_TAIL(&keywords, kw, entry);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
static void
|
static void
|
||||||
print_kw_tree(void)
|
print_kw_tree(void)
|
||||||
|
|||||||
Reference in New Issue
Block a user