Esempio n. 1
0
        public bool is_overload(ICommonNamespaceFunctionNode func)
        {
            int count = 1;

            if (func.comprehensive_namespace != null)
            {
                foreach (ICommonNamespaceFunctionNode f in func.comprehensive_namespace.functions)
                {
                    if (string.Compare(f.name, func.name, true) == 0 && f != func)
                    {
                        count++;
                    }
                }
            }
            return(count > 1);
        }
Esempio n. 2
0
 public int GetMethodIndex(ICommonNamespaceFunctionNode cmn)
 {
     if (cmn.comprehensive_namespace != null)
     {
         ICommonNamespaceFunctionNode[] meths = cmn.comprehensive_namespace.functions;
         int i = 1;
         foreach (ICommonNamespaceFunctionNode m in meths)
         {
             if (m == cmn)
             {
                 return(i);
             }
             else if (m.name == cmn.name)
             {
                 i++;
             }
         }
     }
     return(1);
 }
 public virtual void visit(ICommonNamespaceFunctionNode value)
 {
 }
Esempio n. 4
0
        //перевод заголовков функций
        private void ConvertFunctionHeaders(ICommonNamespaceFunctionNode[] funcs)
        {
            for (int i = 0; i < funcs.Length; i++)
            {
                IStatementsListNode sl = (IStatementsListNode)funcs[i].function_code;
                IStatementNode[] statements = sl.statements;
                if (statements.Length > 0 && statements[0] is IExternalStatementNode)
                {
                    //функция импортируется из dll
                    ICommonNamespaceFunctionNode func = funcs[i];
                    Type ret_type = null;
                    //получаем тип возвр. значения
                    if (func.return_value_type == null)
                        ret_type = null;//typeof(void);
                    else
                        ret_type = helper.GetTypeReference(funcs[i].return_value_type).tp;
                    Type[] param_types = GetParamTypes(funcs[i]);//получаем параметры процедуры

                    IExternalStatementNode esn = (IExternalStatementNode)statements[0];
                    string module_name = Tools.ReplaceAllKeys(esn.module_name, StandartDirectories);
                    MethodBuilder methb = cur_type.DefinePInvokeMethod(func.name, module_name, esn.name,
                                                                       MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.PinvokeImpl | MethodAttributes.HideBySig,
                                                                       CallingConventions.Standard, ret_type, param_types, CallingConvention.Winapi,
                                                                       CharSet.Ansi);//определяем PInvoke-метод
                    methb.SetImplementationFlags(MethodImplAttributes.PreserveSig);
                    //MethodBuilder methb = cur_type.DefinePInvokeMethod(func.name, esn.module_name, esn.name,
                    //MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.PinvokeImpl ,
                    //CallingConventions.Standard, ret_type, param_types, CallingConvention.Winapi,
                    //CharSet.None);//определяем PInvoke-метод
                    helper.AddMethod(funcs[i], methb);
                    IParameterNode[] parameters = funcs[i].parameters;
                    //определяем параметры с указанием имени
                    for (int j = 0; j < parameters.Length; j++)
                    {
                        ParameterAttributes pars = ParameterAttributes.None;
                        //if (func.parameters[j].parameter_type == parameter_type.var)
                        //  pars = ParameterAttributes.Out;
                        methb.DefineParameter(j + 1, pars, parameters[j].name);
                    }
                }
                else
                    if (statements.Length > 0 && statements[0] is IPInvokeStatementNode)
                    {
                        //функция импортируется из dll
                        ICommonNamespaceFunctionNode func = funcs[i];
                        Type ret_type = null;
                        //получаем тип возвр. значения
                        if (func.return_value_type == null)
                            ret_type = null;//typeof(void);
                        else
                            ret_type = helper.GetTypeReference(funcs[i].return_value_type).tp;
                        Type[] param_types = GetParamTypes(funcs[i]);//получаем параметры процедуры

                        MethodBuilder methb = cur_type.DefineMethod(func.name, MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.PinvokeImpl | MethodAttributes.HideBySig, ret_type, param_types);//определяем PInvoke-метод
                        methb.SetImplementationFlags(MethodImplAttributes.PreserveSig);
                        //MethodBuilder methb = cur_type.DefinePInvokeMethod(func.name, esn.module_name, esn.name,
                        //MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.PinvokeImpl ,
                        //CallingConventions.Standard, ret_type, param_types, CallingConvention.Winapi,
                        //CharSet.None);//определяем PInvoke-метод
                        helper.AddMethod(funcs[i], methb);
                        IParameterNode[] parameters = funcs[i].parameters;
                        //определяем параметры с указанием имени
                        for (int j = 0; j < parameters.Length; j++)
                        {
                            ParameterAttributes pars = ParameterAttributes.None;
                            //if (func.parameters[j].parameter_type == parameter_type.var)
                            //  pars = ParameterAttributes.Out;
                            methb.DefineParameter(j + 1, pars, parameters[j].name);
                        }
                    }
                    else
                        ConvertFunctionHeader(funcs[i]);
            }
            //(ssyy) 21.05.2008
            foreach (ICommonNamespaceFunctionNode ifn in funcs)
            {
                if (ifn.is_generic_function)
                {
                    ConvertTypeInstancesMembersInFunction(ifn);
                }
            }
        }
