Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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("");
        }