def chk_bits(old, new, oldts, newts, ctx): # verify that all old bits are still in new, with the same positions for (name, pos) in oldts.bits: n = util.keysearch(name, 0, newts.bits) if n is None: err_add(ctx.errors, new.pos, 'CHK_DEF_REMOVED', ('bit', name, old.pos)) elif n[1] != pos: err_add(ctx.errors, new.pos, 'CHK_BIT_POSITION_CHANGED', (name, pos, n[1]))
def chk_enumeration(old, new, oldts, newts, ctx): # verify that all old enums are still in new, with the same values for (name, val) in oldts.enums: n = util.keysearch(name, 0, newts.enums) if n is None: err_add(ctx.errors, new.pos, 'CHK_DEF_REMOVED', ('enum', name, old.pos)) elif n[1] != val: err_add(ctx.errors, new.pos, 'CHK_ENUM_VALUE_CHANGED', (name, val, n[1]))
def chk_unique(old, new, ctx): # do not check the unique argument string; check the parsed unique instead # i_unique is not set in groupings; ignore if not hasattr(old, 'i_unique') or not hasattr(new, 'i_unique'): return oldunique = [] for (u, l) in old.i_unique: oldunique.append((u, [s.arg for s in l])) for (u, l) in new.i_unique: # check if this unique was present before o = util.keysearch([s.arg for s in l], 1, oldunique) if o is not None: oldunique.remove(o) else: err_def_added(u, ctx)