private string GetGenericFlag(common_function_node cfn) { if (!cfn.is_generic_function) { return(""); } return("``" + cfn.get_generic_params_list().Count.ToString()); }
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; }
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; }
/// <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"); } } }
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); }
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()); }
public CapturedVariablesTreeNodeProcedureScope(CapturedVariablesTreeNode parentNode, common_function_node function, int scopeNum, syntax_tree_node correspondingSyntaxTreeNode) : base(parentNode, scopeNum, correspondingSyntaxTreeNode) { FunctionNode = function; }
/// <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; }
public bool IsExternal(common_function_node cfn) { return(ext_funcs[cfn] != null); }
public void MarkAsExternal(common_function_node cfn) { ext_funcs[cfn] = cfn; }
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); } } }
public local_variable(string name, type_node type, common_function_node cont_function, location loc) : base(name, type) { _cont_function = cont_function; _loc = loc; }