protected override CrawlSyntaxNode VisitBlock(BlockNode block) { string ns = block.FindNameSpace()?.Module ?? ""; BlockScope scope = new BlockScope(); List <CrawlSyntaxNode> children = new List <CrawlSyntaxNode>(); foreach (CrawlSyntaxNode child in block) { CrawlSyntaxNode afterVisit = Visit(child); ClassTypeDeclerationNode asClass = afterVisit as ClassTypeDeclerationNode; if (asClass != null) { CrawlConstructedType type = scope.AddClass(asClass, ns); children.Add(asClass.WithClassType(type)); } else { children.Add(afterVisit); } } return(block.Update(block.Interval, children, scope)); }