diff --git a/src/parser/analyzer.c b/src/parser/analyzer.c
index 79c99e3e23e159ae8217a7dec323bf946c8d7e9b..867af5211dbbbc5f36174236584c06fbb00e571a 100644 (file)
--- a/src/parser/analyzer.c
+++ b/src/parser/analyzer.c
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 */
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 : */