diff options
Diffstat (limited to 'source/slang/slang-ast-print.cpp')
| -rw-r--r-- | source/slang/slang-ast-print.cpp | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/source/slang/slang-ast-print.cpp b/source/slang/slang-ast-print.cpp index ee747a4c2..1f7478662 100644 --- a/source/slang/slang-ast-print.cpp +++ b/source/slang/slang-ast-print.cpp @@ -1313,12 +1313,34 @@ void ASTPrinter::_addDeclPathRec(const DeclRef<Decl>& declRef, Index depth) else if (depth > 0) { // Write out the generic parameters (only if the depth allows it) - addGenericParams(parentGenericDeclRef); + addGenericParams(parentGenericDeclRef, nullptr); } } } -void ASTPrinter::addGenericParams(const DeclRef<GenericDecl>& genericDeclRef) +struct ParamScope +{ + StringBuilder* sb; + List<Range<Index>>* paramRanges; + Index rangeStart; + ParamScope(StringBuilder* inSb, List<Range<Index>>* outParamRanges) + : sb(inSb), paramRanges(outParamRanges) + { + rangeStart = sb->getLength(); + } + ~ParamScope() + { + if (paramRanges) + { + Index rangeEnd = sb->getLength(); + paramRanges->add(makeRange<Index>(rangeStart, rangeEnd)); + } + } +}; + +void ASTPrinter::addGenericParams( + const DeclRef<GenericDecl>& genericDeclRef, + List<Range<Index>>* outParamRanges) { auto& sb = m_builder; @@ -1331,7 +1353,7 @@ void ASTPrinter::addGenericParams(const DeclRef<GenericDecl>& genericDeclRef) if (!first) sb << ", "; first = false; - + ParamScope paramScope(&sb, outParamRanges); { ScopePart scopePart(this, Part::Type::GenericParamType); sb << getText(genericTypeParam.getName()); @@ -1342,7 +1364,7 @@ void ASTPrinter::addGenericParams(const DeclRef<GenericDecl>& genericDeclRef) if (!first) sb << ", "; first = false; - + ParamScope paramScope(&sb, outParamRanges); { ScopePart scopePart(this, Part::Type::GenericParamValueType); addType(getType(m_astBuilder, genericValParam)); @@ -1358,6 +1380,7 @@ void ASTPrinter::addGenericParams(const DeclRef<GenericDecl>& genericDeclRef) if (!first) sb << ", "; first = false; + ParamScope paramScope(&sb, outParamRanges); { ScopePart scopePart(this, Part::Type::GenericParamType); sb << "each "; @@ -1383,8 +1406,6 @@ void ASTPrinter::addDeclParams(const DeclRef<Decl>& declRef, List<Range<Index>>* bool first = true; for (auto paramDeclRef : getParameters(m_astBuilder, funcDeclRef)) { - auto rangeStart = sb.getLength(); - ParamDecl* paramDecl = paramDeclRef.getDecl(); auto paramType = getType(m_astBuilder, paramDeclRef); @@ -1393,9 +1414,10 @@ void ASTPrinter::addDeclParams(const DeclRef<Decl>& declRef, List<Range<Index>>* if (!first) { sb << ", "; - rangeStart += 2; } + ParamScope paramScope(&sb, outParamRange); + // Type part. { ScopePart scopePart(this, Part::Type::ParamType); @@ -1442,11 +1464,6 @@ void ASTPrinter::addDeclParams(const DeclRef<Decl>& declRef, List<Range<Index>>* sb << " = "; addExpr(paramDecl->initExpr); } - - auto rangeEnd = sb.getLength(); - - if (outParamRange) - outParamRange->add(makeRange<Index>(rangeStart, rangeEnd)); first = false; }; if (auto typePack = as<ConcreteTypePack>(paramType)) @@ -1467,11 +1484,7 @@ void ASTPrinter::addDeclParams(const DeclRef<Decl>& declRef, List<Range<Index>>* } else if (auto genericDeclRef = declRef.as<GenericDecl>()) { - addGenericParams(genericDeclRef); - - addDeclParams( - m_astBuilder->getMemberDeclRef(genericDeclRef, genericDeclRef.getDecl()->inner), - outParamRange); + addGenericParams(genericDeclRef, outParamRange); } else { |