Esempio n. 5
0
        public List <ICommonNamespaceFunctionNode> GetOverloadsList(ICommonNamespaceNode ns, ICommonNamespaceFunctionNode f)
        {
            List <ICommonNamespaceFunctionNode> lst = new List <ICommonNamespaceFunctionNode>();

            foreach (ICommonNamespaceFunctionNode m in ns.functions)
            {
                if (string.Compare(m.name, f.name, true) == 0)
                {
                    lst.Add(m);
                }
            }
            return(lst);
        }
Esempio n. 6
0
		public virtual void visit(ICommonNamespaceFunctionNode value)
		{
		}
Esempio n. 7
0
        public void visit(ICommonNamespaceFunctionNode value)
        {
            string s = value.GetType().Name + ".";
            prepare_string_node(value.name, s + "name");
            //if (value.comprehensive_namespace != null)
            //{
            //    prepare_up_link_node(value.comprehensive_namespace.namespace_name.ToString(), s + "comprehensive_namespace", value.comprehensive_namespace);
                
            //    myTreeNode from = treeView.SelectedNode.Nodes[treeView.SelectedNode.Nodes.Count - 1] as myTreeNode;
            //    myTreeNode to = table_subnodes[value.comprehensive_namespace] as myTreeNode;
            //    table_for_up_links.Add(from, to);                
            //}


            prepare_base_node_collection(value.constants, s + "constants", "constants", value.constants.Length);
            prepare_node(value.function_code, s + "function_code");
            prepare_base_node_collection(value.functions_nodes, s + "function_nodes", "function_nodes", value.functions_nodes.Length);
            ////prepare_node(value.namespace_node, s + "namespace_node");
            ////prepare_up_link_node(value.namespace_node.namespace_name, s + "namespace_node", value.namespace_node);
            prepare_string_node(value.node_kind.ToString(), s + "node_kind");
            prepare_string_node(value.node_location_kind.ToString(), s + "node_location_kind");
            prepare_base_node_collection(value.parameters, s + "parametrs", "parametrs", value.parameters.Length);
            prepare_node(value.return_value_type, s + "return_value_type");
            prepare_node(value.return_variable, s + "return_variable");
            prepare_string_node(value.SpecialFunctionKind.ToString(), s + "SpecialFunctionKind");
            prepare_base_node_collection(value.var_definition_nodes, s + "var_definition_nodes", "var_definition_nodes", value.var_definition_nodes.Length);
        }
