-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathPrinterUtils.cpp
149 lines (123 loc) · 5.37 KB
/
PrinterUtils.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include "PrinterUtils.h"
#include "Paths.h"
#include "Tests.h"
#include "loguru.h"
namespace PrinterUtils {
std::string convertToBytesFunctionName(const std::string &typeName) {
return StringUtils::stringFormat("from_bytes<%s>", typeName);
}
std::string convertBytesToUnion(const std::string &typeName, const std::string &bytes) {
return StringUtils::stringFormat("%s(%s)", convertToBytesFunctionName(typeName), bytes);
}
std::string wrapperName(const std::string &declName,
utbot::ProjectContext const &projectContext,
const fs::path& sourceFilePath) {
fs::path relativePath = fs::relative(sourceFilePath, projectContext.projectPath);
std::string mangledPath = Paths::mangle(relativePath);
return StringUtils::stringFormat("%s_%s", declName, mangledPath);
}
std::string getterName(const std::string &wrapperName) {
return "get_" + wrapperName;
}
std::string getterDecl(const std::string &returnTypeName,
const std::string &wrapperName) {
std::string gName = getterName(wrapperName);
return StringUtils::stringFormat("%s %s()", returnTypeName, gName);
}
std::string getFieldAccess(const std::string &objectName, const types::Field &field) {
if (field.name.empty()) {
return objectName;
}
const std::string &fieldName = field.name;
if (field.accessSpecifier == types::AccessSpecifier::AS_pubic) {
if (fieldName.empty()) {
return objectName;
}
return objectName + "." + fieldName;
}
return StringUtils::stringFormat("access_private::%s(%s)", fieldName, objectName);
}
std::string fillVarName(std::string const &access, std::string const &varName) {
return StringUtils::stringFormat(access, varName);
}
std::string initializePointer(const std::string &type,
const std::string &value,
size_t additionalPointersCount) {
if (value == C_NULL || std::stoull(value) == 0) {
return C_NULL;
} else {
std::string additionalPointers = StringUtils::repeat("*", additionalPointersCount);
return StringUtils::stringFormat("(%s%s) 0x%lx", type, additionalPointers,
std::stoull(value));
}
}
std::string initializePointerToVar(const std::string &type,
const std::string &varName,
size_t additionalPointersCount) {
std::string additionalPointers = StringUtils::repeat("*", additionalPointersCount);
return StringUtils::stringFormat("(%s%s) &%s", type, additionalPointers, varName);
}
std::string generateNewVar(int cnt) {
return LAZYRENAME + std::to_string(cnt);
}
std::string getKleePrefix(bool forKlee) {
return forKlee ? "klee_" : "";
}
std::string wrapUserValue(const testsgen::ValidationType &type, const std::string &value) {
switch(type) {
case testsgen::INT8_T:
case testsgen::INT16_T:
case testsgen::INT32_T:
case testsgen::INT64_T:
case testsgen::UINT8_T:
case testsgen::UINT16_T:
case testsgen::UINT32_T:
case testsgen::UINT64_T:
case testsgen::FLOAT:
case testsgen::BOOL:
return value;
case testsgen::CHAR:
return "\'" + value + "\'";
case testsgen::STRING:
return "\"" + value + "\"";
default:
ABORT_F("Unsupported ValidationType: %s", ValidationType_Name(type).c_str());
}
}
std::string getPointerMangledName(const std::string &name) {
return name + "_pointer";
}
std::string getParamMangledName(const std::string& paramName, const std::string& methodName) {
return methodName + "_" + paramName + "_arg";
}
std::string getReturnMangledName(const std::string& methodName) {
return methodName + "_return";
}
std::string getReturnMangledTypeName(const std::string& methodName) {
return methodName + "_return_type";
}
std::string getEnumReturnMangledTypeName(const std::string& methodName) {
return "enum " + getReturnMangledTypeName(methodName);
}
std::string getEqualString(const std::string& lhs, const std::string& rhs) {
return StringUtils::stringFormat("%s == %s", lhs, rhs);
}
std::string getDereferencePointer(const std::string& name, const size_t depth) {
return StringUtils::stringFormat("(%s%s)", StringUtils::repeat("*", depth), name);
}
std::string getExpectedVarName(const std::string& varName) {
return "expected_" + varName;
}
std::string getFileParamKTestJSON(char fileName) {
return StringUtils::stringFormat("%c-data", fileName);
}
std::string getFileReadBytesParamKTestJSON(char fileName) {
return StringUtils::stringFormat("%c-data-read", fileName);
}
std::string getFileWriteBytesParamKTestJSON(char fileName) {
return StringUtils::stringFormat("%c-data-write", fileName);
}
void removeThreadLocalQualifiers(std::string &decl) {
StringUtils::replaceAll(decl, "__thread ", "");
}
}