public bool Visit(AST_Call node) { bool solve = true; if (node.expr != null && !node.expr.Visit(this)) { solve = false; } if (!node.Args.Visit(this)) { solve = false; } return(solve); }
public string Visit(AST_Call node) { var typ = methodcontext.actual_type; //methodcontext.Staments.Add(new CIL_ExceptionCond("self", "0", "error_null")); var s = methodcontext.GenLocal("exp", true); List <string> parm = new List <string>(); parm.Add("self"); foreach (var item in node.Args.stament_list) { parm.Add(item.Visit(this)); } methodcontext.Staments.Add(new CIL_FunctionCall(node.ID.Id, new CIL_Params(parm), typ.Name, s, false, typ.Name)); return(s); }
public bool Visit(AST_Call node) { bool solve = true; if (!CurrType.HasMethod(node.id.Id)) { CurrErrorLoger.LogError(node.row, node.col, "El tipo " + CurrType.Name + " no posee el metodo " + node.id.Id); return(false); } var my_method = CurrType.GetMethod(node.id.Id); var invok_params = node.arg.stament_list; if (my_method.AttrParams.Count != invok_params.Count) { CurrErrorLoger.LogError(node.row, node.col, "No coinciden la cantidad de parametros"); return(false); } for (int i = 0; i < my_method.AttrParams.Count; i++) { if (!invok_params[i].Visit(this)) { return(false); } if (SemanticType.LCA(my_method.AttrParams[i].Type, invok_params[i].MyType).Name != my_method.AttrParams[i].Type.Name) { CurrErrorLoger.LogError(node.row, node.col, "No coinciden los tipos de los parametros"); return(false); } } node.MyType = my_method.ReturnType; return(true); }
public bool Visit(AST_Call node) { return(node.arg.Visit(this)); }
public bool Visit(AST_Call node) { throw new NotImplementedException(); }
public Base_Object_Value Visit(AST_Call node) { throw new NotImplementedException(); }