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.
st.nextmp = 0
st.mpmap = { None: 'NO_MP', 0: 'ZERO_MP' }
st.d = {}
st.nextmp = 0
st.mpmap = { None: 'NO_MP', 0: 'ZERO_MP' }
st.d = {}
me._names = []
me._defs = set()
me._slotmap = dict([(s.name, s) for s in me.slots])
me._names = []
me._defs = set()
me._slotmap = dict([(s.name, s) for s in me.slots])
except KeyError: stdout.write('0')
class MPSlot (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)
def setup(me, st):
super(MPSlot, me).setup(st)
v = st.d.get(me)
write_limbs('v%d' % st.nextmp, v)
st.mpmap[v] = mp_body('v%d' % st.nextmp, v)
st.nextmp += 1
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)])
def write(me, st):
stdout.write(st.mpmap[st.d.get(me)])
class Cursor (object):
def __init__(me, rel):
me._rel = rel
class Cursor (object):
def __init__(me, rel):
me._rel = rel
- me._i = 0
- me._row = rel[0]
def step(me):
me._i += 1
if me._i >= len(me._rel):
def step(me):
me._i += 1
if me._i >= len(me._rel):
def addrow(me, row):
if len(row) != len(me._head):
die("mismatch: row `%s' doesn't match heading `%s'" %
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)
me._rows.append(row)
def __len__(me):
return len(me._rows)
def read_file(spec):
file, head = spec.split(':', 1)
rel = Relation([c.strip() for c in head.split(',')])
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()
with open(file) as f:
for line in f:
line = line.strip()
if len(seq) == 1:
return seq[0]
else:
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)
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())
def relations(me):
rr = set()
for t in me._seq: rr.update(t.relations())
col = m.group(1)
try: rel, i = COLMAP[col]
except KeyError: ps.error("unknown column `%s'" % col)
col = m.group(1)
try: rel, i = COLMAP[col]
except KeyError: ps.error("unknown column `%s'" % col)
ops = m.lastindex >= 2 and m.group(2)
ops = m.lastindex >= 2 and m.group(2)
if ops:
for opname in ops[1:].split(':'):
try: op = OPMAP[opname]
if ops:
for opname in ops[1:].split(':'):
try: op = OPMAP[opname]