| 1062 | } |
| 1063 | |
| 1064 | static struct symbol *sym_check_expr_deps(struct expr *e) |
| 1065 | { |
| 1066 | struct symbol *sym; |
| 1067 | |
| 1068 | if (!e) |
| 1069 | return NULL; |
| 1070 | switch (e->type) { |
| 1071 | case E_OR: |
| 1072 | case E_AND: |
| 1073 | sym = sym_check_expr_deps(e->left.expr); |
| 1074 | if (sym) |
| 1075 | return sym; |
| 1076 | return sym_check_expr_deps(e->right.expr); |
| 1077 | case E_NOT: |
| 1078 | return sym_check_expr_deps(e->left.expr); |
| 1079 | case E_EQUAL: |
| 1080 | case E_GEQ: |
| 1081 | case E_GTH: |
| 1082 | case E_LEQ: |
| 1083 | case E_LTH: |
| 1084 | case E_UNEQUAL: |
| 1085 | sym = sym_check_deps(e->left.sym); |
| 1086 | if (sym) |
| 1087 | return sym; |
| 1088 | return sym_check_deps(e->right.sym); |
| 1089 | case E_SYMBOL: |
| 1090 | return sym_check_deps(e->left.sym); |
| 1091 | default: |
| 1092 | break; |
| 1093 | } |
| 1094 | fprintf(stderr, "Oops! How to check %d?\n", e->type); |
| 1095 | return NULL; |
| 1096 | } |
| 1097 | |
| 1098 | /* return NULL when dependencies are OK */ |
| 1099 | static struct symbol *sym_check_sym_deps(struct symbol *sym) |
no test coverage detected