summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/semantic-analysis.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/semantic-analysis.c b/src/semantic-analysis.c
index dfb4ab0..ad9d254 100644
--- a/src/semantic-analysis.c
+++ b/src/semantic-analysis.c
@@ -15,8 +15,14 @@
static CcmmcValueConst eval_const_expr(CcmmcAst *expr) {
- if (expr->type_node == CCMMC_AST_NODE_CONST_VALUE)
+ if (expr->type_node == CCMMC_AST_NODE_CONST_VALUE) {
+ if (expr->value_const.kind == CCMMC_KIND_CONST_STRING) {
+ fprintf(stderr, ERROR("Strings are not allowed in expressions."),
+ expr->line_number);
+ return (CcmmcValueConst){ .kind = CCMMC_KIND_CONST_ERROR };
+ }
return expr->value_const;
+ }
if (expr->type_node != CCMMC_AST_NODE_EXPR) {
fprintf(stderr, ERROR("Not a constant expression."), expr->line_number);
return (CcmmcValueConst){ .kind = CCMMC_KIND_CONST_ERROR };
@@ -446,6 +452,7 @@ static bool process_variable(
any_error = true;
continue;
case CCMMC_KIND_CONST_STRING:
+ // string is already handled in eval_const_expr
default:
assert(false);
}