From 607dbefc84944a02ea00c337d36bc45576a0ef6f Mon Sep 17 00:00:00 2001 From: Mayorov Alexander Date: Wed, 4 Jun 2025 02:32:26 +0300 Subject: [PATCH] fix: prevent duplicate descriptor handling --- .../main/kotlin/org/ucfs/descriptors/DescriptorsStorage.kt | 4 ++-- solver/src/main/kotlin/org/ucfs/parser/Gll.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/solver/src/main/kotlin/org/ucfs/descriptors/DescriptorsStorage.kt b/solver/src/main/kotlin/org/ucfs/descriptors/DescriptorsStorage.kt index 4e79bb00c..f540d8df7 100644 --- a/solver/src/main/kotlin/org/ucfs/descriptors/DescriptorsStorage.kt +++ b/solver/src/main/kotlin/org/ucfs/descriptors/DescriptorsStorage.kt @@ -26,8 +26,8 @@ open class DescriptorsStorage { return descriptorsToHandle.removeLast() } - fun addToHandled(descriptor: Descriptor) { - handledDescriptors.add(descriptor) + fun addToHandled(descriptor: Descriptor): Boolean { + return handledDescriptors.add(descriptor) } fun add(descriptor: Descriptor) { diff --git a/solver/src/main/kotlin/org/ucfs/parser/Gll.kt b/solver/src/main/kotlin/org/ucfs/parser/Gll.kt index 022935439..5d163a175 100644 --- a/solver/src/main/kotlin/org/ucfs/parser/Gll.kt +++ b/solver/src/main/kotlin/org/ucfs/parser/Gll.kt @@ -77,7 +77,7 @@ class Gll private constructor( * @param descriptor - descriptor to process */ override fun handleDescriptor(descriptor: Descriptor) { - ctx.descriptors.addToHandled(descriptor) + if (!ctx.descriptors.addToHandled(descriptor)) return if (descriptor.rsmState.isFinal) { val matchedRange = if (descriptor.sppfNode.type is EmptyType) { val node = getEpsilonRange(descriptor)