{
struct isl_token *tok = NULL;
struct isl_vec *aff;
+ int sign = 1;
aff = isl_vec_alloc(v->ctx, 1 + v->n);
isl_seq_clr(aff->el, aff->size);
isl_stream_error(s, tok, "unknown identifier");
goto error;
}
- isl_int_add_ui(aff->el[1 + pos], aff->el[1 + pos], 1);
+ if (sign > 0)
+ isl_int_add_ui(aff->el[1 + pos],
+ aff->el[1 + pos], 1);
+ else
+ isl_int_sub_ui(aff->el[1 + pos],
+ aff->el[1 + pos], 1);
+ sign = 1;
} else if (tok->type == ISL_TOKEN_VALUE) {
struct isl_token *tok2;
int n = v->n;
isl_token_free(tok2);
} else if (tok2)
isl_stream_push_token(s, tok2);
+ if (sign < 0)
+ isl_int_neg(tok->u.v, tok->u.v);
isl_int_add(aff->el[1 + pos],
aff->el[1 + pos], tok->u.v);
+ sign = 1;
+ } else if (tok->type == '-') {
+ sign = -sign;
} else if (tok->type == '+') {
/* nothing */
} else {
}
if (c != -1)
isl_stream_ungetc(s, c);
+ if (!isdigit(c)) {
+ tok = isl_token_new(s->ctx, line, col, old_line != line);
+ if (!tok)
+ return NULL;
+ tok->type = (enum isl_token_type) '-';
+ return tok;
+ }
}
if (c == '-' || isdigit(c)) {
tok = isl_token_new(s->ctx, line, col, old_line != line);
goto error;
if (c != -1)
isl_stream_ungetc(s, c);
- if (s->len == 1 && s->buffer[0] == '-')
- isl_int_set_si(tok->u.v, -1);
- else {
- isl_stream_push_char(s, '\0');
- isl_int_read(tok->u.v, s->buffer);
- }
+ isl_stream_push_char(s, '\0');
+ isl_int_read(tok->u.v, s->buffer);
return tok;
}
if (isalpha(c)) {