summaryrefslogtreecommitdiff
path: root/TypeManager.cc
diff options
context:
space:
mode:
authorNagi5Yeq <wu@x-nagi.com>2020-05-31 13:11:44 +0800
committerNagi5Yeq <wu@x-nagi.com>2020-05-31 13:11:44 +0800
commit4a5bc55769804d003d6cd9f8c16eefb76bb53d1b (patch)
tree365756351275152391a812440f6a76b9f92cc854 /TypeManager.cc
parentbd44c9eaef1f4dcbbd98d4489885566b6c7e5138 (diff)
full support of array, pointer and record stuffs
Diffstat (limited to 'TypeManager.cc')
-rw-r--r--TypeManager.cc19
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) {