From 0cf54b4f77ccf8376341950b02ceb7c1d1268ed7 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Fri, 30 Oct 2026 14:31:07 +0000 Subject: refactor(strings): construct string values implicitly from raw literals Keep double-quoted literals and text constants as C_STRING values. Use marked STRING constructors for text and CHAR conversion, preserving string operations and I/O through the existing class machinery. Co-Authored-By: Claude Opus 5.5 --- lib/CodeGen/ConstantGen.cc | 23 ----------------------- 1 file changed, 23 deletions(-) (limited to 'lib/CodeGen/ConstantGen.cc') diff --git a/lib/CodeGen/ConstantGen.cc b/lib/CodeGen/ConstantGen.cc index a512490..66919d2 100644 --- a/lib/CodeGen/ConstantGen.cc +++ b/lib/CodeGen/ConstantGen.cc @@ -64,31 +64,8 @@ void CodeGen::emitConstantStmt(ConstantStmtAST *Stmt) { return; } if (!prepareSymbolDeclaration(Name, true)) return; - auto Existing = StringConstants.find(Stmt); - if (Existing != StringConstants.end()) { - Symbols[Name] = Existing->second; - return; - } const TypeInfo *Type = getExprTypeInfo(Stmt->getValue()); Value *Val = emitExpr(Stmt->getValue()); - if (Type && Type->isString() && Val) { - Value *Storage; - bool TopLevel = ConstantScopes.back().ID == 0; - if (TopLevel) { - Storage = new GlobalVariable(*TheModule, Type->LLVMType, false, - GlobalValue::InternalLinkage, Types->getZeroValue(Type->Name), "__cps_constant." + Name); - } else { - Storage = CreateEntryBlockAlloca(Builder->GetInsertBlock()->getParent(), Type->LLVMType, Name); - } - size_t Lifetime = registerStackObject(Storage, Type->Name, DiagnosticLine); - Builder->CreateStore(Val, Storage); - activateStackObject(Lifetime); - SymbolInfo Info{Storage, Type->Name, false, nullptr, ConstantScopes.back().ID}; - Info.ReadOnly = true; - Symbols[Name] = Info; - if (TopLevel) StringConstants.emplace(Stmt, Info); - return; - } auto *Literal = dyn_cast_or_null(Val); if (!Type || !Literal) { reportError("CONSTANT initializer must be a literal"); -- cgit v1.3.1-4-g156e