public string Visit(CIL_StrStr node) { var code_result = ""; var stringref = context_function[node.StrId]; var destiny = context_function[node.Result]; code_result += $"\t lw $t0 {stringref}\n"; code_result += $"\t lw $t0 0($t0)\n"; code_result += $"\t addi $t0 $t0 -8\n"; //I code_result += $"\t lw $t1 {context_function[node.I]}\n"; //L code_result += $"\t lw $t2 {context_function[node.L]}\n"; //L+I inside? code_result += $"\t lw $t3 {stringref}\n"; code_result += $"\t move $a0 $t1\n"; code_result += $"\t add $a0 $a0 $t2\n"; code_result += $"\t sle $t4, $a0, $t0\n"; code_result += $"\t la $a0 error_indexout\n"; code_result += $"\t beq $t4, $zero, exception\n"; code_result += $"\t lw $t0 {stringref}\n"; code_result += $"\t lw $t0 0($t0)\n"; code_result += $"\t lw $t3 {stringref}\n"; code_result += $"\t li $a0 0\n"; code_result += $"\t addi $a0 $t2 0\n"; //branch para la excepttion //copy the substring //allocate first 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"; 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 {stringref}\n"; code_result += $"\t lw $t1 {context_function[node.I]}\n"; code_result += $"\t addi $t0, $t0, 8\n"; //saltate el tipo y tamano code_result += $"\t addi $v0, $v0, 8\n"; //saltate el tipo y tamano //I code_result += $"\t lw $t1 {context_function[node.I]}\n"; //L code_result += $"\t lw $t2 {context_function[node.L]}\n"; code_result += $"\t add $t0, $t0, $t1\n";//parate en I code_result += $"\t .sub: \n"; code_result += $"\t beq $t2 $zero .endsub\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 .sub\n"; code_result += $"\t .endsub: \n"; return(code_result); }
public string Visit(CIL_StrStr node) { throw new NotImplementedException(); }