diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-22 03:49:08 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-22 03:58:26 +0000 |
| commit | 5fdea7e2edd534d15eff95efb33336430d7b4872 (patch) | |
| tree | b5528d64124a8b9b299c10c9452e58d2cfbfcd6a /lib/CodeGen/StringValueGen.cc | |
| parent | 1d2bb133b7a3540aeb81c5f9616cb366aebc919f (diff) | |
refactor(codegen): share record field default construction
copyClassValue, emitConstruct and emitStringFromCString each walked the
record fields and default-constructed those that need it. Move the loop
into a private emitFieldDefaults helper; each caller passes the same line
as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'lib/CodeGen/StringValueGen.cc')
| -rw-r--r-- | lib/CodeGen/StringValueGen.cc | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/lib/CodeGen/StringValueGen.cc b/lib/CodeGen/StringValueGen.cc index ce9694c..c07f9a9 100644 --- a/lib/CodeGen/StringValueGen.cc +++ b/lib/CodeGen/StringValueGen.cc @@ -29,11 +29,7 @@ Value *CodeGen::emitStringFromCString(Value *Text) { auto *Storage = CreateEntryBlockAlloca(Builder->GetInsertBlock()->getParent(), Type->LLVMType, "string_value"); Builder->CreateStore(Types->getZeroValue(Type->Name), Storage); - for (const auto &[Name, Field] : Type->Record.Fields) - if (typeNeedsConstruction(Field.TypeName) && - !emitDefaultConstruct(Field.TypeName, - Builder->CreateStructGEP(Type->LLVMType, Storage, Field.Index), DiagnosticLine)) - return nullptr; + if (!emitFieldDefaults(Type, Storage, DiagnosticLine)) return nullptr; if (!FuncGen->emitCall(*Constructor, {Storage, Text})) return nullptr; // The consumer takes ownership, just as with an ordinary class result. return Builder->CreateLoad(Type->LLVMType, Storage, "string"); |
