diff options
| author | Nagi5Yeq <wu@x-nagi.com> | 2020-05-31 13:11:44 +0800 |
|---|---|---|
| committer | Nagi5Yeq <wu@x-nagi.com> | 2020-05-31 13:11:44 +0800 |
| commit | 4a5bc55769804d003d6cd9f8c16eefb76bb53d1b (patch) | |
| tree | 365756351275152391a812440f6a76b9f92cc854 /TypeManager.cc | |
| parent | bd44c9eaef1f4dcbbd98d4489885566b6c7e5138 (diff) | |
full support of array, pointer and record stuffs
Diffstat (limited to 'TypeManager.cc')
| -rw-r--r-- | TypeManager.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/TypeManager.cc b/TypeManager.cc index 4a510eb..977d3bc 100644 --- a/TypeManager.cc +++ b/TypeManager.cc @@ -205,11 +205,28 @@ std::shared_ptr<ArrayType> EndValue->getUniqueInteger().getZExtValue() - StartIndex + 1; std::shared_ptr<ArrayType> NewType = std::make_shared<ArrayType>( ElementType, ElementNumber, IndexType, StartValue, EndValue, - std::string(ElementType->GetCommonName()) + "[]", StartIndex == 0); + std::string(ElementType->GetCommonName()) + "[" + + std::to_string(ElementNumber) + "]", + StartIndex == 0); ArrayTypes_.push_back(NewType); return NewType; } +std::shared_ptr<RecordType> + TypeManager::CreateRecordType(const std::vector<RecordMember>& members) { + std::string name = "record {"; + std::vector<RecordMember>::const_iterator MemberIt = members.cbegin(); + name.append(std::get<1>(*MemberIt)->GetCommonName()); + for (++MemberIt; MemberIt != members.cend(); ++MemberIt) { + name.append(", "); + name.append(std::get<1>(*MemberIt)->GetCommonName()); + } + std::shared_ptr<RecordType> NewType = + std::make_shared<RecordType>(members, name + "}"); + RecordTypes_.push_back(NewType); + return NewType; +} + std::shared_ptr<FunctionType> TypeManager::CreateFunctionType( std::shared_ptr<Type> ReturnType, std::vector<std::shared_ptr<Type>> ArgTypes) { |
