コード例 #1
0
def da_binOp_Eq_transform(insts: dal.InstGrp, loperand: object,
                          roperand: object) -> Snippet:

    s = Snippet()

    if not da_binOp_need_transformed(loperand, roperand):
        s.value = loperand == roperand
        return s
    else:
        l = insts.getFlag(insts.COMPARETOR_LEFT)
        if l is None:
            l = da_to_python_type(loperand)
        r = insts.getFlag(insts.COMPARETOR_RIGHT)
        if r is None:
            r = da_to_python_type(roperand)

        insts.setFlagWith(insts.COMPARETOR_LEFT, None)
        insts.setFlagWith(insts.COMPARETOR_RIGHT, None)

        ident = insts.new_da_var_ident()
        var = dal.Var(ident)

        eq_inst = dal.Equal(l, r, var)
        insts.addInst(eq_inst)
        s.addInst(var)

        ret = core.DBool()
        ret.compileInfo = 1
        ret.transInfo = TransformInfos()
        ret.transInfo.set_op_ret = var

        s.value = ret

    return s
コード例 #2
0
def da_define(insts: dal.InstGrp, identifier: str,
              snippet: Snippet) -> Snippet:
    """
    Note: This modifier should be only used while Variable's value is
    unpredictable.

    For example:

    def f():
        if expr:
            v = da_unwrap(da_define("v", da_call_transform(DInt(1))))
        else:
            v = da_unwrap(da_define("v", da_call_transform(DInt(2))))

        f(v)

    v is unknowk until expr is evaluated, so need to bind DInt(1) and DInt(2)'s
    Def Inst to the same variable.
    """
    # To check that is variable is already defined
    da_var_ident = insts.get_da_var(identifier)
    if da_var_ident is None:
        da_var_ident = insts.new_da_var_ident()
        insts.add_var_map(identifier, da_var_ident)

    if len(snippet.insts()) != 0:
        # Make sure it's not a python value
        insts.addInst(
            dal.Def(da_var_ident,
                    typ.cast(core.DType, snippet.value).value()))

    return snippet