From d839dac4155273b47f1c2385f63b46553a3a0fbb Mon Sep 17 00:00:00 2001
From: pompolic <pompolic@special-circumstanc.es>
Date: Tue, 31 Jan 2023 19:00:20 +0100
Subject: [PATCH] (Broken) Move parser_stack.pop() to return_from_h_do_parse()

---
 gdb-port/top-level-parse.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/gdb-port/top-level-parse.py b/gdb-port/top-level-parse.py
index 9339cc0..77df431 100644
--- a/gdb-port/top-level-parse.py
+++ b/gdb-port/top-level-parse.py
@@ -84,6 +84,9 @@ class TopLevelParse:
 	def return_from_h_do_parse(self, parse_state, parser, ret_val):
 		parser_stack = self.peek_parserstack()
 		parser_obj = self.parser_by_address(parser) # We don't try to make a new Parser() object here, because it has to have been done in the corresponding enter_h_do_parse() call
+		previous_parser = parser_stack.pop()
+		top_of_stack = parser_stack.peek()
+		assert top_of_stack == parser_obj, "parser function argument is different from parser on top of stack"
 		# The rationale for handling the "current" parser separately from stack:
 		# Parsers are only pushed on the stack in perform_lowlevel_parse, which doesn't get called when h_do_parse() gets the result from cache.
 		# If other backends are supported, this might change to pushing/popping the stack in h_do_parse()
@@ -136,9 +139,9 @@ class TopLevelParse:
 		return parser_obj
 
 	def return_from_perform_lowlevel_parse(self):
-		parser_stack = self.peek_parserstack()
-		parser_obj = parser_stack.pop()
-		# debug print here
+		#parser_stack = self.peek_parserstack()
+		#parser_obj = parser_stack.pop()
+		pass
 
 	def enter_h_arena_malloc_raw(self, alloc_size):
 		parser_obj = self.peek_parser()
-- 
GitLab