summaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/codegen.c3
-rw-r--r--src/codegen/codegen_stmt.c7
2 files changed, 5 insertions, 5 deletions
diff --git a/src/codegen/codegen.c b/src/codegen/codegen.c
index 8f2b6c1..b375bbb 100644
--- a/src/codegen/codegen.c
+++ b/src/codegen/codegen.c
@@ -56,7 +56,7 @@ static void codegen_var_expr(ParserContext *ctx, ASTNode *node, FILE *out)
if (node->resolved_type && strcmp(node->resolved_type, "unknown") == 0)
{
- if (node->var_ref.suggestion)
+ if (node->var_ref.suggestion && !ctx->silent_warnings)
{
char msg[256];
sprintf(msg, "Undefined variable '%s'", node->var_ref.name);
@@ -289,7 +289,6 @@ void codegen_expression(ParserContext *ctx, ASTNode *node, FILE *out)
else
{
fprintf(out, "(");
- // Left side: Only move if NOT an assignment target
int is_assignment =
(node->binary.op[strlen(node->binary.op) - 1] == '=' &&
strcmp(node->binary.op, "==") != 0 && strcmp(node->binary.op, "!=") != 0 &&
diff --git a/src/codegen/codegen_stmt.c b/src/codegen/codegen_stmt.c
index 003ce42..ff8ea46 100644
--- a/src/codegen/codegen_stmt.c
+++ b/src/codegen/codegen_stmt.c
@@ -498,9 +498,10 @@ void codegen_match_internal(ParserContext *ctx, ASTNode *node, FILE *out, int us
{
if (is_string_literal)
{
- fprintf(out, "({ printf(\"%%s\", ");
- codegen_expression(ctx, body, out);
- fprintf(out, "); printf(\"\\n\"); 0; })");
+ char *inner = body->literal.string_val;
+ char *code = process_printf_sugar(ctx, inner, 1, "stdout", NULL, NULL, 0);
+ fprintf(out, "%s;", code);
+ free(code);
}
else
{