From f65d756bff8d4c5cbc15bd0322a2ae8e6b896a21 Mon Sep 17 00:00:00 2001 From: Ellie Hermaszewska Date: Tue, 29 Oct 2024 14:49:26 +0800 Subject: format * format * Minor test fixes * enable checking cpp format in ci --- source/slang/slang-ir-check-recursive-type.cpp | 82 ++++++++++++++------------ 1 file changed, 44 insertions(+), 38 deletions(-) (limited to 'source/slang/slang-ir-check-recursive-type.cpp') diff --git a/source/slang/slang-ir-check-recursive-type.cpp b/source/slang/slang-ir-check-recursive-type.cpp index 8679801d0..ee4541735 100644 --- a/source/slang/slang-ir-check-recursive-type.cpp +++ b/source/slang/slang-ir-check-recursive-type.cpp @@ -1,59 +1,65 @@ #include "slang-ir-check-recursive-type.h" + #include "slang-ir-util.h" namespace Slang { - bool checkTypeRecursionImpl(HashSet& checkedTypes, HashSet& stack, IRInst* type, IRInst* field, DiagnosticSink* sink) +bool checkTypeRecursionImpl( + HashSet& checkedTypes, + HashSet& stack, + IRInst* type, + IRInst* field, + DiagnosticSink* sink) +{ + auto visitElementType = [&](IRInst* elementType, IRInst* field) -> bool { - auto visitElementType = [&](IRInst* elementType, IRInst* field) -> bool - { - if (!stack.add(elementType)) - { - sink->diagnose(field ? field : type, Diagnostics::recursiveType, type); - return false; - } - if (checkedTypes.add(elementType)) - checkTypeRecursionImpl(checkedTypes, stack, elementType, field, sink); - stack.remove(elementType); - return true; - }; - if (auto arrayType = as(type)) - { - return visitElementType(arrayType->getElementType(), field); - } - else if (auto structType = as(type)) + if (!stack.add(elementType)) { - for (auto sfield : structType->getFields()) - if (!visitElementType(sfield->getFieldType(), sfield)) - return false; + sink->diagnose(field ? field : type, Diagnostics::recursiveType, type); + return false; } + if (checkedTypes.add(elementType)) + checkTypeRecursionImpl(checkedTypes, stack, elementType, field, sink); + stack.remove(elementType); return true; + }; + if (auto arrayType = as(type)) + { + return visitElementType(arrayType->getElementType(), field); + } + else if (auto structType = as(type)) + { + for (auto sfield : structType->getFields()) + if (!visitElementType(sfield->getFieldType(), sfield)) + return false; } + return true; +} - void checkTypeRecursion(HashSet& checkedTypes, IRInst* type, DiagnosticSink* sink) +void checkTypeRecursion(HashSet& checkedTypes, IRInst* type, DiagnosticSink* sink) +{ + HashSet stack; + if (checkedTypes.add(type)) { - HashSet stack; - if (checkedTypes.add(type)) - { - stack.add(type); - checkTypeRecursionImpl(checkedTypes, stack, type, nullptr, sink); - } + stack.add(type); + checkTypeRecursionImpl(checkedTypes, stack, type, nullptr, sink); } +} - void checkForRecursiveTypes(IRModule* module, DiagnosticSink* sink) +void checkForRecursiveTypes(IRModule* module, DiagnosticSink* sink) +{ + HashSet checkedTypes; + for (auto globalInst : module->getGlobalInsts()) { - HashSet checkedTypes; - for (auto globalInst : module->getGlobalInsts()) + switch (globalInst->getOp()) { - switch (globalInst->getOp()) + case kIROp_StructType: { - case kIROp_StructType: - { - checkTypeRecursion(checkedTypes, globalInst, sink); - } - break; + checkTypeRecursion(checkedTypes, globalInst, sink); } + break; } } - } + +} // namespace Slang -- cgit v1.2.3