math/mpgen, symm/multigen: Various minor cleanups.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 14 May 2014 20:35:21 +0000 (21:35 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 14 May 2014 20:36:18 +0000 (21:36 +0100)
Reordering some code; deleting pointless code; some very minor bug fixing.

Most notably, avoid a crash when reporting a row size mismatch, in
Relation.addrow.

math/mpgen
symm/multigen

index 9a66af1..de03c3e 100644 (file)
@@ -320,7 +320,7 @@ class GroupTable (object):
     st.nextmp = 0
     st.mpmap = { None: 'NO_MP', 0: 'ZERO_MP' }
     st.d = {}
-    me.st.name = None
+    st.name = None
     me._names = []
     me._defs = set()
     me._slotmap = dict([(s.name, s) for s in me.slots])
@@ -407,6 +407,8 @@ class EnumSlot (BaseSlot):
     except KeyError: stdout.write('0')
 
 class MPSlot (BaseSlot):
+  def set(me, st, value):
+    super(MPSlot, me).set(st, long(value, 0))
   def setup(me, st):
     super(MPSlot, me).setup(st)
     v = st.d.get(me)
@@ -414,8 +416,6 @@ class MPSlot (BaseSlot):
       write_limbs('v%d' % st.nextmp, v)
       st.mpmap[v] = mp_body('v%d' % st.nextmp, v)
       st.nextmp += 1
-  def set(me, st, value):
-    super(MPSlot, me).set(st, long(value, 0))
   def write(me, st):
     stdout.write(st.mpmap[st.d.get(me)])
 
index d532cda..20024bc 100755 (executable)
@@ -53,8 +53,7 @@ COLMAP = {}
 class Cursor (object):
   def __init__(me, rel):
     me._rel = rel
-    me._i = 0
-    me._row = rel[0]
+    me.reset()
   def step(me):
     me._i += 1
     if me._i >= len(me._rel):
@@ -107,7 +106,7 @@ class Relation (object):
   def addrow(me, row):
     if len(row) != len(me._head):
       die("mismatch: row `%s' doesn't match heading `%s'" %
-          (', '.join(row), ', '.join(head)))
+          (', '.join(row), ', '.join(me._head)))
     me._rows.append(row)
   def __len__(me):
     return len(me._rows)
@@ -124,7 +123,6 @@ def read_immediate(word):
 def read_file(spec):
   file, head = spec.split(':', 1)
   rel = Relation([c.strip() for c in head.split(',')])
-  cols = [c.strip() for c in head.split(',')]
   with open(file) as f:
     for line in f:
       line = line.strip()
@@ -172,16 +170,17 @@ class SequenceTemplate (BasicTemplate):
     if len(seq) == 1:
       return seq[0]
     else:
-      me = super(SequenceTemplate, cls).__new__(cls, seq = seq, **kw)
-      tt = []
-      cls = type(me)
-      for t in seq:
-        if isinstance(t, cls): tt += t._seq
-        else: tt.append(t)
-      me._seq = tt
-      return me
+      return super(SequenceTemplate, cls).__new__(cls, seq = seq, **kw)
+
   def __init__(me, seq, **kw):
     super(SequenceTemplate, me).__init__(**kw)
+    tt = []
+    cls = type(me)
+    for t in seq:
+      if isinstance(t, cls): tt += t._seq
+      else: tt.append(t)
+    me._seq = tt
+
   def relations(me):
     rr = set()
     for t in me._seq: rr.update(t.relations())
@@ -290,8 +289,8 @@ def parse_text(ps):
       col = m.group(1)
       try: rel, i = COLMAP[col]
       except KeyError: ps.error("unknown column `%s'" % col)
-      wholeop = None
       ops = m.lastindex >= 2 and m.group(2)
+      wholeop = None
       if ops:
         for opname in ops[1:].split(':'):
           try: op = OPMAP[opname]