Example #1
0
        protected LNode GenerateSetDecl(PGIntSet set, Symbol setName)
        {
            var ranges = set.InternalRangeList();
            IEnumerable <object> args;
            Symbol method;

            if (ranges.Count * 2 < set.SizeIgnoringInversion)               // use ranges
            {
                method = _NewSetOfRanges;
                args   = ranges.SelectMany(r => {
                    if (r.Lo >= 32 && r.Hi < 0xFFFC)
                    {
                        return new object[] { (char)r.Lo, (char)r.Hi }
                    }
                    ;
                    else
                    {
                        return new object[] { r.Lo, r.Hi }
                    };
                });
            }
            else
            {
                method = _NewSet;
                args   = set.IntegerSequence(false).Select(n =>
                                                           set.IsCharSet && n >= 32 && n < 0xFFFC ? (object)(char)n : (object)(int)n);
            }
            return
                (F.Attr(F.Id(S.Static), F.Id(S.Readonly),
                        F.Var(SetType, setName,
                              ApiCall(method, new RVList <LNode>(args.Select(a => F.Literal(a))), true))));
        }
		protected LNode GenerateSetDecl(PGIntSet set, Symbol setName)
		{
			var ranges = set.InternalRangeList();
			IEnumerable<object> args;
			Symbol method;
			if (ranges.Count * 2 < set.SizeIgnoringInversion) { // use ranges
				method = _NewSetOfRanges;
				args = ranges.SelectMany(r => {
					if (r.Lo >= 32 && r.Hi < 0xFFFC)
						return new object[] { (char)r.Lo, (char)r.Hi };
					else
						return new object[] { r.Lo, r.Hi };
				});
			} else {
				method = _NewSet;
				args = set.IntegerSequence(false).Select(n => 
					set.IsCharSet && n >= 32 && n < 0xFFFC ? (object)(char)n : (object)(int)n);
			}
			return
				F.Attr(F.Id(S.Static), F.Id(S.Readonly),
					F.Var(SetType, setName,
						ApiCall(method, new RVList<LNode>(args.Select(a => F.Literal(a))), true)));
		}