Esempio n. 1
0
 private string GetGenericFlag(common_function_node cfn)
 {
     if (!cfn.is_generic_function)
     {
         return("");
     }
     return("``" + cfn.get_generic_params_list().Count.ToString());
 }
Esempio n. 2
0
 public common_parameter(string name, parameter_type pt,
                         common_function_node cont_function, concrete_parameter_type conc_par_type, location loc) :
     base(name)
 {
     _par_type                = pt;
     _cont_function           = cont_function;
     _concrete_parameter_type = conc_par_type;
     _loc = loc;
 }
Esempio n. 3
0
 public common_parameter(string name, type_node tp, parameter_type pt,
                         common_function_node cont_function, concrete_parameter_type conc_par_type, expression_node default_value,
                         location loc) :
     base(name, tp)
 {
     _par_type                = pt;
     _cont_function           = cont_function;
     _concrete_parameter_type = conc_par_type;
     _default_value           = default_value;
     _loc = loc;
 }
Esempio n. 4
0
        /// <summary>
        /// Проводит проверки, общие для экземплярных деконструкторов и расширений
        /// </summary>
        /// <param name="deconstructor"></param>
        private void ExecuteCommonChecks(common_function_node deconstructor)
        {
            if (deconstructor.return_value_type != null)
            {
                AddError(deconstructor.loc, "DECONSTRUCTOR_SOULD_BE_A_PROCEDURE");
            }

            foreach (var parameter in deconstructor.parameters.Where(x => !IsSelfParameter(x)))
            {
                if (parameter.parameter_type != SemanticTree.parameter_type.var && parameter is common_parameter p)
                {
                    AddError(p.loc, "DECONSTRUCTION_PARAMETERS_SHOULD_HAVE_VAR_MODIFIER");
                }
            }
        }
Esempio n. 5
0
        private symbol_kind get_function_kind(function_node fn)
        {
            common_function_node cfn = fn as common_function_node;

            if (cfn != null)
            {
                return(get_function_kind(cfn, cfn.is_overload));
            }
            basic_function_node bfn = fn as basic_function_node;

            if (bfn != null)
            {
                return(get_function_kind(bfn, bfn.is_overload));
            }
            return(symbol_kind.sk_none);
        }
Esempio n. 6
0
        private string GetParameters(common_function_node cfn)
        {
            StringBuilder sb = new StringBuilder();

            if (cfn.parameters.Count > 0)
            {
                sb.Append("(");
                for (int i = 0; i < cfn.parameters.Count; i++)
                {
                    sb.Append(get_name(cfn.parameters[i].type));
                    if (cfn.parameters[i].parameter_type == SemanticTree.parameter_type.var)
                    {
                        sb.Append('@');
                    }
                    if (i < cfn.parameters.Count - 1)
                    {
                        sb.Append(",");
                    }
                }
                sb.Append(")");
            }
            return(sb.ToString());
        }
Esempio n. 7
0
 public CapturedVariablesTreeNodeProcedureScope(CapturedVariablesTreeNode parentNode, common_function_node function, int scopeNum, syntax_tree_node correspondingSyntaxTreeNode)
     : base(parentNode, scopeNum, correspondingSyntaxTreeNode)
 {
     FunctionNode = function;
 }
Esempio n. 8
0
 /// <summary>
 /// Конструктор класса.
 /// </summary>
 /// <param name="name">Имя константы.</param>
 /// <param name="cn">Значение константы.</param>
 /// <param name="loc">Расположение константы.</param>
 /// <param name="comprehensive_function">Функция, содержащая константу.</param>
 public function_constant_definition(string name, constant_node cn, location loc, common_function_node comprehensive_function) :
     base(name, cn, loc)
 {
     _comprehensive_function = comprehensive_function;
 }
Esempio n. 9
0
 public bool IsExternal(common_function_node cfn)
 {
     return(ext_funcs[cfn] != null);
 }
