X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fparser%2Fanalyzer.c;h=867af5211dbbbc5f36174236584c06fbb00e571a;hp=79c99e3e23e159ae8217a7dec323bf946c8d7e9b;hb=195f73cdb0c1087bf3f3a82267204fca9eb3104c;hpb=8092b5015036c07151a4da123b9db5b8b3f392ce diff --git a/src/parser/analyzer.c b/src/parser/analyzer.c index 79c99e3..867af52 100644 --- a/src/parser/analyzer.c +++ b/src/parser/analyzer.c @@ -105,7 +105,7 @@ analyze_arith(int context, sdb_ast_op_t *op, sdb_strbuf_t *errbuf) return -1; if (analyze_node(context, op->right, errbuf)) return -1; - SDB_AST_NODE(op)->data_type = sdb_data_expr_type(op->kind, + SDB_AST_NODE(op)->data_type = sdb_data_expr_type(SDB_AST_OP_TO_DATA_OP(op->kind), op->left->data_type, op->right->data_type); /* TODO: replace constant arithmetic operations with a constant value */ @@ -396,5 +396,35 @@ sdb_parser_analyze(sdb_ast_node_t *node, sdb_strbuf_t *errbuf) return -1; } /* sdb_parser_analyze */ +int +sdb_parser_analyze_conditional(sdb_ast_node_t *node, sdb_strbuf_t *errbuf) +{ + if (! node) { + sdb_strbuf_sprintf(errbuf, "Empty conditional node"); + return -1; + } + if (! SDB_AST_IS_LOGICAL(node)) { + sdb_strbuf_sprintf(errbuf, "Not a conditional node (got %s)", + SDB_AST_TYPE_TO_STRING(node)); + return -1; + } + return analyze_node(-1, node, errbuf); +} /* sdb_parser_analyze_conditional */ + +int +sdb_parser_analyze_arith(sdb_ast_node_t *node, sdb_strbuf_t *errbuf) +{ + if (! node) { + sdb_strbuf_sprintf(errbuf, "Empty arithmetic node"); + return -1; + } + if (! SDB_AST_IS_ARITHMETIC(node)) { + sdb_strbuf_sprintf(errbuf, "Not an arithmetic node (got %s)", + SDB_AST_TYPE_TO_STRING(node)); + return -1; + } + return analyze_node(-1, node, errbuf); +} /* sdb_parser_analyze_arith */ + /* vim: set tw=78 sw=4 ts=4 noexpandtab : */