@@ -83,6 +83,17 @@ struct token *parens_expression(struct token *token, struct expression **expr, c
return expect(token, ')', where);
}
+struct token *string_expression(struct token *token, struct expression **expr, const char *where)
+{
+ struct token *next = primary_expression(token, expr);
+
+ if (!*expr || (*expr)->type != EXPR_STRING) {
+ sparse_error(token->pos, "string literal expected for %s", where);
+ *expr = NULL;
+ }
+ return next;
+}
+
/*
* Handle __func__, __FUNCTION__ and __PRETTY_FUNCTION__ token
* conversion
@@ -270,6 +270,7 @@ struct token *parse_expression(struct token *token, struct expression **tree);
struct token *conditional_expression(struct token *token, struct expression **tree);
struct token *primary_expression(struct token *token, struct expression **tree);
struct token *parens_expression(struct token *token, struct expression **expr, const char *where);
+struct token *string_expression(struct token *token, struct expression **expr, const char *where);
struct token *assignment_expression(struct token *token, struct expression **tree);
extern int expand_symbol(struct symbol *);
This will help to detect earlier syntax errors concerning string constants. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- expression.c | 11 +++++++++++ expression.h | 1 + 2 files changed, 12 insertions(+)