Пример #1
0
    def call(self, call: Call, depth=0) -> Any:
        if kequal(call, self.target):
            return self.replace_expr

        return Call(
            self.visit(call.function, depth + 1),
            list(map(lambda e: self.visit(e, depth + 1), call.args))
        )
Пример #2
0
    def unary_operator(self, call: UnaryOperator, depth=0) -> Any:
        if kequal(call, self.target):
            return self.replace_expr

        return UnaryOperator(
            self.visit(call.function, depth + 1),
            self.visit(call.args[0], depth + 1)
        )
Пример #3
0
    def compile_time(self):
        from kiwi.builtin import type_type
        from kiwi.operations.equality import kequal

        for arg in self.args:
            if not kequal(arg.type, type_type):
                return False
        return True
Пример #4
0
    def arrow(self, arrow: Arrow, depth=0) -> Any:
        if kequal(arrow, self.target):
            return self.replace_expr

        return Arrow(
            list(map(lambda e: self.visit(e, depth + 1), arrow.args)),
            self.visit(arrow.return_type, depth + 1)
        )
Пример #5
0
    def struct(self, struct: Struct, depth=0) -> Any:
        if kequal(struct, self.target):
            return self.replace_expr
        new_members = [] * len(struct.members)

        for i, v in enumerate(struct.members):
            new_members[i] = Variable(v.name, self.visit(v.type, depth + 1))

        return Struct(new_members)
Пример #6
0
    def union(self, union: Union, depth=0) -> Any:
        if kequal(union, self.target):
            return self.replace_expr

        new_members = [] * len(union.members)

        for i, v in enumerate(union.members):
            new_members[i] = Variable(v.name, self.visit(v.type, depth + 1))

        return Union(new_members)
Пример #7
0
 def builtin(self, builtin: Builtin, depth=0) -> Any:
     if kequal(builtin, self.target):
         return self.replace_expr
     return builtin
Пример #8
0
 def match(self, match: Match, depth=0) -> Any:
     if kequal(match, self.target):
         return self.replace_expr
     return match
Пример #9
0
 def block(self, block: Block, depth=0) -> Any:
     if kequal(block, self.target):
         return self.replace_expr
     return block
Пример #10
0
 def function(self, fun: Function, depth=0) -> Any:
     if kequal(fun, self.target):
         return self.replace_expr
     return fun
Пример #11
0
 def reference(self, ref: VariableRef, depth=0) -> Any:
     if kequal(ref, self.target):
         return self.replace_expr
     return ref
Пример #12
0
    def variable(self, var: Variable, depth=0) -> Any:
        if kequal(var, self.target):
            return self.replace_expr

        return Variable(var.name, self.visit(var.type, depth + 1))
Пример #13
0
 def bind(self, bind: Bind, depth=0) -> Any:
     if kequal(bind, self.target):
         return self.replace_expr
     return bind
Пример #14
0
 def value(self, val: Value, depth=0) -> Any:
     if kequal(val, self.target):
         return self.replace_expr
     return val
Пример #15
0
 def replace(self, expr):
     if kequal(expr, self.target):
         return self.replace_expr
     return expr