Exemplo n.º 1
0
        /// <summary>
        /// Parses a C++ parameters.
        /// </summary>
        private void ParseParameters(XElement xElement, CppElement constructorOrMethodOrFunction)
        {
            int paramCount = 0;

            foreach (XElement parameter in xElement.Elements())
            {
                if (parameter.Name.LocalName != "Argument")
                {
                    continue;
                }

                CppParameter cppParameter  = new CppParameter();
                XAttribute   nameAttribute = parameter.Attribute("name");
                if (nameAttribute != null)
                {
                    cppParameter.Name = nameAttribute.Value;
                }

                if (string.IsNullOrEmpty(cppParameter.Name))
                {
                    cppParameter.Name = "arg" + paramCount;
                }

                // All parameters without any annotations are considerate as In
                if (cppParameter.Attribute == ParameterAttributeMapping.None)
                {
                    cppParameter.Attribute = ParameterAttributeMapping.In;
                }

                XAttribute typeAttribute = parameter.Attribute("type");
                if (typeAttribute != null)
                {
                    ResolveAndFillType(typeAttribute.Value, cppParameter);
                }

                constructorOrMethodOrFunction.Add(cppParameter);
                paramCount++;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Parses a C++ parameters.
        /// </summary>
        /// <param name="xElement">The gccxml <see cref="XElement"/> that describes a C++ parameter.</param>
        /// <param name="methodOrFunction">The method or function to populate.</param>
        private void ParseParameters(XElement xElement, CppElement methodOrFunction)
        {
            var paramCount = 0;

            foreach (var parameter in xElement.Elements())
            {
                if (parameter.Name.LocalName != "Argument")
                {
                    continue;
                }

                var cppParameter = new CppParameter {
                    Name = parameter.AttributeValue("name")
                };
                if (string.IsNullOrEmpty(cppParameter.Name))
                {
                    cppParameter.Name = "arg" + paramCount;
                }

                ParseAnnotations(parameter, cppParameter);

                // All parameters without any annotations are considerate as In
                if (cppParameter.Attribute == ParamAttribute.None)
                {
                    cppParameter.Attribute = ParamAttribute.In;
                }

                Logger.PushContext("Parameter:[{0}]", cppParameter.Name);

                ResolveAndFillType(parameter.AttributeValue("type"), cppParameter);
                methodOrFunction.Add(cppParameter);

                Logger.PopContext();
                paramCount++;
            }
        }