private String makeUnitIter (String typeName, String body, NestedParam p, NestedParam pv, NestedParam pk)
        {
            String head = makeUnitIterHead(p);
            String s = head + snippetGet(prefix + typeName + ".for");
            String iName = upperHeadChar(p.nameReal);
            String sizeType = getContext().findBuildInType(this.sizeType).getRedirect().getName();
            s = replace(s, Token.Body, body);
            s = replace(s, Token.SizeType, sizeType);
            s = replace(s, Token.Size, "len" + iName);
            s = replace(s, Token.Index, "i" + iName);
            s = replace(s, Token.Type, p.rule);
            s = replace(s, Token.RuleRight, ruleRight(p.rule));
            s = replace(s, Token.Name, p.name);
            s = replace(s, Token.NameReal, p.nameReal);
            s = replace(s, Token.Value, pv.name);
            if (pk != null)
            {
                s = replace(s, Token.Key, pk.name);
            }
            if (p.parent != null && p.parent.type != TypeID.VOID)
            {
                String specUpper = empty;
                if (p.parent.isRoot() && p.field.getUsePointer())
                {
                    specUpper = snippetGet(Key.POINTER_SPEC);
                }
                s = replace(s, Token.SpecUpper, specUpper);
                s = replace(s, Token.TypeUpper, p.parent.rule);
                s = replace(s, Token.NameUpper, p.parent.name);
                s = replace(s, Token.IndexUpper, "i" + upperHeadChar(p.parent.name));
            }
            return s;
        }