manually revert damaged caused by jacob to pseudocode parser
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 1 Oct 2023 10:12:55 +0000 (11:12 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 22 Dec 2023 19:26:21 +0000 (19:26 +0000)
the purpose of the parser database is to preserve precisely and exactly
the data that is read in, such that it is possible to re-write it
precisely and exactly

jacob had destroyed that extremely important requirement by making
unauthorized modifications to this fundamental low-level code.

jacobs task is now to review the reversions and re-implement the
otherwise extremely valuable enhancements, but this time in a
way that listens to the project leader and administrators

src/openpower/decoder/pseudo/pagereader.py

index 9bb234de2f6bcb8e65e0b154779a4fc1b52ce622..80a1a4c9b251ec9cd3d134c5ba53eceecb49ca57 100644 (file)
@@ -221,7 +221,6 @@ class ISA:
         # 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:
             if self.verbose:
                 print(l)
@@ -233,13 +232,11 @@ class ISA:
             if l.strip().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
@@ -248,27 +245,23 @@ class ISA:
 
             # whitespace expected
             l = lines.pop(0).strip()
-            prefix_lines += 1
             if self.verbose:
                 print(repr(l))
             assert len(l) == 0, ("blank line not found %s" % l)
 
             # Form expected
             l = lines.pop(0).strip()
-            prefix_lines += 1
             assert l.endswith('-Form'), ("line with -Form expected %s" % l)
             d['form'] = l.split('-')[0]
 
             # whitespace expected
             l = lines.pop(0).strip()
-            prefix_lines += 1
             assert len(l) == 0, ("blank line not found %s" % l)
 
             # get list of opcodes
             opcodes = []
             while True:
                 l = lines.pop(0).strip()
-                prefix_lines += 1
                 if len(l) == 0:
                     break
                 assert l.startswith('*'), ("* not found in line %s" % l)
@@ -295,12 +288,10 @@ class ISA:
 
             # "Pseudocode" expected
             l = lines.pop(0).rstrip()
-            prefix_lines += 1
             assert l.startswith("Pseudo-code:"), ("pseudocode found %s" % l)
 
             # whitespace expected
             l = lines.pop(0).strip()
-            prefix_lines += 1
             if self.verbose:
                 print(repr(l))
             assert len(l) == 0, ("blank line not found %s" % l)
@@ -308,17 +299,9 @@ class ISA:
             extra_uninit_regs = OrderedSet()
 
             # get pseudocode
-
-            # 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
+            li = []
             while True:
                 l = lines.pop(0).rstrip()
-                prefix_lines += 1
-                if len(l) == 0:
-                    li.append(l)
-                    break
                 re_match = re.fullmatch(r" *<!-- EXTRA_UNINIT_REGS:(.*)-->", l)
                 if re_match:
                     for i in re_match[1].split(' '):
@@ -327,8 +310,9 @@ class ISA:
                     li.append("")
                     continue
                 if l.strip().startswith('<!--'):
-                    li.append("")
                     continue
+                if len(l) == 0:
+                    break
                 assert l.startswith('    '), ("4spcs not found in line %s" % l)
                 l = l[4:]  # lose 4 spaces
                 li.append(l)
@@ -337,19 +321,16 @@ class ISA:
 
             # "Special Registers Altered" expected
             l = lines.pop(0).rstrip()
-            prefix_lines += 1
             assert l.startswith("Special"), ("special not found %s" % l)
 
             # whitespace expected
             l = lines.pop(0).strip()
-            prefix_lines += 1
             assert len(l) == 0, ("blank line not found %s" % l)
 
             # get special regs
             li = []
             while lines:
                 l = lines.pop(0).rstrip()
-                prefix_lines += 1
                 if len(l) == 0:
                     break
                 assert l.startswith('    '), ("4spcs not found in line %s" % l)
@@ -364,7 +345,6 @@ class ISA:
             # expect and drop whitespace and comments
             while lines:
                 l = lines.pop(0).rstrip()
-                prefix_lines += 1
                 if len(l) != 0 and not l.strip().startswith('<!--'):
                     break
 
@@ -389,8 +369,7 @@ class ISA:
         for k, v in self.instr.items():
             print("# %s %s" % (v.opcode, v.desc))
             print("Form: %s Regs: %s" % (v.form, v.regs))
-            pcode = filter(lambda x : len(x.strip()), v.pcode) # skip blank
-            print('\n'.join(map(lambda x: "    %s" % x, pcode)))
+            print('\n'.join(map(lambda x: "    %s" % x, v.pcode)))
             print("Specials")
             print('\n'.join(map(lambda x: "    %s" % x, v.sregs)))
             print()