Exemple #1
0
 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;
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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());
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
 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();
         }
     }
 }
Exemple #7
0
 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;
 }