Code

parser: Require a context for each parser operation.
[sysdb.git] / src / parser / parser.c
index d22ce5f3116ee4fc51fe35468b1c8be3911e2e51..2216045b568891b507dc10ec4365f2c4f8de85ef 100644 (file)
@@ -27,8 +27,6 @@
 
 #include "sysdb.h"
 
-#include "core/store.h"
-
 #include "parser/ast.h"
 #include "parser/parser.h"
 #include "parser/grammar.h"
@@ -96,23 +94,21 @@ sdb_parser_parse(const char *query, int len, sdb_strbuf_t *errbuf)
 
        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;
@@ -143,11 +139,17 @@ sdb_parser_parse_conditional(const char *cond, int len, sdb_strbuf_t *errbuf)
 
        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;
@@ -178,6 +180,11 @@ sdb_parser_parse_arith(const char *expr, int len, sdb_strbuf_t *errbuf)
 
        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 */