libidav/davqlparser.c

changeset 118
1e2b1005004c
parent 117
5ffc2f23803f
child 120
246c50447ebf
equal deleted inserted replaced
117:5ffc2f23803f 118:1e2b1005004c
1160 return 0; 1160 return 0;
1161 } 1161 }
1162 } 1162 }
1163 // RULE: "(", LogicalExpression, ")" 1163 // RULE: "(", LogicalExpression, ")"
1164 else if (token_is(token, DAVQL_TOKEN_OPENP)) { 1164 else if (token_is(token, DAVQL_TOKEN_OPENP)) {
1165 token = token->next; 1165 int consumed = dav_parse_logical_expr(stmt, token->next, expr);
1166 1166 if (consumed) {
1167 int consumed = dav_parse_logical_expr(stmt, token, expr); 1167 token = ucx_list_get(token->next, consumed);
1168 if (stmt->errorcode) { 1168
1169 return 0; 1169 if (token_is(token, DAVQL_TOKEN_CLOSEP)) {
1170 } 1170 token = token->next;
1171 if (!consumed) { 1171 return consumed + 2;
1172 dav_error_in_context(DAVQL_ERROR_MISSING_EXPR, 1172 } else {
1173 _error_missing_expr, stmt, token); 1173 dav_error_in_context(DAVQL_ERROR_MISSING_PAR, _error_missing_par,
1174 return 0; 1174 stmt, token);
1175 } 1175 return 0;
1176 1176 }
1177 token = ucx_list_get(token, consumed);
1178
1179 if (token_is(token, DAVQL_TOKEN_CLOSEP)) {
1180 token = token->next;
1181 return consumed + 2;
1182 } else { 1177 } else {
1183 dav_error_in_context(DAVQL_ERROR_MISSING_PAR, _error_missing_par, 1178 // don't handle errors here, we can also try a boolean primary
1184 stmt, token); 1179 stmt->errorcode = 0;
1185 return 0; 1180 if (stmt->errormessage) {
1186 } 1181 free(stmt->errormessage);
1187 } 1182 }
1183 }
1184 }
1185
1188 // RULE: BooleanPrimary 1186 // RULE: BooleanPrimary
1189 else { 1187 return dav_parse_bool_prim(stmt, token, expr);
1190 return dav_parse_bool_prim(stmt, token, expr);
1191 }
1192 } 1188 }
1193 1189
1194 static int dav_parse_logical_expr(DavQLStatement *stmt, UcxList *token, 1190 static int dav_parse_logical_expr(DavQLStatement *stmt, UcxList *token,
1195 DavQLExpression *expr) { 1191 DavQLExpression *expr) {
1196 1192

mercurial