class MissingTest(LibFcn): name = prefix + "missingTest" sig = Sig([{ "datum": P.WildRecord("D", {}) }, { "comparison": P.WildRecord( "T", { "field": P.EnumFields("F", "D"), "operator": P.String(), "value": P.Wildcard("V") }) }], P.Union([P.Null(), P.Boolean()])) errcodeBase = 32010 def __call__(self, state, scope, pos, paramTypes, datum, comparison): # newDatumTypeFields = [{"name": x["name"], "type": removeNull(x["type"])} if x["name"] == comparison["field"] else x for x in paramTypes[0]["fields"]] # newParamTypes = [dict(paramTypes[0], fields=newDatumTypeFields)] + paramTypes[1:] # return simpleComparison(newParamTypes, datum, comparison, False, state.parser) out = simpleComparison(paramTypes, datum, comparison, False, state.parser, self.errcodeBase + 1, self.errcodeBase + 0, self.name, pos) if out is True: return {"boolean": True} elif out is False: return {"boolean": False} else: return out
class SimpleTest(LibFcn): name = prefix + "simpleTest" sig = Sig([{ "datum": P.WildRecord("D", {}) }, { "comparison": P.WildRecord( "T", { "field": P.EnumFields("F", "D"), "operator": P.String(), "value": P.Wildcard("V") }) }], P.Boolean()) errcodeBase = 32000 def __call__(self, state, scope, pos, paramTypes, datum, comparison): return simpleComparison(paramTypes, datum, comparison, True, state.parser, self.errcodeBase + 1, self.errcodeBase + 0, self.name, pos)
class SimpleTree(LibFcn): name = prefix + "simpleTree" sig = Sig([{ "datum": P.WildRecord("D", {}) }, { "treeNode": P.WildRecord( "T", { "field": P.EnumFields("F", "D"), "operator": P.String(), "value": P.Wildcard("V"), "pass": P.Union([P.WildRecord("T", {}), P.Wildcard("S")]), "fail": P.Union([P.WildRecord("T", {}), P.Wildcard("S")]) }) }], P.Wildcard("S")) errcodeBase = 32060 def __call__(self, state, scope, pos, paramTypes, datum, treeNode): treeNodeTypeName = paramTypes[1]["name"] node = treeNode while True: if simpleComparison(paramTypes, datum, node, True, state.parser, self.errcodeBase + 1, self.errcodeBase + 0, self.name, pos): union = node["pass"] else: union = node["fail"] if union is None: node = None break else: (utype, node), = union.items() if utype != treeNodeTypeName: break return node