1a48e4168Speter klausler //===-- runtime/derived-api.cpp 2a48e4168Speter klausler //-----------------------------------------------===// 3a48e4168Speter klausler // 4a48e4168Speter klausler // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5a48e4168Speter klausler // See https://llvm.org/LICENSE.txt for license information. 6a48e4168Speter klausler // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7a48e4168Speter klausler // 8a48e4168Speter klausler //===----------------------------------------------------------------------===// 9a48e4168Speter klausler 10*830c0b90SPeter Klausler #include "flang/Runtime/derived-api.h" 11a48e4168Speter klausler #include "derived.h" 12a48e4168Speter klausler #include "terminator.h" 13a48e4168Speter klausler #include "type-info.h" 14*830c0b90SPeter Klausler #include "flang/Runtime/descriptor.h" 15a48e4168Speter klausler 16a48e4168Speter klausler namespace Fortran::runtime { 17a48e4168Speter klausler 18a48e4168Speter klausler extern "C" { 19a48e4168Speter klausler RTNAME(Initialize)20a48e4168Speter klauslervoid RTNAME(Initialize)( 21a48e4168Speter klausler const Descriptor &descriptor, const char *sourceFile, int sourceLine) { 22a48e4168Speter klausler if (const DescriptorAddendum * addendum{descriptor.Addendum()}) { 23a48e4168Speter klausler if (const auto *derived{addendum->derivedType()}) { 24a48e4168Speter klausler if (!derived->noInitializationNeeded()) { 25a48e4168Speter klausler Terminator terminator{sourceFile, sourceLine}; 26a48e4168Speter klausler Initialize(descriptor, *derived, terminator); 27a48e4168Speter klausler } 28a48e4168Speter klausler } 29a48e4168Speter klausler } 30a48e4168Speter klausler } 31a48e4168Speter klausler RTNAME(Destroy)32a48e4168Speter klauslervoid RTNAME(Destroy)(const Descriptor &descriptor) { 33a48e4168Speter klausler if (const DescriptorAddendum * addendum{descriptor.Addendum()}) { 34a48e4168Speter klausler if (const auto *derived{addendum->derivedType()}) { 35a48e4168Speter klausler if (!derived->noDestructionNeeded()) { 36a48e4168Speter klausler Destroy(descriptor, true, *derived); 37a48e4168Speter klausler } 38a48e4168Speter klausler } 39a48e4168Speter klausler } 40a48e4168Speter klausler } 41a48e4168Speter klausler 42a48e4168Speter klausler // TODO: Assign() 43a48e4168Speter klausler 44a48e4168Speter klausler } // extern "C" 45a48e4168Speter klausler } // namespace Fortran::runtime 46