Esempio n. 1
0
            public LNode GetWithFn(AdtParam part, bool isAbstract, Symbol virtualOverride, IEnumerable <AdtParam> allParts)
            {
                int totalParts = allParts.Count();
                var withField  = F.Id("With" + part.NameId.Name);

                var args = LNode.List();

                foreach (AdtParam otherPart in allParts)
                {
                    if (part == otherPart)
                    {
                        args.Add(F.Id("newValue"));
                    }
                    else
                    {
                        args.Add(otherPart.NameId);
                    }
                }

                var attrs = new VList <LNode>(F.Id(S.Public));

                if (isAbstract)
                {
                    attrs.Add(F.Id(S.Abstract));
                }
                if (virtualOverride != null && (!isAbstract || virtualOverride == S.Override))
                {
                    attrs.Add(F.Id(virtualOverride));
                }

                LNode method;
                LNode type    = part.Type;
                LNode retType = part.ContainingType.TypeNameWithoutAttrs;

                if (isAbstract)
                {
                    method = LNode.Call(LNode.List(attrs), CodeSymbols.Fn, LNode.List(retType, withField, LNode.Call(CodeSymbols.AltList, LNode.List(LNode.Call(LNode.List(part.OriginalDecl.Attrs), CodeSymbols.Var, LNode.List(type, LNode.Id((Symbol)"newValue")))))));
                }
                else
                {
                    method = LNode.Call(LNode.List(attrs), CodeSymbols.Fn, LNode.List(retType, withField, LNode.Call(CodeSymbols.AltList, LNode.List(LNode.Call(LNode.List(part.OriginalDecl.Attrs), CodeSymbols.Var, LNode.List(type, LNode.Id((Symbol)"newValue"))))), LNode.Call(CodeSymbols.Braces, LNode.List(LNode.Call(CodeSymbols.Return, LNode.List(LNode.Call(CodeSymbols.New, LNode.List(LNode.Call(TypeNameWithoutAttrs, LNode.List(args)))))))).SetStyle(NodeStyle.Statement)));
                }
                return(method);
            }
Esempio n. 2
0
			public LNode GetWithFn(AdtParam part, bool isAbstract, Symbol virtualOverride, IEnumerable<AdtParam> allParts)
			{
				LNode genericClassName = this.TypeName;
				int totalParts = allParts.Count();
				var withField = F.Id("With" + part.NameId.Name);
				var args = LNode.List();
				foreach (AdtParam otherPart in allParts) {
					if (part == otherPart)
						args.Add(F.Id("newValue"));
					else
						args.Add(otherPart.NameId);
				}
				var attrs = new RVList<LNode>(F.Id(S.Public));
				if (isAbstract)
					attrs.Add(F.Id(S.Abstract));
				if (virtualOverride != null && (!isAbstract || virtualOverride == S.Override))
					attrs.Add(F.Id(virtualOverride));
				LNode method;
				LNode type = part.Type;
				LNode retType = part.ContainingType.TypeName;
				if (isAbstract) {
					method = LNode.Call(new RVList<LNode>(attrs), CodeSymbols.Fn, LNode.List(retType, withField, LNode.Call(CodeSymbols.AltList, LNode.List(LNode.Call(new RVList<LNode>(part.OriginalDecl.Attrs), CodeSymbols.Var, LNode.List(type, LNode.Id((Symbol) "newValue")))))));
				} else {
					method = LNode.Call(new RVList<LNode>(attrs), CodeSymbols.Fn, LNode.List(retType, withField, LNode.Call(CodeSymbols.AltList, LNode.List(LNode.Call(new RVList<LNode>(part.OriginalDecl.Attrs), CodeSymbols.Var, LNode.List(type, LNode.Id((Symbol) "newValue"))))), LNode.Call(CodeSymbols.Braces, LNode.List(LNode.Call(CodeSymbols.Return, LNode.List(LNode.Call(CodeSymbols.New, LNode.List(LNode.Call(genericClassName, new RVList<LNode>(args)))))))).SetStyle(NodeStyle.Statement)));
				}
				return method;
			}