Code

parser: Fixed setup of iterator nodes.
authorSebastian Harl <sh@tokkee.org>
Tue, 5 May 2015 21:36:14 +0000 (23:36 +0200)
committerSebastian Harl <sh@tokkee.org>
Tue, 5 May 2015 21:36:14 +0000 (23:36 +0200)
The iterator value was supposed to be an "incomplete operator" node, that is,
one of the operands should be NULL. This is actually the case now and this
also means we don't have to store the operator type separately.

src/include/parser/ast.h
src/parser/ast.c
src/parser/grammar.y

index 665caf50f174118efb3bd1d30590d301d43e098e..2ae2912b741884ed7ee2db8e7fa42f077756f8f5 100644 (file)
@@ -189,7 +189,6 @@ typedef struct {
 typedef struct {
        sdb_ast_node_t super;
        int kind;
 typedef struct {
        sdb_ast_node_t super;
        int kind;
-       int op;
        sdb_ast_node_t *iter;
        /* exactly one operand of the expression has to be unset and will be
         * filled in by the iterator value */
        sdb_ast_node_t *iter;
        /* exactly one operand of the expression has to be unset and will be
         * filled in by the iterator value */
@@ -197,7 +196,7 @@ typedef struct {
 } sdb_ast_iter_t;
 #define SDB_AST_ITER(obj) ((sdb_ast_iter_t *)(obj))
 #define SDB_AST_ITER_INIT \
 } sdb_ast_iter_t;
 #define SDB_AST_ITER(obj) ((sdb_ast_iter_t *)(obj))
 #define SDB_AST_ITER_INIT \
-       { { SDB_OBJECT_INIT, SDB_AST_TYPE_ITERATOR }, -1, -1, NULL, NULL }
+       { { SDB_OBJECT_INIT, SDB_AST_TYPE_ITERATOR }, -1, NULL, NULL }
 
 /*
  * sdb_ast_typed_t represents a typed value.
 
 /*
  * sdb_ast_typed_t represents a typed value.
@@ -336,8 +335,7 @@ sdb_ast_op_create(int kind, sdb_ast_node_t *left, sdb_ast_node_t *right);
  * ownership of the iter and expr nodes.
  */
 sdb_ast_node_t *
  * ownership of the iter and expr nodes.
  */
 sdb_ast_node_t *
-sdb_ast_iter_create(int kind, int op,
-               sdb_ast_node_t *iter, sdb_ast_node_t *expr);
+sdb_ast_iter_create(int kind, sdb_ast_node_t *iter, sdb_ast_node_t *expr);
 
 /*
  * sdb_ast_typed_create:
 
 /*
  * sdb_ast_typed_create:
index a64178bdd6e35e6fce4f43b2db4dace1d899806a..81a4c343e37e4d2edf5e80e2f9398c510d6da1c1 100644 (file)
@@ -223,8 +223,7 @@ sdb_ast_op_create(int kind, sdb_ast_node_t *left, sdb_ast_node_t *right)
 } /* sdb_ast_op_create */
 
 sdb_ast_node_t *
 } /* sdb_ast_op_create */
 
 sdb_ast_node_t *
-sdb_ast_iter_create(int kind, int op,
-               sdb_ast_node_t *iter, sdb_ast_node_t *expr)
+sdb_ast_iter_create(int kind, sdb_ast_node_t *iter, sdb_ast_node_t *expr)
 {
        sdb_ast_iter_t *i;
        i = SDB_AST_ITER(sdb_object_create(SDB_AST_OP_TO_STRING(kind), iter_type));
 {
        sdb_ast_iter_t *i;
        i = SDB_AST_ITER(sdb_object_create(SDB_AST_OP_TO_STRING(kind), iter_type));
@@ -234,7 +233,6 @@ sdb_ast_iter_create(int kind, int op,
        i->super.type = SDB_AST_TYPE_ITERATOR;
 
        i->kind = kind;
        i->super.type = SDB_AST_TYPE_ITERATOR;
 
        i->kind = kind;
-       i->op = op;
        i->iter = iter;
        i->expr = expr;
        return SDB_AST_NODE(i);
        i->iter = iter;
        i->expr = expr;
        return SDB_AST_NODE(i);
index ed2b070dbb23fef9b2af493286ba3fea4653ac97..801462617755d305739e4ef28ac237dd8ce4d5cd 100644 (file)
@@ -453,13 +453,17 @@ comparison:
        |
        ANY expression cmp expression
                {
        |
        ANY expression cmp expression
                {
-                       $$ = sdb_ast_iter_create(SDB_AST_ANY, $3, $2, $4);
+                       sdb_ast_node_t *n = sdb_ast_op_create($3, NULL, $4);
+                       CK_OOM(n);
+                       $$ = sdb_ast_iter_create(SDB_AST_ANY, $2, n);
                        CK_OOM($$);
                }
        |
        ALL expression cmp expression
                {
                        CK_OOM($$);
                }
        |
        ALL expression cmp expression
                {
-                       $$ = sdb_ast_iter_create(SDB_AST_ALL, $3, $2, $4);
+                       sdb_ast_node_t *n = sdb_ast_op_create($3, NULL, $4);
+                       CK_OOM(n);
+                       $$ = sdb_ast_iter_create(SDB_AST_ALL, $2, n);
                        CK_OOM($$);
                }
        |
                        CK_OOM($$);
                }
        |