Beispiel #1
0
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
Beispiel #2
0
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)
Beispiel #3
0
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