From ddbd3cf2ed573c895d7f9e3391e9e85925b2655c Mon Sep 17 00:00:00 2001 From: Sergeev Viktor Date: Mon, 9 Nov 2026 03:54:18 +0300 Subject: [PATCH] clear parser state --- src/main/java/com/dashjoin/jsonata/Parser.java | 4 ++++ src/test/java/com/dashjoin/jsonata/ParserTest.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/com/dashjoin/jsonata/Parser.java b/src/main/java/com/dashjoin/jsonata/Parser.java index 60b1ebf..f334399 100644 --- a/src/main/java/com/dashjoin/jsonata/Parser.java +++ b/src/main/java/com/dashjoin/jsonata/Parser.java @@ -1439,6 +1439,10 @@ Symbol objectParser(Symbol left) { public Symbol parse(String jsonata) { source = jsonata; + ancestry = new ArrayList<>(); + ancestorIndex = 0; + ancestorLabel = 0; + errors = new ArrayList<>(); // now invoke the tokenizer and the parser and return the syntax tree lexer = new Tokenizer(source); diff --git a/src/test/java/com/dashjoin/jsonata/ParserTest.java b/src/test/java/com/dashjoin/jsonata/ParserTest.java index ce51e57..c3b627f 100644 --- a/src/test/java/com/dashjoin/jsonata/ParserTest.java +++ b/src/test/java/com/dashjoin/jsonata/ParserTest.java @@ -1,6 +1,8 @@ package com.dashjoin.jsonata; import static com.dashjoin.jsonata.Jsonata.jsonata; + +import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -15,4 +17,14 @@ public void testUnsupportedEscapeSequence() { Assertions.assertThrows(JException.class, ()->jsonata("$substring('\\u")); Assertions.assertEquals("", jsonata("$substring('\\uDDDD', 1)").evaluate(null)); } + + @Test + public void testParserStateClear() { + Jsonata jsonata = jsonata("items.[name, % .currency]"); + List ancestry1 = jsonata.parser.ancestry; + Assertions.assertEquals(1, ancestry1.size()); + Jsonata jsonata2 = jsonata("items.[name, % .currency]"); + List ancestry2 = jsonata2.parser.ancestry; + Assertions.assertEquals(1, ancestry2.size()); + } }