public string Visit(CIL_SetAttr node) { string solve = ""; int val; if (int.TryParse(node.Result, out val)) { solve += $"\t li $t0, {val}\n"; solve += $"\t lw $t1, {context_function[node.Instanc]}\n"; solve += $"\t sw $t0, {offset_attrs[node.StaticType][node.Attr] + 8}($t1)\n"; } else { solve += $"\t lw $t0, {context_function[node.Result]}\n"; solve += $"\t lw $t1, {context_function[node.Instanc]}\n"; solve += $"\t sw $t0, {offset_attrs[node.StaticType][node.Attr] + 8}($t1)\n"; } return(solve); }
public string Visit(CIL_SetAttr node) { int idx = mem.GetValue(variableaddr.Peek()[node.Instanc]); idx++; int typedir = mem.GetValue(idx++); string type = GetTypeFromDir(typedir); idx += OffSetAttr[type][node.Attr]; // verify if result its a cte int s; if (!int.TryParse(node.Result, out s)) { s = mem.GetValue(variableaddr.Peek()[node.Result]); } mem.SetValue(idx, s); //PrintObject(idx); return(""); }