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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 public bool Visit(AST_Call node)
 {
     return(node.arg.Visit(this));
 }
Beispiel #5
0
 public bool Visit(AST_Call node)
 {
     throw new NotImplementedException();
 }
Beispiel #6
0
 public Base_Object_Value Visit(AST_Call node)
 {
     throw new NotImplementedException();
 }