public string Visit(CIL_StrConcat node) { var code_result = ""; var string1_len = context_function[node.StrId]; var string2_len = context_function[node.StrId2]; //allocate the space in node.result code_result += $"\t lw $t0 {string1_len}\n"; code_result += $"\t lw $t0 0($t0)\n"; code_result += $"\t li $a0 0\n"; code_result += $"\t lw $t1 {string2_len}\n"; code_result += $"\t lw $t1 0($t1)\n"; code_result += $"\t add $a0 $t0 $t1\n"; code_result += $"\t addi $a0 $a0 -8\n"; code_result += $"\t li $v0 9\n"; code_result += $"\t syscall\n"; // allocate code_result += $"\t sw $v0 {context_function[node.Result]}\n"; //guarda la direccion de la memoria allocada code_result += $"\t la $t2 String\n"; code_result += $"\t sw $a0 0($v0)\n"; // save len code_result += $"\t sw $t2 4($v0)\n"; // save type code_result += $"\t lw $t0 {string1_len}\n"; code_result += $"\t lw $t1 {string2_len}\n"; code_result += $"\t lw $t2 0($t0)\n"; code_result += $"\t addi $t2 $t2 -8\n"; code_result += $"\t lw $t4 0($t1)\n"; code_result += $"\t addi $t4 $t4 -8\n"; code_result += $"\t addi $t0 $t0 8\n"; code_result += $"\t addi $t1 $t1 8\n"; code_result += $"\t addi $v0 $v0 8\n"; // en V0 = newstr, T0 = str1, T1 = str2, t2 = len(str1); code_result += $"\t .concat1: \n"; code_result += $"\t beq $t2 $zero .endconcat1\n"; code_result += $"\t lb $t3 0($t0)\n"; code_result += $"\t sb $t3 0($v0)\n"; code_result += $"\t addi $t2, $t2, -1\n"; code_result += $"\t addi $t0, 1\n"; code_result += $"\t addi $v0, 1\n"; code_result += $"\t j .concat1\n"; code_result += $"\t .endconcat1: \n"; code_result += $"\t move $t2 $t4\n"; code_result += $"\t .concat2: \n"; code_result += $"\t beq $t2 $zero .endconcat2\n"; code_result += $"\t lb $t3 0($t1)\n"; code_result += $"\t sb $t3 0($v0)\n"; code_result += $"\t addi $t2, $t2, -1\n"; code_result += $"\t addi $t1, 1\n"; code_result += $"\t addi $v0, 1\n"; code_result += $"\t j .concat2\n"; code_result += $"\t .endconcat2: \n"; return(code_result); }
public string Visit(CIL_StrConcat node) { throw new NotImplementedException(); }