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
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