Esempio n. 8
0
        public void visit(ICommonNamespaceFunctionNode value)
        {
            StringBuilder bodyBlock = new StringBuilder("");
            StringBuilder parameters = new StringBuilder("");
            // увеличиваем отступ тела блока перед входом в блок

            // тело функции
            if (value.var_definition_nodes.Length != 0)
                ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyIncrement();
            foreach (ILocalVariableNode nodeVariable in value.var_definition_nodes)
            {
                nodeVariable.visit(this);
                bodyBlock.Append(ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBody);
                bodyBlock.Append(ISemanticNodeConverter.SourceTextBuilder.GetNodeFromStack());                
                bodyBlock.Append(";");
                bodyBlock.Append(System.Environment.NewLine);
                //bodyBlock.Append(ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBody);
            }
            // если блок не пуст - уменьшаем отступ
            if (bodyBlock.ToString() != "")
            {
                //ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(bodyBlock.ToString());
                ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyDecrement();
            }

            value.function_code.visit(this);
            // на стеке лежит тело функции
            //  
            string funcbody = ISemanticNodeConverter.SourceTextBuilder.GetNodeFromStack();
            bodyBlock.Append(funcbody);
            if (funcbody == "")
                ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack("%empty%");
            else
            {
                funcbody += System.Environment.NewLine;
                ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(funcbody);
            }
            
            foreach (IParameterNode nodeParameter in value.parameters)
            {
                nodeParameter.visit(this);
                parameters.Append(ISemanticNodeConverter.SourceTextBuilder.GetNodeFromStack());
                if (value.parameters[value.parameters.Length-1] != nodeParameter)
                    parameters.Append(", ");
            }
            // кладем на стек тело функции 
            ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(bodyBlock.ToString());
            // кладем на стек параметры ф-ции
            if (parameters.Length == 0)
                parameters.Append("%empty%");
            ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(parameters.ToString());                       

            ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeFunction("function", value));
        }
Esempio n. 9
0
		public static string possible_overload_symbol(ICommonNamespaceFunctionNode f)
		{
			if (builder.parser.is_overload(f))
				return "$"+builder.parser.GetMethodIndex(f);
			return "";
		}
Esempio n. 10
0
		public static string get_meth_name(ICommonNamespaceFunctionNode f)
		{
			return f.comprehensive_namespace.namespace_name + "." + f.name;
		}
Esempio n. 11
0
		public static bool can_write(ICommonNamespaceFunctionNode t)
		{
			return !(string.IsNullOrEmpty(t.Documentation) && !builder.options.ShowNoCommentedElements || t.name.Contains("$")
			         || user_doc_disabled(t.Documentation) || !Regex.Match(t.name,@"(\w)+", RegexOptions.ECMAScript).Success);
		}
Esempio n. 12
0
		public static string get_func_header(ICommonNamespaceFunctionNode f)
		{
			StringBuilder sb = new StringBuilder();
			string hdr = HelpUtils.extract_user_defined_header(f.Documentation);
			if (!string.IsNullOrEmpty(hdr))
			{
				sb.Append("<div>"+hdr+"</div>");
				return sb.ToString();
			}
			sb.Append("<div>");
			if (f.return_value_type == null)
				sb.Append(get_span_for_keyword("procedure")+" ");
			else
				sb.Append(get_span_for_keyword("function")+" ");
			sb.Append(get_span_for_identifier(f.name));
			sb.Append(get_generic_string(f.generic_params));
            if (f.parameters.Length > 0)
            {
                sb.Append('(');
                for (int i = 0; i < f.parameters.Length; i++)
                {
                    IParameterNode prm = f.parameters[i];
                    if (prm.parameter_type == parameter_type.var)
                        sb.Append(get_span_for_keyword("var") + " ");
                    else if (prm.is_params)
                        sb.Append(get_span_for_keyword("params") + " ");
                    sb.Append(get_span_for_param(prm.name));
                    sb.Append(" : ");
                    sb.Append(get_type_html_text(prm.type));
                    if (i < f.parameters.Length - 1)
                        sb.Append("; ");
                }
                sb.Append(')');
            }
			if (f.return_value_type != null)
				sb.Append(": "+get_type_html_text(f.return_value_type));
			sb.Append("</div>");
			return sb.ToString();
		}