def expr_assign(self, args): if args[0]['value_type'] != args[1]['value_type'] and not Class.areConvertable(args[0]['value_type'],args[1]['value_type']): raise Exception("Types of Right Hand Side of Assign is not the same as Left Side" ) value_type = args[0]['value_type'] code = "# Left Hand Side Assign\n" code += args[0]['code'] code += "# Right Hand Side Assign\n" code += args[1]['code'] code += "# Assign Right Side to Left\n" code += "lw $t0 , 8($sp)\n" if value_type == 'double': code += "l.s $f0 , 4($sp)\n" code += "s.s $f0 , 0($t0)\n" code += "s.s $f0 , 8($sp)\n" else: code += "lw $t1 , 4($sp)\n" code += "sw $t1 , 0($t0)\n" code += "sw $t1 , 8($sp)\n" code += "addi $sp , $sp , 4\n" return {'code' : code, 'value_type' : value_type}