public static List <string> SaveToRegister(IHolderCil x, IFunctionCil function, string dest) { List <string> result = new List <string>(); if (function.LocalCils.Contains(x)) //si y es una variable local { var index = function.localsDict[x.Name]; result.Add($"lw ${dest}, {index}($sp)"); } else if (function.ArgCils.Contains(x)) { //si y es un parametro //var index = function.ArgCils.ToList().FindIndex(i => i.Name.Equals(x.Name)); //result.Add($"move ${dest}, $a{index}"); var index = function.argsDict[x.Name]; result.Add($"lw ${dest}, {index}($sp)"); } else if (x == null) { result.Add($"li ${dest}, 0"); } else //si y es un valor { result.Add($"li ${dest}, " + x.Name); } return(result); }
public static List <string> AcomodarVariables(IHolderCil y, IFunctionCil function) { List <string> result = new List <string>(); result.AddRange(SaveToRegister(y, function, "t1")); return(result); }
public IVarCil GetValue(IHolderCil obj, IFunctionCil cilTree, ITypeCil typeCil) { var value = new LocalCil($"_value{cilTree.LocalCils.Count}"); cilTree.LocalCils.Add(value); cilTree.ThreeDirInses.Add(new GetAttrCil(value, obj, typeCil.GetAttributeCilsByCoolName("x"))); return(value); }
public void Visit_Runtime_Error_whit_Cond(IHolderCil valueCond, IFunctionCil cilTree, string sms) { var Continue = cilTree.CreateLabel($"Continue_"); cilTree.ThreeDirInses.Add(new IfGoto(valueCond, Continue)); var varStr = new LocalCil($"_value{cilTree.LocalCils.Count}"); cilTree.LocalCils.Add(varStr); var varDataString = new VarCil($"s{CilAst.dataStringCils.Count}"); CilAst.dataStringCils.Add(new DataStringCil(varDataString, new StringCil(sms))); cilTree.ThreeDirInses.Add(new LoadCil(varStr, varDataString)); cilTree.ThreeDirInses.Add(new Out_strCil(varStr)); cilTree.ThreeDirInses.Add(new Halt()); cilTree.ThreeDirInses.Add(new Label(Continue)); }
public VCallCil(IVarCil x, IHolderCil t, IHolderCil f) : base(x, t, f) { }
public ArgExprCil(IHolderCil x) { X = x; }
public IVarCil SetValue(IVarCil obj, IHolderCil value, IFunctionCil cilTree, ITypeCil typeCil) { cilTree.ThreeDirInses.Add(new SetAttrCil(obj, typeCil.GetAttributeCilsByCoolName("x"), value)); return(obj); }
protected UnaryCil(IVarCil x, IHolderCil y) : base(x) { Y = y; }
public SubStringCil(IVarCil x, IHolderCil y, IHolderCil i, IHolderCil l) : base(x, y, i) { L = l; }
public Copy(IVarCil x, IHolderCil y) : base(x, y) { }
public NegCil(IVarCil x, IHolderCil y) : base(x, y) { }
public LenghtCil(IVarCil x, IHolderCil y) : base(x, y) { }
public NotEqualCil(IVarCil x, IHolderCil y, IHolderCil z) : base(x, y, z) { }
public Minor_EqualCil(IVarCil x, IHolderCil y, IHolderCil z) : base(x, y, z) { }
public EqualStringCil(IVarCil x, IHolderCil y, IHolderCil z) : base(x, y, z) { }
public DivCil(IVarCil x, IHolderCil y, IHolderCil z) : base(x, y, z) { }
public MultCil(IVarCil x, IHolderCil y, IHolderCil z) : base(x, y, z) { }
public IfGoto(IHolderCil varCil, ILabelCil labelCil) : base(labelCil) { VarCil = varCil; }
public AssigCil(IVarCil x, IHolderCil y) : base(x, y) { }
public ReturnCil(IHolderCil x) { X = x; }
//public IVarCil Y { get; set; } public GetAttrCil(IVarCil x, IHolderCil y, IHolderCil b) : base(x, y, b) { }
public ConcatCil(IVarCil x, IHolderCil y, IHolderCil z) : base(x, y, z) { }
public IVarCil CreateABasicTypeWhitVal(IFunctionCil cilTree, ITypeCil typeCil, IHolderCil value) { return(SetValue(CreateABasicType(cilTree, typeCil), value, cilTree, typeCil)); }
public IsNotConformCil(IVarCil x, IHolderCil a, IHolderCil b) : base(x, a, b) { }
public TypeOf(IVarCil x, IHolderCil typeCil) : base(x, typeCil) { }
public Type_Name(IVarCil x, IHolderCil y) : base(x, y) { }
public DecArrayCil(IVarCil x, IHolderCil y) : base(x, y) { }
public SetAttrCil(IVarCil x, IHolderCil b, IHolderCil y) : base(x, b, y) { }
public BinaryVarCil(IVarCil x, IHolderCil y, IHolderCil z) : base(x, y) { Z = z; }