#include <ctype.h>
#include <libpspp/alloc.h>
+#include <libpspp/assertion.h>
#include <libpspp/message.h>
#include "helpers.h"
#include "evaluate.h"
union operation_data *op = e->ops;
double *ns = e->number_stack;
- struct fixed_string *ss = e->string_stack;
+ struct substring *ss = e->string_stack;
assert ((c != NULL) == (e->dict != NULL));
pool_clear (e->eval_pool);
case OP_string:
{
- const struct fixed_string *s = &op++->string;
+ const struct substring *s = &op++->string;
*ss++ = copy_string (e, s->string, s->length);
}
break;
return;
case OP_return_string:
- *(struct fixed_string *) result = ss[-1];
+ *(struct substring *) result = ss[-1];
return;
#include "evaluate.inc"
default:
- abort ();
+ NOT_REACHED ();
}
}
}
expr_evaluate_str (struct expression *e, const struct ccase *c, int case_idx,
char *dst, size_t dst_size)
{
- struct fixed_string s;
+ struct substring s;
assert (e->type == OP_string);
assert ((dst == NULL) == (dst_size == 0));
expr_evaluate (e, c, case_idx, &s);
- copy_mangle (dst, dst_size, s.string, s.length);
+ buf_copy_rpad (dst, dst_size, s.string, s.length);
}
\f
#include <language/lexer/lexer.h>
else if (token == T_STRING)
{
width = ds_length (&tokstr);
- fprintf (stderr, "(%s = \"%.2s\")", name, ds_c_str (&tokstr));
+ fprintf (stderr, "(%s = \"%.2s\")", name, ds_cstr (&tokstr));
}
else
{
if (c == NULL)
{
c = xmalloc (sizeof *c);
- case_nullify (c);
+ case_create (c, dict_get_next_value_idx (d));
}
- case_resize (c, old_value_cnt, dict_get_next_value_idx (d));
+ else
+ case_resize (c, old_value_cnt, dict_get_next_value_idx (d));
if (lex_is_number ())
case_data_rw (c, v->fv)->f = tokval;
case OP_string:
{
- struct fixed_string s;
+ struct substring s;
expr_evaluate (expr, c, 0, &s);
fputc ('"', stderr);
}
default:
- assert (0);
+ NOT_REACHED ();
}
expr_free (expr);
fprintf (stderr, "i<%d>", op->integer);
break;
default:
- abort ();
+ NOT_REACHED ();
}
}
fprintf (stderr, "\n");