public override Expression Visit(Expression node) { if (node != null) { _currentExpr = new SnExpr { Expression = node, IsExecutable = true }; _expressions[node] = _currentExpr; var parent = _parentChain.Count == 0 ? null : _parentChain.Peek(); _currentExpr.Parent = parent; if (parent == null) { _rootExpr = _currentExpr; } else { parent.Children.Add(_currentExpr); } _parentChain.Push(_currentExpr); } var visited = base.Visit(node); if (node != null) { _parentChain.Pop(); } return(visited); }