public int ParseVarDeclIteration(UntypedNode UNode, KToken TypeToken, ArrayList<KToken> TokenList, int BeginIdx, int EndIdx, int ParseOption) {
		int NextIdx = UNode.MatchSyntax(VarDeclName, "$Symbol", TokenList, BeginIdx, EndIdx, ParseOption);
		int SkipIdx = UNode.MatchKeyword(-1, "=", TokenList, NextIdx, EndIdx, AllowEmpty|AllowSkip);
		if(NextIdx < SkipIdx) {
			for(NextIdx = SkipIdx; NextIdx < EndIdx; NextIdx++) {
				KToken DelimToken = TokenList.get(NextIdx);
				if(DelimToken.EqualsText(",")) {
					UNode.MatchExpression(VarDeclValue, TokenList, SkipIdx, NextIdx, 0);
					UntypedNode NewNode = new UntypedNode(UNode.NodeNameSpace, TypeToken);
					UNode.LinkNode(NewNode);
					return ParseVarDeclIteration(NewNode, TypeToken, TokenList, NextIdx+1, EndIdx, 0);
				}
				if(DelimToken.ResolvedSyntax.IsDelim()) {
					UNode.MatchExpression(VarDeclValue, TokenList, SkipIdx, NextIdx, 0);
					return NextIdx+1;
				}
			}
		}
		if(!(SkipIdx < EndIdx)) return EndIdx;
		if(SkipIdx != -1 ) {
			KToken DelimToken = TokenList.get(SkipIdx);
			if(DelimToken.EqualsText(",")) {
				UNode.SetAtNode(VarDeclValue, UntypedNode.NewNullNode(UNode.NodeNameSpace, TokenList, SkipIdx));
				UntypedNode NewNode = new UntypedNode(UNode.NodeNameSpace, TypeToken);
				UNode.LinkNode(NewNode);
				return ParseVarDeclIteration(NewNode, TypeToken, TokenList, SkipIdx+1, EndIdx, 0);
			}
			if(DelimToken.ResolvedSyntax.IsDelim()) {
				UNode.SetAtNode(VarDeclValue, UntypedNode.NewNullNode(UNode.NodeNameSpace, TokenList, SkipIdx));
				return SkipIdx+1;
			}
			if(UntypedNode.IsAllowNoMatch(ParseOption)) {
				return NoMatch;
			}
			UNode.ReportError(DelimToken, "unexpected token: " + DelimToken.ParsedText, ParseOption);
			return EndIdx;
		}
		return NoMatch;
	}