| 730 | } |
| 731 | |
| 732 | void AR_EXP_CollectEntities(AR_ExpNode *root, rax *aliases) { |
| 733 | if(AR_EXP_IsOperation(root)) { |
| 734 | for(int i = 0; i < root->op.child_count; i ++) { |
| 735 | AR_EXP_CollectEntities(root->op.children[i], aliases); |
| 736 | } |
| 737 | } else { // type == AR_EXP_OPERAND |
| 738 | if(root->operand.type == AR_EXP_VARIADIC) { |
| 739 | const char *entity = root->operand.variadic.entity_alias; |
| 740 | raxInsert(aliases, (unsigned char *)entity, strlen(entity), NULL, NULL); |
| 741 | } |
| 742 | } |
| 743 | } |
| 744 | |
| 745 | void AR_EXP_CollectAttributes(AR_ExpNode *root, rax *attributes) { |
| 746 | if(AR_EXP_IsOperation(root)) { |
no test coverage detected