protected virtual void EnterContext <T>(INodeContext <T> context, bool valueNode = false) where T : Node, new() { var valueNodeExpected = false; var parent = _nodeStack.Peek(); if (parent is DOM.IValueNode) { valueNodeExpected = (parent as DOM.IValueNode).ValueType == ValueType.ObjectValue; } if (!(valueNode || valueNodeExpected)) { context.InitNode(_nodeStack.Count == 0 ? null : parent); } else { context.InitValueNode(_nodeStack.Count == 0 ? null : parent); } _nodeStack.Push(context.Node); }