+class FieldBase:
+ def __init__(f, fname, stz, base, tnames, vl):
+ f.stz = stz
+ f.base = base
+ f.tnames = tnames
+ f.vl = vl
+ def words(f):
+ def distribute(vle):
+ print >>sys.stderr, 'X3b', vle
+ (lno, v) = vle
+ r = v.split()
+ print >>sys.stderr, 'X3b', r
+ r = map((lambda w: (lno, w)), r)
+ print >>sys.stderr, 'X3b', r
+ return r
+ print >>sys.stderr, 'X3',f.vl
+ l = map(distribute, f.vl)
+ print >>sys.stderr, 'X3',l
+ l = flatten(l)
+ print >>sys.stderr, 'X3',l
+ return l
+ def atmostone(f, default):
+ if not vl:
+ f.v = default
+ f.lno = -1
+ elif len(vl) == 1:
+ (f.lno, f.v) = vl[0]
+ else:
+ raise Unsupported(f.vl[1][0],
+ 'only one %s field allowed' % fn)
+ return f.v
+
+class FieldIgnore(FieldBase):
+ def parse(f): pass
+
+class Restriction:
+ def __init__(r,rname,base): pass
+
+class Restriction_rw_build_tree(Restriction): pass
+
+class Field_Restrictions(FieldBase):
+ def parse(f):
+ for wle in f.words():
+ (lno, rname) = wle
+ rname = rname.replace('-','_')
+ try: rclass = globals()['Restriction_'+rname]
+ except KeyError: raise Unsupported(lno,
+ 'unknown restriction %s' % rname)
+ r = rclass(rname, f.base)
+ f.base['restrictions'].append(r)
+
+class Field_Tests(FieldIgnore): pass
+
+class Field_Tests_directory(FieldBase):
+ def parse(f):
+ base['testsdir'] = oneonly(f)
+
+class Test:
+ def __init__(t, tname, base):
+ t.tname = tname
+ for k in base: setattr(t,k,base[k])
+