fix line number tracking
authorJacob Lifshay <programmerjake@gmail.com>
Thu, 28 Jul 2022 08:57:27 +0000 (01:57 -0700)
committerJacob Lifshay <programmerjake@gmail.com>
Thu, 28 Jul 2022 08:57:27 +0000 (01:57 -0700)
src/openpower/decoder/pseudo/functionreader.py
src/openpower/decoder/pseudo/lexer.py

index c393e168db515811f91161360de3045ac8d2e79e..b87cf53e654456de3acf240637b6047efe801f87 100644 (file)
@@ -46,6 +46,7 @@ class ISAFunctions:
         # all sections are mandatory so no need for a full LALR parser.
 
         l = lines.pop(0).rstrip()  # get first line
+        prefix_lines = 0
         while lines:
             print(l)
             # look for HTML comment, if starting, skip line.
@@ -56,11 +57,13 @@ class ISAFunctions:
             if l.startswith('<!--'):
                 # print ("skipping comment", l)
                 l = lines.pop(0).rstrip()  # get next line
+                prefix_lines += 1
                 continue
 
             # Ignore blank lines before the first #
             if len(l) == 0:
                 l = lines.pop(0).rstrip()  # get next line
+                prefix_lines += 1
                 continue
 
             # expect get heading
@@ -70,6 +73,7 @@ class ISAFunctions:
             # any lines not starting with space, ignore
             while True:
                 l = lines.pop(0).rstrip()
+                prefix_lines += 1
                 print ("examining", repr(l))
                 if l.startswith("    "):
                     break
@@ -77,7 +81,11 @@ class ISAFunctions:
                     continue
 
             # get pseudocode
-            li = [l[4:]] # first line detected with 4-space
+
+            # fix parser line numbers by prepending the right number of
+            # blank lines to the parser input
+            li = [""] * prefix_lines
+            li += [l[4:]]  # first line detected with 4-space
             while lines:
                 l = lines.pop(0).rstrip()
                 print ("examining", repr(l))
@@ -85,6 +93,7 @@ class ISAFunctions:
                     li.append(l)
                     continue
                 if l.startswith('<!--'):
+                    li.append("")
                     continue
                 assert l.startswith('    '), ("4spcs not found in line %s" % l)
                 l = l[4:]  # lose 4 spaces
index b420798b17533118a8440e91c077b38f2b68180f..861e56a3893476f0eaeed36c21f7c4f4725c4242 100644 (file)
@@ -164,6 +164,7 @@ def annoying_case_hack_filter(code):
         spc_count = count_spaces(l)
         nwhite = l[spc_count:]
         if len(nwhite) == 0:  # skip blank lines
+            res.append('')
             continue
         if nwhite.startswith("case") or nwhite.startswith("default"):
             #print ("case/default", nwhite, spc_count, prev_spc_count)
@@ -474,6 +475,7 @@ class IndentLexer(PowerLexer):
         s += "\n"
         self.lexer.paren_count = 0
         self.lexer.brack_count = 0
+        self.lexer.lineno = 1
         self.lexer.input(s)
         self.token_stream = filter(self.lexer, add_endmarker)