public SymbolInfo(common_method_node value) { //_name_information_type=name_information_type.nit_common_method; _sym_info = value; _access_level = get_class_member_access_level(value); _symbol_kind = get_function_kind(value); }
public common_event(string name, type_node del_type, common_type_node cont_type, common_method_node add_method, common_method_node remove_method, common_method_node raise_method, field_access_level fal, polymorphic_state ps, location loc) { this._name = name; this.del_type = del_type; this._add_method = add_method; this._remove_method = remove_method; this._raise_method = raise_method; this._field_access_level = fal; this._polymorphic_state = ps; this._cont_type = cont_type; this._loc = loc; }
public static expression_node convert_delegate_to_return_value_type(location call_location, params expression_node[] parameters) { expression_node par = parameters[0]; internal_interface ii = par.type.get_internal_interface(internal_interface_kind.delegate_interface); delegate_internal_interface dii = (delegate_internal_interface)ii; common_method_node cmn = dii.invoke_method as common_method_node; if (cmn != null) { expression_node exp = new common_method_call(cmn, par, call_location); return(exp); } compiled_function_node cfn = dii.invoke_method as compiled_function_node; if (cfn != null) { expression_node exp = new compiled_function_call(cfn, par, call_location); return(exp); } return(null); }
private string get_delegate_name(common_type_node ctn) { common_method_node cmn = ctn.find_in_type(compiler_string_consts.invoke_method_name).sym_info as common_method_node; StringBuilder sb = new StringBuilder(); if (cmn.return_value_type != null) { sb.Append("@function"); } else { sb.Append("@procedure"); } if (cmn.parameters.Count > 0) { sb.Append('('); for (int i = 0; i < cmn.parameters.Count; i++) { sb.Append(get_name(cmn.parameters[i].type)); if (cmn.parameters[i].parameter_type == SemanticTree.parameter_type.var) { sb.Append('@'); } if (i < cmn.parameters.Count - 1) { sb.Append(','); } } sb.Append(')'); } if (cmn.return_value_type != null) { sb.Append(":" + get_name(cmn.return_value_type)); } return(sb.ToString()); }
/// <summary> /// Обрабатывает случай, когда левая часть присваивания имеет тип event. /// </summary> /// <returns>True - обработка прошла, иначе False.</returns> private bool ProcessAssignmentToEventIfPossible(assign _assign, addressed_expression to, expression_node from, location loc) { if ((to.semantic_node_type == semantic_node_type.static_event_reference) || (to.semantic_node_type == semantic_node_type.nonstatic_event_reference)) { statement_node event_assign = null; static_event_reference ser = (static_event_reference)to; expression_node right_del = convertion_data_and_alghoritms.convert_type(from, ser.en.delegate_type); switch (_assign.operator_type) { case Operators.AssignmentAddition: { if (to.semantic_node_type == semantic_node_type.static_event_reference) { event_assign = convertion_data_and_alghoritms.create_simple_function_call( ser.en.add_method, loc, right_del); } else { if (ser.en.semantic_node_type == semantic_node_type.compiled_event) { nonstatic_event_reference nser = (nonstatic_event_reference)ser; compiled_function_node cfn = (compiled_function_node)ser.en.add_method; compiled_function_call tmp_event_assign = new compiled_function_call(cfn, nser.obj, loc); tmp_event_assign.parameters.AddElement(right_del); event_assign = tmp_event_assign; } else if (ser.en.semantic_node_type == semantic_node_type.common_event) { nonstatic_event_reference nser = (nonstatic_event_reference)ser; common_method_node cfn = (common_method_node)ser.en.add_method; common_method_call tmp_event_assign = new common_method_call(cfn, nser.obj, loc); tmp_event_assign.parameters.AddElement(right_del); event_assign = tmp_event_assign; } } break; } case Operators.AssignmentSubtraction: { if (to.semantic_node_type == semantic_node_type.static_event_reference) { event_assign = convertion_data_and_alghoritms.create_simple_function_call( ser.en.remove_method, loc, right_del); } else { if (ser.en.semantic_node_type == semantic_node_type.compiled_event) { nonstatic_event_reference nser = (nonstatic_event_reference)ser; compiled_function_node cfn = (compiled_function_node)ser.en.remove_method; compiled_function_call tmp_event_assign = new compiled_function_call(cfn, nser.obj, loc); tmp_event_assign.parameters.AddElement(right_del); event_assign = tmp_event_assign; } else if (ser.en.semantic_node_type == semantic_node_type.common_event) { nonstatic_event_reference nser = (nonstatic_event_reference)ser; common_method_node cfn = (common_method_node)ser.en.remove_method; common_method_call tmp_event_assign = new common_method_call(cfn, nser.obj, loc); tmp_event_assign.parameters.AddElement(right_del); event_assign = tmp_event_assign; } } break; } default: { AddError(loc, "ASSIGN_TO_EVENT"); //throw new CanNotApplyThisOperationToEvent break; } } return_value(event_assign); return(true); } return(false); }
private void SaveMethod(common_method_node cfn) { if (!string.IsNullOrEmpty(cfn.documentation)) { if (!cfn.documentation.Trim(' ', '\t').StartsWith("<summary>")) { xtw.WriteStartElement("member"); xtw.WriteStartAttribute("name"); if (is_assembly) { if (!cfn.is_constructor) { xtw.WriteString("M:" + get_name(cfn.cont_type) + "." + cfn.name + GetGenericFlag(cfn) + GetParameters(cfn)); } else { xtw.WriteString("M:" + get_name(cfn.cont_type) + ".#ctor" + GetGenericFlag(cfn) + GetParameters(cfn)); } } else { if (!cfn.is_constructor) { xtw.WriteString("M:" + cfn.cont_type.name + "." + cfn.name + GetGenericFlag(cfn) + GetParameters(cfn)); } else { xtw.WriteString("M:" + cfn.cont_type.name + ".#ctor" + GetGenericFlag(cfn) + GetParameters(cfn)); } } xtw.WriteEndAttribute(); xtw.WriteStartElement("summary"); xtw.WriteString(cfn.documentation); xtw.WriteEndElement(); xtw.WriteEndElement(); } else { string descr = null; if (is_assembly) { if (!cfn.is_constructor) { descr = "M:" + get_name(cfn.cont_type) + "." + cfn.name + GetGenericFlag(cfn) + GetParameters(cfn); } else { descr = "M:" + get_name(cfn.cont_type) + ".#ctor" + GetGenericFlag(cfn) + GetParameters(cfn); } } else { if (!cfn.is_constructor) { descr = "M:" + cfn.cont_type.name + "." + cfn.name + GetGenericFlag(cfn) + GetParameters(cfn); } else { descr = "M:" + cfn.cont_type.name + ".#ctor" + GetGenericFlag(cfn) + GetParameters(cfn); } } string doc = string.Concat("<member name=\"" + descr + "\">", cfn.documentation, "</member>"); StringReader sr = new StringReader(doc); XmlReader xr = XmlTextReader.Create(sr); xr.Read(); xtw.WriteNode(xr.ReadSubtree(), false); sr.Close(); xr.Close(); } } }
private void VisitMethod(common_method_node cmn) { if (extended_mode) { VisitVariables(cmn.var_definition_nodes_list); } foreach (var_definition_node vdn in cmn.var_definition_nodes_list) { helper.AddVariable(vdn); } foreach (common_parameter prm in cmn.parameters) { helper.AddParameter(prm); } foreach (common_in_function_function_node nested in cmn.functions_nodes_list) { VisitNestedFunction(nested); } cur_func = cmn; VisitStatement(cmn.function_code); foreach (var_definition_node vdn2 in cmn.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 && !cmn.name.StartsWith("<") && !cmn.cont_type.IsInterface && cmn.polymorphic_state != SemanticTree.polymorphic_state.ps_virtual_abstract && cmn.return_value_type != null && !cmn.return_value_type.IsPointer && !cmn.is_constructor && cmn.return_value_type.type_special_kind != SemanticTree.type_special_kind.record && cmn.return_value_type.type_special_kind != SemanticTree.type_special_kind.array_wrapper && !helper.IsExternal(cmn)) { warns.Add(new UndefinedReturnValue(cmn.name, cmn.function_code.location)); } } 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 && !cmn.name.StartsWith("<") && !cmn.cont_type.IsInterface && cmn.polymorphic_state != SemanticTree.polymorphic_state.ps_virtual_abstract && cmn.return_value_type != null && !cmn.return_value_type.IsPointer && !cmn.is_constructor && cmn.return_value_type.type_special_kind != SemanticTree.type_special_kind.record && cmn.return_value_type.type_special_kind != SemanticTree.type_special_kind.array_wrapper && !helper.IsExternal(cmn)) { warns.Add(new UndefinedReturnValue(cmn.name, cmn.function_code.location)); } } if (vdn2.inital_value != null) { VisitExpression(vdn2.inital_value); } } foreach (common_parameter prm in cmn.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 cmn.var_definition_nodes_list) { VarInfo vi = helper.GetVariable(vdn); if (vdn.inital_value != null) { VisitExpression(vdn.inital_value); } } }
public common_constructor_call(common_method_node constructor_node, location loc) : base(constructor_node, loc) { }
public void set_raise_method(common_method_node meth) { _raise_method = meth; }
public void set_add_method(common_method_node meth) { _add_method = meth; }