From 4a5bc55769804d003d6cd9f8c16eefb76bb53d1b Mon Sep 17 00:00:00 2001 From: Nagi5Yeq Date: Sun, 31 May 2020 13:11:44 +0800 Subject: full support of array, pointer and record stuffs --- TypeIdentifier.cc | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'TypeIdentifier.cc') diff --git a/TypeIdentifier.cc b/TypeIdentifier.cc index 8f6894b..3a249da 100644 --- a/TypeIdentifier.cc +++ b/TypeIdentifier.cc @@ -54,4 +54,23 @@ std::shared_ptr ArrayTypeIdentifier::GetType() { } return type_; } -} // namespace pcc \ No newline at end of file + +RecordTypeIdentifier::RecordTypeIdentifier(Context* context, + std::list&& members) + : TypeIdentifier(context) + , members_(std::move(members)) {} + +std::shared_ptr RecordTypeIdentifier::GetType() { + if (type_ == nullptr) { + std::vector MemberTypes(members_.size()); + std::transform(members_.cbegin(), members_.cend(), MemberTypes.begin(), + [](const Declaration& member) { + return std::make_pair( + std::get<0>(member), + std::get<1>(member)->GetType()); + }); + type_ = context_->GetTypeManager()->CreateRecordType(MemberTypes); + } + return type_; +} +} // namespace pcc -- cgit