From 1d05704fdd6d3a3a9741bdef03975d4de05a37cf Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Thu, 12 Sep 2024 02:18:05 -0400 Subject: Use CString literals as constant values --- compile.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/compile.c b/compile.c index 9e5b8339..277c0a92 100644 --- a/compile.c +++ b/compile.c @@ -2826,6 +2826,12 @@ CORD compile(env_t *env, ast_t *ast) // C String constructor: if (!call->args || call->args->next) code_err(call->fn, "This constructor takes exactly 1 argument"); + if (call->args->value->tag == TextLiteral) + return compile_string_literal(Match(call->args->value, TextLiteral)->cord); + else if (call->args->value->tag == TextJoin && Match(call->args->value, TextJoin)->children == NULL) + return "\"\""; + else if (call->args->value->tag == TextJoin && Match(call->args->value, TextJoin)->children->next == NULL) + return compile_string_literal(Match(Match(call->args->value, TextJoin)->children->ast, TextLiteral)->cord); type_t *actual = get_type(env, call->args->value); return CORD_all("Text$as_c_string(", expr_as_text(env, compile(env, call->args->value), actual, "no"), ")"); } else { -- cgit v1.2.3