public void copyFrom(ParserRuleContext ctx) {
		this.parent = ctx.parent;
		this.invokingState = ctx.invokingState;

		this.start = ctx.start;
		this.stop = ctx.stop;

		// copy any error nodes to alt label node
		if ( ctx.children!=null ) {
			this.children = new ArrayList<>();
			// reset parent pointer for any error nodes
			for (ParseTree child : ctx.children) {
				if ( child instanceof ErrorNode ) {
					addChild((ErrorNode)child);
				}
			}
		}
	}
COPY a ctx (I'm deliberately not using copy constructor) to avoid
 confusion with creating node with parent. Does not copy children
 (except error leaves).

 This is used in the generated parser code to flip a generic XContext
 node for rule X to a YContext for alt label Y. In that sense, it is
 not really a generic copy function.

 If we do an error sync() at start of a rule, we might add error nodes
 to the generic XContext so this function must copy those nodes to
 the YContext as well else they are lost!
runtime/Java/src/org/antlr/v4/runtime/ParserRuleContext.java