diff --git a/src/parser/parser.c b/src/parser/parser.c
index d22ce5f3116ee4fc51fe35468b1c8be3911e2e51..2216045b568891b507dc10ec4365f2c4f8de85ef 100644 (file)
--- a/src/parser/parser.c
+++ b/src/parser/parser.c
#include "sysdb.h"
-#include "core/store.h"
-
#include "parser/ast.h"
#include "parser/parser.h"
#include "parser/grammar.h"
iter = sdb_llist_get_iter(yyextra.parsetree);
while (sdb_llist_iter_has_next(iter)) {
- sdb_conn_node_t *node;
- node = SDB_CONN_NODE(sdb_llist_iter_get_next(iter));
- assert(node);
- /* TODO
- if (sdb_parser_analyze(node, errbuf)) {
+ sdb_ast_node_t *node;
+ node = SDB_AST_NODE(sdb_llist_iter_get_next(iter));
+ if (sdb_parser_analyze(node, errbuf) < 0) {
sdb_llist_iter_destroy(iter);
sdb_llist_destroy(yyextra.parsetree);
return NULL;
}
- */
}
sdb_llist_iter_destroy(iter);
return yyextra.parsetree;
} /* sdb_parser_parse */
sdb_ast_node_t *
-sdb_parser_parse_conditional(const char *cond, int len, sdb_strbuf_t *errbuf)
+sdb_parser_parse_conditional(int context,
+ const char *cond, int len, sdb_strbuf_t *errbuf)
{
sdb_parser_yyscan_t scanner;
sdb_parser_yyextra_t yyextra;
assert(SDB_AST_IS_LOGICAL(node));
sdb_llist_destroy(yyextra.parsetree);
+
+ if (sdb_parser_analyze_conditional(context, node, errbuf)) {
+ sdb_object_deref(SDB_OBJ(node));
+ return NULL;
+ }
return node;
} /* sdb_parser_parse_conditional */
sdb_ast_node_t *
-sdb_parser_parse_arith(const char *expr, int len, sdb_strbuf_t *errbuf)
+sdb_parser_parse_arith(int context,
+ const char *expr, int len, sdb_strbuf_t *errbuf)
{
sdb_parser_yyscan_t scanner;
sdb_parser_yyextra_t yyextra;
assert(SDB_AST_IS_ARITHMETIC(node));
sdb_llist_destroy(yyextra.parsetree);
+
+ if (sdb_parser_analyze_arith(context, node, errbuf)) {
+ sdb_object_deref(SDB_OBJ(node));
+ return NULL;
+ }
return node;
} /* sdb_parser_parse_arith */