Esempio n. 10
0
 public void MarkAsExternal(common_function_node cfn)
 {
     ext_funcs[cfn] = cfn;
 }
Esempio n. 11
0
 private void VisitNestedFunction(common_in_function_function_node cnfn)
 {
     if (extended_mode)
     {
         VisitVariables(cnfn.var_definition_nodes_list);
     }
     foreach (var_definition_node vdn in cnfn.var_definition_nodes_list)
     {
         helper.AddVariable(vdn);
     }
     foreach (common_parameter prm in cnfn.parameters)
     {
         helper.AddParameter(prm);
     }
     foreach (common_in_function_function_node nested in cnfn.functions_nodes_list)
     {
         VisitNestedFunction(nested);
     }
     cur_func = cnfn;
     VisitStatement(cnfn.function_code);
     foreach (var_definition_node vdn2 in cnfn.var_definition_nodes_list)
     {
         if (vdn2 is local_variable)
         {
             local_variable vdn = vdn2 as local_variable;
             VarInfo        vi  = helper.GetVariable(vdn);
             if (vi.num_use == 0 && !vdn.is_special_name)
             {
                 warns.Add(new UnusedVariable(vdn.name, vdn.loc));
             }
             else if (vi.num_ass == 0 &&
                      vdn.is_ret_value &&
                      !cnfn.name.StartsWith("<") &&
                      cnfn.return_value_type.type_special_kind != SemanticTree.type_special_kind.record &&
                      !cnfn.return_value_type.IsPointer &&
                      cnfn.return_value_type.type_special_kind != SemanticTree.type_special_kind.array_wrapper &&
                      !helper.IsExternal(cnfn))
             {
                 warns.Add(new UndefinedReturnValue(cnfn.name, cnfn.function_code.location));
             }
             if (vi.num_ass > 0 && vi.act_num_use == 0 && !vdn.is_special_name)
             {
                 warns.Add(new AssignWithoutUsing(vdn.name, vi.last_ass_loc));
             }
         }
         else if (vdn2 is local_block_variable)
         {
             local_block_variable vdn = vdn2 as local_block_variable;
             VarInfo vi = helper.GetVariable(vdn);
             if (vi.num_use == 0 && !vdn.is_special_name)
             {
                 warns.Add(new UnusedVariable(vdn.name, vdn.loc));
             }
             else if (vi.num_ass == 0 &&
                      vdn.is_ret_value &&
                      !cnfn.name.StartsWith("<") &&
                      cnfn.return_value_type.type_special_kind != SemanticTree.type_special_kind.record &&
                      !cnfn.return_value_type.IsPointer &&
                      cnfn.return_value_type.type_special_kind != SemanticTree.type_special_kind.array_wrapper &&
                      !helper.IsExternal(cnfn))
             {
                 warns.Add(new UndefinedReturnValue(cnfn.name, cnfn.function_code.location));
             }
             if (vi.num_ass > 0 && vi.act_num_use == 0 && !vdn.is_special_name)
             {
                 warns.Add(new AssignWithoutUsing(vdn.name, vi.last_ass_loc));
             }
         }
         if (vdn2.inital_value != null)
         {
             VisitExpression(vdn2.inital_value);
         }
     }
     foreach (common_parameter prm in cnfn.parameters)
     {
         ParamInfo vi = helper.GetParameter(prm);
         if (prm.inital_value != null)
         {
             VisitExpression(prm.inital_value);
         }
         //if (vi.num_use == 0 && !prm.name.Contains("$")) warns.Add(new UnusedParameter(prm.name, prm.loc));
     }
     foreach (var_definition_node vdn in cnfn.var_definition_nodes_list)
     {
         VarInfo vi = helper.GetVariable(vdn);
         if (vdn.inital_value != null)
         {
             VisitExpression(vdn.inital_value);
         }
     }
 }
Esempio n. 12
0
 public local_variable(string name, type_node type, common_function_node cont_function, location loc) : base(name, type)
 {
     _cont_function = cont_function;
     _loc           = loc;
 }