}
default:
- lex_error (lexer, _("in expression"));
+ lex_error (lexer, NULL);
return NULL;
}
}
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
void
lex_error (struct lexer *lexer, const char *message, ...)
{
- char *token_rep;
- char where[128];
+ struct string s;
+
+ ds_init_empty (&s);
- token_rep = lex_token_representation (lexer);
if (lexer->token == T_STOP)
- strcpy (where, "end of file");
+ ds_put_cstr (&s, _("Syntax error at end of file"));
else if (lexer->token == '.')
- strcpy (where, "end of command");
+ ds_put_cstr (&s, _("Syntax error at end of command"));
else
- snprintf (where, sizeof where, "`%s'", token_rep);
- free (token_rep);
+ {
+ char *token_rep = lex_token_representation (lexer);
+ ds_put_format (&s, _("Syntax error at `%s'"), token_rep);
+ free (token_rep);
+ }
if (message)
{
- char buf[1024];
va_list args;
+ ds_put_cstr (&s, ": ");
+
va_start (args, message);
- vsnprintf (buf, 1024, message, args);
+ ds_put_vformat (&s, message, args);
va_end (args);
-
- msg (SE, _("Syntax error %s at %s."), buf, where);
}
- else
- msg (SE, _("Syntax error at %s."), where);
+
+ msg (SE, "%s.", ds_cstr (&s));
+ ds_destroy (&s);
}
/* Checks that we're at end of command.
diff -u -w $TEMPDIR/errs - <<EOF
$TEMPDIR/missing-values.stat:35: error: MISSING VALUES: Missing values provided are too long to assign to variable of width 3.
$TEMPDIR/missing-values.stat:38: error: MISSING VALUES: Truncating missing value to maximum acceptable length (8 bytes).
-$TEMPDIR/missing-values.stat:41: error: MISSING VALUES: Syntax error expecting string at \`THRU'.
+$TEMPDIR/missing-values.stat:41: error: MISSING VALUES: Syntax error at \`THRU': expecting string.
$TEMPDIR/missing-values.stat:41: error: MISSING VALUES: THRU is not a variable name.
$TEMPDIR/missing-values.stat:44: error: MISSING VALUES: Cannot mix numeric variables (e.g. num1) and string variables (e.g. str1) within a single list.
EOF
activity="compare errors"
perl -pi -e 's/^\s*$//g' $TEMPDIR/errs
diff -b $TEMPDIR/errs - << EOF
-$TEMPDIR/rank.sh.sps:15: error: RANK: Syntax error expecting \`(' at end of command.
-$TEMPDIR/rank.sh.sps:19: error: RANK: Syntax error expecting integer at \`d'.
+$TEMPDIR/rank.sh.sps:15: error: RANK: Syntax error at end of command: expecting \`('.
+$TEMPDIR/rank.sh.sps:19: error: RANK: Syntax error at \`d': expecting integer.
$TEMPDIR/rank.sh.sps:25: error: RANK: Variable x already exists.
$TEMPDIR/rank.sh.sps:30: error: RANK: Too many variables in INTO clause.
EOF
[[2 le 2], [true]],
dnl Make sure <= token can't be split:
[[2 < = 2], [error],
- [error: DEBUG EVALUATE: Syntax error in expression at `='.]],
+ [error: DEBUG EVALUATE: Syntax error at `='.]],
[[1 <= 'foobar'], [error],
[error: DEBUG EVALUATE: Type mismatch while applying numeric less-than-or-equal-to (`<=') operator: cannot convert string to number.]],
[[5 <= 'foobar'], [error],
[[2 ge 2], [true]],
dnl Make sure >= token can't be split:
[[2 > = 2], [error],
- [error: DEBUG EVALUATE: Syntax error in expression at `='.]],
+ [error: DEBUG EVALUATE: Syntax error at `='.]],
[[1 >= 'foobar'], [error],
[error: DEBUG EVALUATE: Type mismatch while applying numeric greater-than-or-equal-to (`>=') operator: cannot convert string to number.]],
[[5 ge 'foobar'], [error],
[['asdfj ' ne 'asdf'], [true]],
dnl <> token can't be split:
[[1 < > 1], [error],
- [error: DEBUG EVALUATE: Syntax error in expression at `GT'.]],
+ [error: DEBUG EVALUATE: Syntax error at `GT'.]],
dnl # ~= token can't be split:
[[1 ~ = 1], [error],
- [error: DEBUG EVALUATE: Syntax error expecting end of command at `NOT'.]])
+ [error: DEBUG EVALUATE: Syntax error at `NOT': expecting end of command.]])
CHECK_EXPR_EVAL([exp lg10 ln sqrt abs mod mod10 rnd trunc],
[[exp(10)], [22026.47]],