Beispiel #1
0
        public void AddMeta(ICilMetadata meta)
        {
            if (validMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default)
                ||
                invalidMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default))
            {
                return;
            }

            if (!meta.Validate(logging))
            {
                invalidMetadata.Add(meta);
                return;
            }

            validMetadata.Add(meta);

            foreach (var matcher in meta.GetMatchers())
            {
                AddMatcher(matcher);
            }

            foreach (var childMeta in meta.GetChildren())
            {
                this.AddMeta(childMeta);
            }
        }
Beispiel #2
0
        private static void GetMemberMetadata(ICilMetadata parent, List <ICilMetadata> result, MemberInfo member)
        {
            foreach (var attr in MetadataParser.EnumerateAndBind(parent, member))
            {
                result.Add(attr);
            }

            var method = member as MethodInfo;

            if (method != null)
            {
                foreach (var attr in MetadataParser.EnumerateAndBind(method.ReturnType))
                {
                    result.Add(attr);
                }

                foreach (var param in method.GetParameters())
                {
                    foreach (var attr in MetadataParser.EnumerateAndBind(param.ParameterType))
                    {
                        result.Add(attr);
                    }
                }
            }
        }
        public static IEnumerable<ICilMetadata> EnumerateAndBind(ICilMetadata parent, MemberInfo member)
        {
            var result = Attributes.All<ICilMetadata>(member);
            foreach (var m in result)
            {
                m.Bind(parent, member);
            }

            return result;
        }
Beispiel #4
0
        public static IEnumerable <ICilMetadata> EnumerateAndBind(ICilMetadata parent, MemberInfo member)
        {
            var result = Attributes.All <ICilMetadata>(member);

            foreach (var m in result)
            {
                m.Bind(parent, member);
            }

            return(result);
        }
Beispiel #5
0
        private IEnumerable <ICilMetadata> GetIndentedChildren(ICilMetadata parent)
        {
            int indent;

            if (!metaToIndent.TryGetValue(parent, out indent))
            {
                indent = 0;
            }

            ++indent;
            foreach (var child in parent.GetChildren())
            {
                metaToIndent[child] = indent;
                yield return(child);
            }
        }
        public void AddProduction(ICilMetadata meta, CilProduction parseRule)
        {
            if (parseRule.Owner == meta || productions.Any(r => r.Owner == meta && r.Equals(parseRule)))
            {
                return;
            }

            parseRule.Owner = meta;

            productions.Add(parseRule);

            // Provide new tokens
            foreach (var part in parseRule.Pattern)
            {
                this.AddSymbol(part);
            }

            this.AddSymbol(parseRule.Outcome);
        }
        private static void GetMemberMetadata(ICilMetadata parent, List<ICilMetadata> result, MemberInfo member)
        {
            foreach (var attr in MetadataParser.EnumerateAndBind(parent, member))
            {
                result.Add(attr);
            }

            var method = member as MethodInfo;
            if (method != null)
            {
                foreach (var attr in MetadataParser.EnumerateAndBind(method.ReturnType))
                {
                    result.Add(attr);
                }

                foreach (var param in method.GetParameters())
                    foreach (var attr in MetadataParser.EnumerateAndBind(param.ParameterType))
                    {
                        result.Add(attr);
                    }
            }
        }
        public static IEnumerable<ICilMetadata> GetTypeMetaChildren(ICilMetadata parent, Type type)
        {
            const BindingFlags flags = BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Instance;

            var result = new List<ICilMetadata>();
            foreach (var member in type.GetMembers(flags))
            {
                GetMemberMetadata(parent, result, member);
            }

            if (type.BaseType != null)
            {
                result.AddRange(EnumerateAndBind(parent, type.BaseType));
            }

            result.AddRange(
                type
                    .GetInterfaces()
                    .SelectMany(intf => MetadataParser.EnumerateAndBind(parent, intf)));

            return result;
        }
Beispiel #9
0
        public static IEnumerable <ICilMetadata> GetTypeMetaChildren(ICilMetadata parent, Type type)
        {
            const BindingFlags flags = BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Instance;

            var result = new List <ICilMetadata>();

            foreach (var member in type.GetMembers(flags))
            {
                GetMemberMetadata(parent, result, member);
            }

            if (type.BaseType != null)
            {
                result.AddRange(EnumerateAndBind(parent, type.BaseType));
            }

            result.AddRange(
                type
                .GetInterfaces()
                .SelectMany(intf => MetadataParser.EnumerateAndBind(parent, intf)));

            return(result);
        }
        public void AddMeta(ICilMetadata meta)
        {
            if (validMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default)
                ||
                invalidMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default))
            {
                return;
            }

            if (!meta.Validate(logging))
            {
                invalidMetadata.Add(meta);
                return;
            }

            validMetadata.Add(meta);

            // Provide new explicitly used tokens
            foreach (var token in meta.GetSymbolsInCategory(SymbolCategory.ExplicitlyUsed))
            {
                this.AddSymbol(token);
            }

            // Provide new rules
            var newParseRules = meta.GetProductions(EnumerateSnapshot(symbols));

            foreach (var parseRule in newParseRules)
            {
                this.AddProduction(meta, parseRule);
            }

            // Provide new meta children
            foreach (var childMeta in meta.GetChildren())
            {
                this.AddMeta(childMeta);
            }
        }
 public virtual void Bind(ICilMetadata parent, MemberInfo member)
 {
     this.Parent = parent;
     this.Member = member;
 }
 void ICilMetadata.Bind(ICilMetadata parent, MemberInfo member)
 {
     this.parent = parent;
     this.type   = (Type)member;
 }
 public void Bind(ICilMetadata parent, System.Reflection.MemberInfo member)
 {
 }
 void ICilMetadata.Bind(ICilMetadata parent, MemberInfo member)
 {
     this.parent = parent;
     this.type = (Type)member;
 }
        public void AddMeta(ICilMetadata meta)
        {
            if (validMetadata.Contains(meta, PropertyComparer<ICilMetadata>.Default)
                ||
                invalidMetadata.Contains(meta, PropertyComparer<ICilMetadata>.Default))
            {
                return;
            }

            if (!meta.Validate(logging))
            {
                invalidMetadata.Add(meta);
                return;
            }

            validMetadata.Add(meta);

            foreach (var matcher in meta.GetMatchers())
            {
                AddMatcher(matcher);
            }

            foreach (var childMeta in meta.GetChildren())
            {
                this.AddMeta(childMeta);
            }
        }
 public void Bind(ICilMetadata parent, System.Reflection.MemberInfo member)
 {
 }
 public virtual void Bind(ICilMetadata parent, MemberInfo member)
 {
     this.Parent = parent;
     this.Member = member;
 }