Skip to content

Commit e8b25d3

Browse files
committed
Try out cycle detection
1 parent 3fcefdc commit e8b25d3

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

TreeVisitor.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,17 @@ bool TreeVisitor::VisitTypedefDecl(clang::TypedefDecl *tpdef){
4747
std::string name = tpdef->getName();
4848
std::string tpe = typeTranslator.Translate(tpdef->getUnderlyingType());
4949
declarations += "\ttype " + name + " = " + tpe + "\n";
50+
51+
cycleDetection.AddDependcy(name, tpdef->getUnderlyingType());
52+
if(cycleDetection.isCyclic(name)){
53+
llvm::errs() << "Error: " << name << " ic cyclic\n";
54+
llvm::errs() << name << "\n";
55+
for(auto& s : cycleDetection.dependencies[name]){
56+
llvm::errs() << "\t" << s << "\n";
57+
}
58+
llvm::errs() << cycleDetection.isCyclic(name) << "\n";
59+
}
60+
5061
return true;
5162
}
5263

@@ -145,11 +156,16 @@ bool TreeVisitor::VisitRecordDecl(clang::RecordDecl *record){
145156
fields = fields.substr(0, fields.size()-2);
146157
}
147158

148-
//llvm::errs() << newName << "\n";
149-
//for(auto& s : cycleDetection.dependencies[newName]){
150-
// llvm::errs() << "\t" << s << "\n";
151-
//}
152-
//llvm::errs() << cycleDetection.isCyclic(newName) << "\n";
159+
160+
161+
if(cycleDetection.isCyclic(newName)){
162+
llvm::errs() << "Error: " << newName << " ic cyclic\n";
163+
llvm::errs() << newName << "\n";
164+
for(auto& s : cycleDetection.dependencies[newName]){
165+
llvm::errs() << "\t" << s << "\n";
166+
}
167+
llvm::errs() << cycleDetection.isCyclic(newName) << "\n";
168+
}
153169

154170
if(fieldCnt < SCALA_NATIVE_MAX_STRUCT_FIELDS){
155171
declarations += "\ttype " + newName + " = " + "native.CStruct" + std::to_string(fieldCnt) + "[" + fields + "]\n";

0 commit comments

Comments
 (0)