1 using System;
  
     2 using System.Collections;
  
     3 using System.Windows;
  
     4 using System.Lex;
  
     5 using Cm.Ast;
  
     6 
  
     7 class SyntaxTreeBuilder : Visitor
  
     8 {
  
     9     public nothrow SyntaxTreeBuilder(CmajorLexer& lexer_) : lexer(lexer_)
  
    10     {
  
    11     }
  
    12     public TreeViewNode* GetRoot() const
  
    13     {
  
    14         return node.Release();
  
    15     }
  
    16     public HashMap<int, TreeViewNode*> GetIndexNodeMap()
  
    17     {
  
    18         return Rvalue(indexNodeMap);
  
    19     }
  
    20     public HashMap<TreeViewNode*, int> GetNodeIndexMap()
  
    21     {
  
    22         return Rvalue(nodeIndexMap);
  
    23     }
  
    24     public override void Visit(BoolNode& boolNode)
  
    25     {
  
    26         node.Reset(new TreeViewNode(typename(BoolNode)));
  
    27         node->SetData(&boolNode);
  
    28         Span span = boolNode.GetSpan();
  
    29         lexer.ConvertExternal(span);
  
    30         int index = span.start;
  
    31         indexNodeMap[index] = node.Get();
  
    32         nodeIndexMap[node.Get()] = index;
  
    33     }
  
    34     public override void Visit(SByteNode& sbyteNode)
  
    35     {
  
    36         node.Reset(new TreeViewNode(typename(SByteNode)));
  
    37         node->SetData(&sbyteNode);
  
    38         Span span = sbyteNode.GetSpan();
  
    39         lexer.ConvertExternal(span);
  
    40         int index = span.start;
  
    41         indexNodeMap[index] = node.Get();
  
    42         nodeIndexMap[node.Get()] = index;
  
    43     }
  
    44     public override void Visit(ByteNode& byteNode)
  
    45     {
  
    46         node.Reset(new TreeViewNode(typename(ByteNode)));
  
    47         node->SetData(&byteNode);
  
    48         Span span = byteNode.GetSpan();
  
    49         lexer.ConvertExternal(span);
  
    50         int index = span.start;
  
    51         indexNodeMap[index] = node.Get();
  
    52         nodeIndexMap[node.Get()] = index;
  
    53     }
  
    54     public override void Visit(ShortNode& shortNode)
  
    55     {
  
    56         node.Reset(new TreeViewNode(typename(ShortNode)));
  
    57         node->SetData(&shortNode);
  
    58         Span span = shortNode.GetSpan();
  
    59         lexer.ConvertExternal(span);
  
    60         int index = span.start;
  
    61         indexNodeMap[index] = node.Get();
  
    62         nodeIndexMap[node.Get()] = index;
  
    63     }
  
    64     public override void Visit(UShortNode& ushortNode)
  
    65     {
  
    66         node.Reset(new TreeViewNode(typename(UShortNode)));
  
    67         node->SetData(&ushortNode);
  
    68         Span span = ushortNode.GetSpan();
  
    69         lexer.ConvertExternal(span);
  
    70         int index = span.start;
  
    71         indexNodeMap[index] = node.Get();
  
    72         nodeIndexMap[node.Get()] = index;
  
    73     }
  
    74     public override void Visit(IntNode& intNode)
  
    75     {
  
    76         node.Reset(new TreeViewNode(typename(IntNode)));
  
    77         node->SetData(&intNode);
  
    78         Span span = intNode.GetSpan();
  
    79         lexer.ConvertExternal(span);
  
    80         int index = span.start;
  
    81         indexNodeMap[index] = node.Get();
  
    82         nodeIndexMap[node.Get()] = index;
  
    83     }
  
    84     public override void Visit(UIntNode& uintNode)
  
    85     {
  
    86         node.Reset(new TreeViewNode(typename(UIntNode)));
  
    87         node->SetData(&uintNode);
  
    88         Span span = uintNode.GetSpan();
  
    89         lexer.ConvertExternal(span);
  
    90         int index = span.start;
  
    91         indexNodeMap[index] = node.Get();
  
    92         nodeIndexMap[node.Get()] = index;
  
    93     }
  
    94     public override void Visit(LongNode& longNode)
  
    95     {
  
    96         node.Reset(new TreeViewNode(typename(LongNode)));
  
    97         node->SetData(&longNode);
  
    98         Span span = longNode.GetSpan();
  
    99         lexer.ConvertExternal(span);
  
   100         int index = span.start;
  
   101         indexNodeMap[index] = node.Get();
  
   102         nodeIndexMap[node.Get()] = index;
  
   103     }
  
   104     public override void Visit(ULongNode& ulongNode)
  
   105     {
  
   106         node.Reset(new TreeViewNode(typename(ULongNode)));
  
   107         node->SetData(&ulongNode);
  
   108         Span span = ulongNode.GetSpan();
  
   109         lexer.ConvertExternal(span);
  
   110         int index = span.start;
  
   111         indexNodeMap[index] = node.Get();
  
   112         nodeIndexMap[node.Get()] = index;
  
   113     }
  
   114     public override void Visit(FloatNode& floatNode)
  
   115     {
  
   116         node.Reset(new TreeViewNode(typename(FloatNode)));
  
   117         node->SetData(&floatNode);
  
   118         Span span = floatNode.GetSpan();
  
   119         lexer.ConvertExternal(span);
  
   120         int index = span.start;
  
   121         indexNodeMap[index] = node.Get();
  
   122         nodeIndexMap[node.Get()] = index;
  
   123     }
  
   124     public override void Visit(DoubleNode& doubleNode)
  
   125     {
  
   126         node.Reset(new TreeViewNode(typename(DoubleNode)));
  
   127         node->SetData(&doubleNode);
  
   128         Span span = doubleNode.GetSpan();
  
   129         lexer.ConvertExternal(span);
  
   130         int index = span.start;
  
   131         indexNodeMap[index] = node.Get();
  
   132         nodeIndexMap[node.Get()] = index;
  
   133     }
  
   134     public override void Visit(CharNode& charNode)
  
   135     {
  
   136         node.Reset(new TreeViewNode(typename(CharNode)));
  
   137         node->SetData(&charNode);
  
   138         Span span = charNode.GetSpan();
  
   139         lexer.ConvertExternal(span);
  
   140         int index = span.start;
  
   141         indexNodeMap[index] = node.Get();
  
   142         nodeIndexMap[node.Get()] = index;
  
   143     }
  
   144     public override void Visit(WCharNode& wcharNode)
  
   145     {
  
   146         node.Reset(new TreeViewNode(typename(WCharNode)));
  
   147         node->SetData(&wcharNode);
  
   148         Span span = wcharNode.GetSpan();
  
   149         lexer.ConvertExternal(span);
  
   150         int index = span.start;
  
   151         indexNodeMap[index] = node.Get();
  
   152         nodeIndexMap[node.Get()] = index;
  
   153     }
  
   154     public override void Visit(UCharNode& ucharNode)
  
   155     {
  
   156         node.Reset(new TreeViewNode(typename(UCharNode)));
  
   157         node->SetData(&ucharNode);
  
   158         Span span = ucharNode.GetSpan();
  
   159         lexer.ConvertExternal(span);
  
   160         int index = span.start;
  
   161         indexNodeMap[index] = node.Get();
  
   162         nodeIndexMap[node.Get()] = index;
  
   163     }
  
   164     public override void Visit(VoidNode& voidNode)
  
   165     {
  
   166         node.Reset(new TreeViewNode(typename(VoidNode)));
  
   167         node->SetData(&voidNode);
  
   168         Span span = voidNode.GetSpan();
  
   169         lexer.ConvertExternal(span);
  
   170         int index = span.start;
  
   171         indexNodeMap[index] = node.Get();
  
   172         nodeIndexMap[node.Get()] = index;
  
   173     }
  
   174     public override void Visit(BooleanLiteralNode& booleanLiteralNode)
  
   175     {
  
   176         node.Reset(new TreeViewNode(typename(BooleanLiteralNode)));
  
   177         node->SetData(&booleanLiteralNode);
  
   178         Span span = booleanLiteralNode.GetSpan();
  
   179         lexer.ConvertExternal(span);
  
   180         int index = span.start;
  
   181         indexNodeMap[index] = node.Get();
  
   182         nodeIndexMap[node.Get()] = index;
  
   183     }
  
   184     public override void Visit(SByteLiteralNode& sbyteLiteralNode)
  
   185     {
  
   186         node.Reset(new TreeViewNode(typename(SByteLiteralNode)));
  
   187         node->SetData(&sbyteLiteralNode);
  
   188         Span span = sbyteLiteralNode.GetSpan();
  
   189         lexer.ConvertExternal(span);
  
   190         int index = span.start;
  
   191         indexNodeMap[index] = node.Get();
  
   192         nodeIndexMap[node.Get()] = index;
  
   193     }
  
   194     public override void Visit(ByteLiteralNode& byteLiteralNode)
  
   195     {
  
   196         node.Reset(new TreeViewNode(typename(ByteLiteralNode)));
  
   197         node->SetData(&byteLiteralNode);
  
   198         Span span = byteLiteralNode.GetSpan();
  
   199         lexer.ConvertExternal(span);
  
   200         int index = span.start;
  
   201         indexNodeMap[index] = node.Get();
  
   202         nodeIndexMap[node.Get()] = index;
  
   203     }
  
   204     public override void Visit(ShortLiteralNode& shortLiteralNode)
  
   205     {
  
   206         node.Reset(new TreeViewNode(typename(ShortLiteralNode)));
  
   207         node->SetData(&shortLiteralNode);
  
   208         Span span = shortLiteralNode.GetSpan();
  
   209         lexer.ConvertExternal(span);
  
   210         int index = span.start;
  
   211         indexNodeMap[index] = node.Get();
  
   212         nodeIndexMap[node.Get()] = index;
  
   213     }
  
   214     public override void Visit(UShortLiteralNode& ushortLiteralNode)
  
   215     {
  
   216         node.Reset(new TreeViewNode(typename(UShortLiteralNode)));
  
   217         node->SetData(&ushortLiteralNode);
  
   218         Span span = ushortLiteralNode.GetSpan();
  
   219         lexer.ConvertExternal(span);
  
   220         int index = span.start;
  
   221         indexNodeMap[index] = node.Get();
  
   222         nodeIndexMap[node.Get()] = index;
  
   223     }
  
   224     public override void Visit(IntLiteralNode& intLiteralNode)
  
   225     {
  
   226         node.Reset(new TreeViewNode(typename(IntLiteralNode)));
  
   227         node->SetData(&intLiteralNode);
  
   228         Span span = intLiteralNode.GetSpan();
  
   229         lexer.ConvertExternal(span);
  
   230         int index = span.start;
  
   231         indexNodeMap[index] = node.Get();
  
   232         nodeIndexMap[node.Get()] = index;
  
   233     }
  
   234     public override void Visit(UIntLiteralNode& uintLiteralNode)
  
   235     {
  
   236         node.Reset(new TreeViewNode(typename(UIntLiteralNode)));
  
   237         node->SetData(&uintLiteralNode);
  
   238         Span span = uintLiteralNode.GetSpan();
  
   239         lexer.ConvertExternal(span);
  
   240         int index = span.start;
  
   241         indexNodeMap[index] = node.Get();
  
   242         nodeIndexMap[node.Get()] = index;
  
   243     }
  
   244     public override void Visit(LongLiteralNode& longLiteralNode)
  
   245     {
  
   246         node.Reset(new TreeViewNode(typename(LongLiteralNode)));
  
   247         node->SetData(&longLiteralNode);
  
   248         Span span = longLiteralNode.GetSpan();
  
   249         lexer.ConvertExternal(span);
  
   250         int index = span.start;
  
   251         indexNodeMap[index] = node.Get();
  
   252         nodeIndexMap[node.Get()] = index;
  
   253     }
  
   254     public override void Visit(ULongLiteralNode& ulongLiteralNode)
  
   255     {
  
   256         node.Reset(new TreeViewNode(typename(ULongLiteralNode)));
  
   257         node->SetData(&ulongLiteralNode);
  
   258         Span span = ulongLiteralNode.GetSpan();
  
   259         lexer.ConvertExternal(span);
  
   260         int index = span.start;
  
   261         indexNodeMap[index] = node.Get();
  
   262         nodeIndexMap[node.Get()] = index;
  
   263     }
  
   264     public override void Visit(FloatLiteralNode& floatLiteralNode)
  
   265     {
  
   266         node.Reset(new TreeViewNode(typename(FloatLiteralNode)));
  
   267         node->SetData(&floatLiteralNode);
  
   268         Span span = floatLiteralNode.GetSpan();
  
   269         lexer.ConvertExternal(span);
  
   270         int index = span.start;
  
   271         indexNodeMap[index] = node.Get();
  
   272         nodeIndexMap[node.Get()] = index;
  
   273     }
  
   274     public override void Visit(DoubleLiteralNode& doubleLiteralNode)
  
   275     {
  
   276         node.Reset(new TreeViewNode(typename(DoubleLiteralNode)));
  
   277         node->SetData(&doubleLiteralNode);
  
   278         Span span = doubleLiteralNode.GetSpan();
  
   279         lexer.ConvertExternal(span);
  
   280         int index = span.start;
  
   281         indexNodeMap[index] = node.Get();
  
   282         nodeIndexMap[node.Get()] = index;
  
   283     }
  
   284     public override void Visit(CharLiteralNode& charLiteralNode)
  
   285     {
  
   286         node.Reset(new TreeViewNode(typename(CharLiteralNode)));
  
   287         node->SetData(&charLiteralNode);
  
   288         Span span = charLiteralNode.GetSpan();
  
   289         lexer.ConvertExternal(span);
  
   290         int index = span.start;
  
   291         indexNodeMap[index] = node.Get();
  
   292         nodeIndexMap[node.Get()] = index;
  
   293     }
  
   294     public override void Visit(WCharLiteralNode& wcharLiteralNode)
  
   295     {
  
   296         node.Reset(new TreeViewNode(typename(WCharLiteralNode)));
  
   297         node->SetData(&wcharLiteralNode);
  
   298         Span span = wcharLiteralNode.GetSpan();
  
   299         lexer.ConvertExternal(span);
  
   300         int index = span.start;
  
   301         indexNodeMap[index] = node.Get();
  
   302         nodeIndexMap[node.Get()] = index;
  
   303     }
  
   304     public override void Visit(UCharLiteralNode& ucharLiteralNode)
  
   305     {
  
   306         node.Reset(new TreeViewNode(typename(UCharLiteralNode)));
  
   307         node->SetData(&ucharLiteralNode);
  
   308         Span span = ucharLiteralNode.GetSpan();
  
   309         lexer.ConvertExternal(span);
  
   310         int index = span.start;
  
   311         indexNodeMap[index] = node.Get();
  
   312         nodeIndexMap[node.Get()] = index;
  
   313     }
  
   314     public override void Visit(StringLiteralNode& stringLiteralNode)
  
   315     {
  
   316         node.Reset(new TreeViewNode(typename(StringLiteralNode)));
  
   317         node->SetData(&stringLiteralNode);
  
   318         Span span = stringLiteralNode.GetSpan();
  
   319         lexer.ConvertExternal(span);
  
   320         int index = span.start;
  
   321         indexNodeMap[index] = node.Get();
  
   322         nodeIndexMap[node.Get()] = index;
  
   323     }
  
   324     public override void Visit(WStringLiteralNode& wstringLiteralNode)
  
   325     {
  
   326         node.Reset(new TreeViewNode(typename(WStringLiteralNode)));
  
   327         node->SetData(&wstringLiteralNode);
  
   328         Span span = wstringLiteralNode.GetSpan();
  
   329         lexer.ConvertExternal(span);
  
   330         int index = span.start;
  
   331         indexNodeMap[index] = node.Get();
  
   332         nodeIndexMap[node.Get()] = index;
  
   333     }
  
   334     public override void Visit(UStringLiteralNode& ustringLiteralNode)
  
   335     {
  
   336         node.Reset(new TreeViewNode(typename(UStringLiteralNode)));
  
   337         node->SetData(&ustringLiteralNode);
  
   338         Span span = ustringLiteralNode.GetSpan();
  
   339         lexer.ConvertExternal(span);
  
   340         int index = span.start;
  
   341         indexNodeMap[index] = node.Get();
  
   342         nodeIndexMap[node.Get()] = index;
  
   343     }
  
   344     public override void Visit(NullLiteralNode& nullLiteralNode)
  
   345     {
  
   346         node.Reset(new TreeViewNode(typename(NullLiteralNode)));
  
   347         node->SetData(&nullLiteralNode);
  
   348         Span span = nullLiteralNode.GetSpan();
  
   349         lexer.ConvertExternal(span);
  
   350         int index = span.start;
  
   351         indexNodeMap[index] = node.Get();
  
   352         nodeIndexMap[node.Get()] = index;
  
   353     }
  
   354     public override void Visit(ArrayLiteralNode& arrayLiteralNode)
  
   355     {
  
   356         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ArrayLiteralNode)));
  
   357         int n = arrayLiteralNode.Values().Count();
  
   358         for (int i = 0; i < n; ++i;)
  
   359         {
  
   360             arrayLiteralNode.Values()[i]->Accept(*this);
  
   361             treeViewNode->AddChild(node.Release());
  
   362         }
  
   363         node.Reset(treeViewNode.Release());
  
   364         node->SetData(&arrayLiteralNode);
  
   365         Span span = arrayLiteralNode.GetSpan();
  
   366         lexer.ConvertExternal(span);
  
   367         int index = span.start;
  
   368         indexNodeMap[index] = node.Get();
  
   369         nodeIndexMap[node.Get()] = index;
  
   370     }
  
   371     public override void Visit(StructuredLiteralNode& structuredLiteralNode)
  
   372     {
  
   373         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(StructuredLiteralNode)));
  
   374         int n = structuredLiteralNode.Members().Count();
  
   375         for (int i = 0; i < n; ++i;)
  
   376         {
  
   377             structuredLiteralNode.Members()[i]->Accept(*this);
  
   378             treeViewNode->AddChild(node.Release());
  
   379         }
  
   380         node.Reset(treeViewNode.Release());
  
   381         node->SetData(&structuredLiteralNode);
  
   382         Span span = structuredLiteralNode.GetSpan();
  
   383         lexer.ConvertExternal(span);
  
   384         int index = span.start;
  
   385         indexNodeMap[index] = node.Get();
  
   386         nodeIndexMap[node.Get()] = index;
  
   387     }
  
   388     public override void Visit(UuidLiteralNode& uuidLiteralNode)
  
   389     {
  
   390         node.Reset(new TreeViewNode(typename(UuidLiteralNode)));
  
   391         node->SetData(&uuidLiteralNode);
  
   392         Span span = uuidLiteralNode.GetSpan();
  
   393         lexer.ConvertExternal(span);
  
   394         int index = span.start;
  
   395         indexNodeMap[index] = node.Get();
  
   396         nodeIndexMap[node.Get()] = index;
  
   397     }
  
   398     public override void Visit(CompileUnitNode& compileUnitNode)
  
   399     {
  
   400         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(CompileUnitNode)));
  
   401         compileUnitNode.GlobalNs()->Accept(*this);
  
   402         treeViewNode->AddChild(node.Release());
  
   403         node.Reset(treeViewNode.Release());
  
   404         node->SetData(&compileUnitNode);
  
   405         Span span = compileUnitNode.GetSpan();
  
   406         lexer.ConvertExternal(span);
  
   407         int index = span.start;
  
   408         indexNodeMap[index] = node.Get();
  
   409         nodeIndexMap[node.Get()] = index;
  
   410     }
  
   411     public override void Visit(NamespaceNode& namespaceNode)
  
   412     {
  
   413         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(NamespaceNode)));
  
   414         if (namespaceNode.Id() != null)
  
   415         {
  
   416             namespaceNode.Id()->Accept(*this);
  
   417             treeViewNode->AddChild(node.Release());
  
   418         }
  
   419         int n = namespaceNode.Members().Count();
  
   420         for (int i = 0; i < n; ++i;)
  
   421         {
  
   422             namespaceNode.Members()[i]->Accept(*this);
  
   423             treeViewNode->AddChild(node.Release());
  
   424         }
  
   425         node.Reset(treeViewNode.Release());
  
   426         node->SetData(&namespaceNode);
  
   427         Span span = namespaceNode.GetSpan();
  
   428         lexer.ConvertExternal(span);
  
   429         int index = span.start;
  
   430         indexNodeMap[index] = node.Get();
  
   431         nodeIndexMap[node.Get()] = index;
  
   432     }
  
   433     public override void Visit(AliasNode& aliasNode)
  
   434     {
  
   435         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AliasNode)));
  
   436         aliasNode.Id()->Accept(*this);
  
   437         treeViewNode->AddChild(node.Release());
  
   438         aliasNode.Qid()->Accept(*this);
  
   439         treeViewNode->AddChild(node.Release());
  
   440         node.Reset(treeViewNode.Release());
  
   441         node->SetData(&aliasNode);
  
   442         Span span = aliasNode.GetSpan();
  
   443         lexer.ConvertExternal(span);
  
   444         int index = span.start;
  
   445         indexNodeMap[index] = node.Get();
  
   446         nodeIndexMap[node.Get()] = index;
  
   447     }
  
   448     public override void Visit(NamespaceImportNode& namespaceImportNode)
  
   449     {
  
   450         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(NamespaceImportNode)));
  
   451         namespaceImportNode.Ns()->Accept(*this);
  
   452         treeViewNode->AddChild(node.Release());
  
   453         node.Reset(treeViewNode.Release());
  
   454         node->SetData(&namespaceImportNode);
  
   455         Span span = namespaceImportNode.GetSpan();
  
   456         lexer.ConvertExternal(span);
  
   457         int index = span.start;
  
   458         indexNodeMap[index] = node.Get();
  
   459         nodeIndexMap[node.Get()] = index;
  
   460     }
  
   461     public override void Visit(IdentifierNode& identifierNode)
  
   462     {
  
   463         node.Reset(new TreeViewNode(typename(IdentifierNode)));
  
   464         node->SetData(&identifierNode);
  
   465         Span span = identifierNode.GetSpan();
  
   466         lexer.ConvertExternal(span);
  
   467         int index = span.start;
  
   468         indexNodeMap[index] = node.Get();
  
   469         nodeIndexMap[node.Get()] = index;
  
   470     }
  
   471     public override void Visit(TemplateIdNode& templateIdNode)
  
   472     {
  
   473         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(TemplateIdNode)));
  
   474         templateIdNode.Primary()->Accept(*this);
  
   475         treeViewNode->AddChild(node.Release());
  
   476         int n = templateIdNode.TemplateArguments().Count();
  
   477         for (int i = 0; i < n; ++i;)
  
   478         {
  
   479             templateIdNode.TemplateArguments()[i]->Accept(*this);
  
   480             treeViewNode->AddChild(node.Release());
  
   481         }
  
   482         node.Reset(treeViewNode.Release());
  
   483         node->SetData(&templateIdNode);
  
   484         Span span = templateIdNode.GetSpan();
  
   485         lexer.ConvertExternal(span);
  
   486         int index = span.start;
  
   487         indexNodeMap[index] = node.Get();
  
   488         nodeIndexMap[node.Get()] = index;
  
   489     }
  
   490     public override void Visit(FunctionNode& functionNode)
  
   491     {
  
   492         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(FunctionNode)));
  
   493         if (functionNode.GetAttributes() != null)
  
   494         {
  
   495             functionNode.GetAttributes()->Accept(*this);
  
   496             treeViewNode->AddChild(node.Release());
  
   497         }
  
   498         functionNode.ReturnTypeExpr()->Accept(*this);
  
   499         treeViewNode->AddChild(node.Release());
  
   500         int nt = functionNode.TemplateParameters().Count();
  
   501         for (int i = 0; i < nt; ++i;)
  
   502         {
  
   503             functionNode.TemplateParameters()[i]->Accept(*this);
  
   504             treeViewNode->AddChild(node.Release());
  
   505         }
  
   506         int np = functionNode.Parameters().Count();
  
   507         for (int i = 0; i < np; ++i;)
  
   508         {
  
   509             functionNode.Parameters()[i]->Accept(*this);
  
   510             treeViewNode->AddChild(node.Release());
  
   511         }
  
   512         if (functionNode.WhereConstraint() != null)
  
   513         {
  
   514             functionNode.WhereConstraint()->Accept(*this);
  
   515             treeViewNode->AddChild(node.Release());
  
   516         }
  
   517         if (functionNode.Body() != null)
  
   518         {
  
   519             functionNode.Body()->Accept(*this);
  
   520             treeViewNode->AddChild(node.Release());
  
   521         }
  
   522         node.Reset(treeViewNode.Release());
  
   523         node->SetData(&functionNode);
  
   524         Span span = functionNode.GetSpan();
  
   525         lexer.ConvertExternal(span);
  
   526         int index = span.start;
  
   527         indexNodeMap[index] = node.Get();
  
   528         nodeIndexMap[node.Get()] = index;
  
   529     }
  
   530     public override void Visit(ClassNode& classNode)
  
   531     {
  
   532         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ClassNode)));
  
   533         if (classNode.GetAttributes() != null)
  
   534         {
  
   535             classNode.GetAttributes()->Accept(*this);
  
   536             treeViewNode->AddChild(node.Release());
  
   537         }
  
   538         classNode.Id()->Accept(*this);
  
   539         treeViewNode->AddChild(node.Release());
  
   540         int nt = classNode.TemplateParameters().Count();
  
   541         for (int i = 0; i < nt; ++i;)
  
   542         {
  
   543             classNode.TemplateParameters()[i]->Accept(*this);
  
   544             treeViewNode->AddChild(node.Release());
  
   545         }
  
   546         int nb = classNode.BaseClassOrInterfaces().Count();
  
   547         for (int i = 0; i < nb; ++i;)
  
   548         {
  
   549             classNode.BaseClassOrInterfaces()[i]->Accept(*this);
  
   550             treeViewNode->AddChild(node.Release());
  
   551         }
  
   552         if (classNode.WhereConstraint() != null)
  
   553         {
  
   554             classNode.WhereConstraint()->Accept(*this);
  
   555             treeViewNode->AddChild(node.Release());
  
   556         }
  
   557         int nm = classNode.Members().Count();
  
   558         for (int i = 0; i < nm; ++i;)
  
   559         {
  
   560             classNode.Members()[i]->Accept(*this);
  
   561             treeViewNode->AddChild(node.Release());
  
   562         }
  
   563         node.Reset(treeViewNode.Release());
  
   564         node->SetData(&classNode);
  
   565         Span span = classNode.GetSpan();
  
   566         lexer.ConvertExternal(span);
  
   567         int index = span.start;
  
   568         indexNodeMap[index] = node.Get();
  
   569         nodeIndexMap[node.Get()] = index;
  
   570     }
  
   571     public override void Visit(ThisInitializerNode& thisInitializerNode)
  
   572     {
  
   573         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ThisInitializerNode)));
  
   574         int na = thisInitializerNode.Arguments().Count();
  
   575         for (int i = 0; i < na; ++i;)
  
   576         {
  
   577             thisInitializerNode.Arguments()[i]->Accept(*this);
  
   578             treeViewNode->AddChild(node.Release());
  
   579         }
  
   580         node.Reset(treeViewNode.Release());
  
   581         node->SetData(&thisInitializerNode);
  
   582         Span span = thisInitializerNode.GetSpan();
  
   583         lexer.ConvertExternal(span);
  
   584         int index = span.start;
  
   585         indexNodeMap[index] = node.Get();
  
   586         nodeIndexMap[node.Get()] = index;
  
   587     }
  
   588     public override void Visit(BaseInitializerNode& baseInitializerNode)
  
   589     {
  
   590         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(BaseInitializerNode)));
  
   591         int na = baseInitializerNode.Arguments().Count();
  
   592         for (int i = 0; i < na; ++i;)
  
   593         {
  
   594             baseInitializerNode.Arguments()[i]->Accept(*this);
  
   595             treeViewNode->AddChild(node.Release());
  
   596         }
  
   597         node.Reset(treeViewNode.Release());
  
   598         node->SetData(&baseInitializerNode);
  
   599         Span span = baseInitializerNode.GetSpan();
  
   600         lexer.ConvertExternal(span);
  
   601         int index = span.start;
  
   602         indexNodeMap[index] = node.Get();
  
   603         nodeIndexMap[node.Get()] = index;
  
   604     }
  
   605     public override void Visit(MemberInitializerNode& memberInitializerNode)
  
   606     {
  
   607         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(MemberInitializerNode)));
  
   608         memberInitializerNode.MemberId()->Accept(*this);
  
   609         treeViewNode->AddChild(node.Release());
  
   610         int na = memberInitializerNode.Arguments().Count();
  
   611         for (int i = 0; i < na; ++i;)
  
   612         {
  
   613             memberInitializerNode.Arguments()[i]->Accept(*this);
  
   614             treeViewNode->AddChild(node.Release());
  
   615         }
  
   616         node.Reset(treeViewNode.Release());
  
   617         node->SetData(&memberInitializerNode);
  
   618         Span span = memberInitializerNode.GetSpan();
  
   619         lexer.ConvertExternal(span);
  
   620         int index = span.start;
  
   621         indexNodeMap[index] = node.Get();
  
   622         nodeIndexMap[node.Get()] = index;
  
   623     }
  
   624     public override void Visit(StaticConstructorNode& staticConstructorNode)
  
   625     {
  
   626         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(StaticConstructorNode)));
  
   627         if (staticConstructorNode.GetAttributes() != null)
  
   628         {
  
   629             staticConstructorNode.GetAttributes()->Accept(*this);
  
   630             treeViewNode->AddChild(node.Release());
  
   631         }
  
   632         staticConstructorNode.ClassId()->Accept(*this);
  
   633         treeViewNode->AddChild(node.Release());
  
   634         int ni = staticConstructorNode.Initializers().Count();
  
   635         for (int i = 0; i < ni; ++i;)
  
   636         {
  
   637             staticConstructorNode.Initializers()[i]->Accept(*this);
  
   638             treeViewNode->AddChild(node.Release());
  
   639         }
  
   640         if (staticConstructorNode.WhereConstraint() != null)
  
   641         {
  
   642             staticConstructorNode.WhereConstraint()->Accept(*this);
  
   643             treeViewNode->AddChild(node.Release());
  
   644         }
  
   645         if (staticConstructorNode.Body() != null)
  
   646         {
  
   647             staticConstructorNode.Body()->Accept(*this);
  
   648             treeViewNode->AddChild(node.Release());
  
   649         }
  
   650         node.Reset(treeViewNode.Release());
  
   651         node->SetData(&staticConstructorNode);
  
   652         Span span = staticConstructorNode.GetSpan();
  
   653         lexer.ConvertExternal(span);
  
   654         int index = span.start;
  
   655         indexNodeMap[index] = node.Get();
  
   656         nodeIndexMap[node.Get()] = index;
  
   657     }
  
   658     public override void Visit(ConstructorNode& constructorNode)
  
   659     {
  
   660         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConstructorNode)));
  
   661         if (constructorNode.GetAttributes() != null)
  
   662         {
  
   663             constructorNode.GetAttributes()->Accept(*this);
  
   664             treeViewNode->AddChild(node.Release());
  
   665         }
  
   666         constructorNode.ClassId()->Accept(*this);
  
   667         treeViewNode->AddChild(node.Release());
  
   668         int np = constructorNode.Parameters().Count();
  
   669         for (int i = 0; i < np; ++i;)
  
   670         {
  
   671             constructorNode.Parameters()[i]->Accept(*this);
  
   672             treeViewNode->AddChild(node.Release());
  
   673         }
  
   674         int ni = constructorNode.Initializers().Count();
  
   675         for (int i = 0; i < ni; ++i;)
  
   676         {
  
   677             constructorNode.Initializers()[i]->Accept(*this);
  
   678             treeViewNode->AddChild(node.Release());
  
   679         }
  
   680         if (constructorNode.WhereConstraint() != null)
  
   681         {
  
   682             constructorNode.WhereConstraint()->Accept(*this);
  
   683             treeViewNode->AddChild(node.Release());
  
   684         }
  
   685         if (constructorNode.Body() != null)
  
   686         {
  
   687             constructorNode.Body()->Accept(*this);
  
   688             treeViewNode->AddChild(node.Release());
  
   689         }
  
   690         node.Reset(treeViewNode.Release());
  
   691         node->SetData(&constructorNode);
  
   692         Span span = constructorNode.GetSpan();
  
   693         lexer.ConvertExternal(span);
  
   694         int index = span.start;
  
   695         indexNodeMap[index] = node.Get();
  
   696         nodeIndexMap[node.Get()] = index;
  
   697     }
  
   698     public override void Visit(DestructorNode& destructorNode)
  
   699     {
  
   700         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DestructorNode)));
  
   701         if (destructorNode.GetAttributes() != null)
  
   702         {
  
   703             destructorNode.GetAttributes()->Accept(*this);
  
   704             treeViewNode->AddChild(node.Release());
  
   705         }
  
   706         destructorNode.ClassId()->Accept(*this);
  
   707         treeViewNode->AddChild(node.Release());
  
   708         if (destructorNode.WhereConstraint() != null)
  
   709         {
  
   710             destructorNode.WhereConstraint()->Accept(*this);
  
   711             treeViewNode->AddChild(node.Release());
  
   712         }
  
   713         if (destructorNode.Body() != null)
  
   714         {
  
   715             destructorNode.Body()->Accept(*this);
  
   716             treeViewNode->AddChild(node.Release());
  
   717         }
  
   718         node.Reset(treeViewNode.Release());
  
   719         node->SetData(&destructorNode);
  
   720         Span span = destructorNode.GetSpan();
  
   721         lexer.ConvertExternal(span);
  
   722         int index = span.start;
  
   723         indexNodeMap[index] = node.Get();
  
   724         nodeIndexMap[node.Get()] = index;
  
   725     }
  
   726     public override void Visit(MemberFunctionNode& memberFunctionNode)
  
   727     {
  
   728         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(MemberFunctionNode)));
  
   729         if (memberFunctionNode.GetAttributes() != null)
  
   730         {
  
   731             memberFunctionNode.GetAttributes()->Accept(*this);
  
   732             treeViewNode->AddChild(node.Release());
  
   733         }
  
   734         memberFunctionNode.ReturnTypeExpr()->Accept(*this);
  
   735         treeViewNode->AddChild(node.Release());
  
   736         int np = memberFunctionNode.Parameters().Count();
  
   737         for (int i = 0; i < np; ++i;)
  
   738         {
  
   739             memberFunctionNode.Parameters()[i]->Accept(*this);
  
   740             treeViewNode->AddChild(node.Release());
  
   741         }
  
   742         if (memberFunctionNode.WhereConstraint() != null)
  
   743         {
  
   744             memberFunctionNode.WhereConstraint()->Accept(*this);
  
   745             treeViewNode->AddChild(node.Release());
  
   746         }
  
   747         if (memberFunctionNode.Body() != null)
  
   748         {
  
   749             memberFunctionNode.Body()->Accept(*this);
  
   750             treeViewNode->AddChild(node.Release());
  
   751         }
  
   752         node.Reset(treeViewNode.Release());
  
   753         node->SetData(&memberFunctionNode);
  
   754         Span span = memberFunctionNode.GetSpan();
  
   755         lexer.ConvertExternal(span);
  
   756         int index = span.start;
  
   757         indexNodeMap[index] = node.Get();
  
   758         nodeIndexMap[node.Get()] = index;
  
   759     }
  
   760     public override void Visit(ConversionFunctionNode& conversionFunctionNode)
  
   761     {
  
   762         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConversionFunctionNode)));
  
   763         if (conversionFunctionNode.GetAttributes() != null)
  
   764         {
  
   765             conversionFunctionNode.GetAttributes()->Accept(*this);
  
   766             treeViewNode->AddChild(node.Release());
  
   767         }
  
   768         conversionFunctionNode.ReturnTypeExpr()->Accept(*this);
  
   769         treeViewNode->AddChild(node.Release());
  
   770         if (conversionFunctionNode.WhereConstraint() != null)
  
   771         {
  
   772             conversionFunctionNode.WhereConstraint()->Accept(*this);
  
   773             treeViewNode->AddChild(node.Release());
  
   774         }
  
   775         if (conversionFunctionNode.Body() != null)
  
   776         {
  
   777             conversionFunctionNode.Body()->Accept(*this);
  
   778             treeViewNode->AddChild(node.Release());
  
   779         }
  
   780         node.Reset(treeViewNode.Release());
  
   781         node->SetData(&conversionFunctionNode);
  
   782         Span span = conversionFunctionNode.GetSpan();
  
   783         lexer.ConvertExternal(span);
  
   784         int index = span.start;
  
   785         indexNodeMap[index] = node.Get();
  
   786         nodeIndexMap[node.Get()] = index;
  
   787     }
  
   788     public override void Visit(MemberVariableNode& memberVariableNode)
  
   789     {
  
   790         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(MemberVariableNode)));
  
   791         if (memberVariableNode.GetAttributes() != null)
  
   792         {
  
   793             memberVariableNode.GetAttributes()->Accept(*this);
  
   794             treeViewNode->AddChild(node.Release());
  
   795         }
  
   796         memberVariableNode.TypeExpr()->Accept(*this);
  
   797         treeViewNode->AddChild(node.Release());
  
   798         memberVariableNode.Id()->Accept(*this);
  
   799         treeViewNode->AddChild(node.Release());
  
   800         node.Reset(treeViewNode.Release());
  
   801         node->SetData(&memberVariableNode);
  
   802         Span span = memberVariableNode.GetSpan();
  
   803         lexer.ConvertExternal(span);
  
   804         int index = span.start;
  
   805         indexNodeMap[index] = node.Get();
  
   806         nodeIndexMap[node.Get()] = index;
  
   807     }
  
   808     public override void Visit(InterfaceNode& interfaceNode)
  
   809     {
  
   810         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(InterfaceNode)));
  
   811         if (interfaceNode.GetAttributes() != null)
  
   812         {
  
   813             interfaceNode.GetAttributes()->Accept(*this);
  
   814             treeViewNode->AddChild(node.Release());
  
   815         }
  
   816         interfaceNode.Id()->Accept(*this);
  
   817         treeViewNode->AddChild(node.Release());
  
   818         int nm = interfaceNode.Members().Count();
  
   819         for (int i = 0; i < nm; ++i;)
  
   820         {
  
   821             interfaceNode.Members()[i]->Accept(*this);
  
   822             treeViewNode->AddChild(node.Release());
  
   823         }
  
   824         node.Reset(treeViewNode.Release());
  
   825         node->SetData(&interfaceNode);
  
   826         Span span = interfaceNode.GetSpan();
  
   827         lexer.ConvertExternal(span);
  
   828         int index = span.start;
  
   829         indexNodeMap[index] = node.Get();
  
   830         nodeIndexMap[node.Get()] = index;
  
   831     }
  
   832     public override void Visit(DelegateNode& delegateNode)
  
   833     {
  
   834         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DelegateNode)));
  
   835         delegateNode.ReturnTypeExpr()->Accept(*this);
  
   836         treeViewNode->AddChild(node.Release());
  
   837         delegateNode.Id()->Accept(*this);
  
   838         treeViewNode->AddChild(node.Release());
  
   839         int np = delegateNode.Parameters().Count();
  
   840         for (int i = 0; i < np; ++i;)
  
   841         {
  
   842             delegateNode.Parameters()[i]->Accept(*this);
  
   843             treeViewNode->AddChild(node.Release());
  
   844         }
  
   845         node.Reset(treeViewNode.Release());
  
   846         node->SetData(&delegateNode);
  
   847         Span span = delegateNode.GetSpan();
  
   848         lexer.ConvertExternal(span);
  
   849         int index = span.start;
  
   850         indexNodeMap[index] = node.Get();
  
   851         nodeIndexMap[node.Get()] = index;
  
   852     }
  
   853     public override void Visit(ClassDelegateNode& classDelegateNode)
  
   854     {
  
   855         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ClassDelegateNode)));
  
   856         classDelegateNode.ReturnTypeExpr()->Accept(*this);
  
   857         treeViewNode->AddChild(node.Release());
  
   858         classDelegateNode.Id()->Accept(*this);
  
   859         treeViewNode->AddChild(node.Release());
  
   860         int np = classDelegateNode.Parameters().Count();
  
   861         for (int i = 0; i < np; ++i;)
  
   862         {
  
   863             classDelegateNode.Parameters()[i]->Accept(*this);
  
   864             treeViewNode->AddChild(node.Release());
  
   865         }
  
   866         node.Reset(treeViewNode.Release());
  
   867         node->SetData(&classDelegateNode);
  
   868         Span span = classDelegateNode.GetSpan();
  
   869         lexer.ConvertExternal(span);
  
   870         int index = span.start;
  
   871         indexNodeMap[index] = node.Get();
  
   872         nodeIndexMap[node.Get()] = index;
  
   873     }
  
   874     public override void Visit(ParenthesizedConstraintNode& parenthesizedConstraintNode)
  
   875     {
  
   876         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ParenthesizedConstraintNode)));
  
   877         parenthesizedConstraintNode.Constraint()->Accept(*this);
  
   878         treeViewNode->AddChild(node.Release());
  
   879         node.Reset(treeViewNode.Release());
  
   880         node->SetData(&parenthesizedConstraintNode);
  
   881         Span span = parenthesizedConstraintNode.GetSpan();
  
   882         lexer.ConvertExternal(span);
  
   883         int index = span.start;
  
   884         indexNodeMap[index] = node.Get();
  
   885         nodeIndexMap[node.Get()] = index;
  
   886     }
  
   887     public override void Visit(DisjunctiveConstraintNode& disjunctiveConstraintNode)
  
   888     {
  
   889         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DisjunctiveConstraintNode)));
  
   890         disjunctiveConstraintNode.Left()->Accept(*this);
  
   891         treeViewNode->AddChild(node.Release());
  
   892         disjunctiveConstraintNode.Right()->Accept(*this);
  
   893         treeViewNode->AddChild(node.Release());
  
   894         node.Reset(treeViewNode.Release());
  
   895         node->SetData(&disjunctiveConstraintNode);
  
   896         Span span = disjunctiveConstraintNode.GetSpan();
  
   897         lexer.ConvertExternal(span);
  
   898         int index = span.start;
  
   899         indexNodeMap[index] = node.Get();
  
   900         nodeIndexMap[node.Get()] = index;
  
   901     }
  
   902     public override void Visit(ConjunctiveConstraintNode& conjunctiveConstraintNode)
  
   903     {
  
   904         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConjunctiveConstraintNode)));
  
   905         conjunctiveConstraintNode.Left()->Accept(*this);
  
   906         treeViewNode->AddChild(node.Release());
  
   907         conjunctiveConstraintNode.Right()->Accept(*this);
  
   908         treeViewNode->AddChild(node.Release());
  
   909         node.Reset(treeViewNode.Release());
  
   910         node->SetData(&conjunctiveConstraintNode);
  
   911         Span span = conjunctiveConstraintNode.GetSpan();
  
   912         lexer.ConvertExternal(span);
  
   913         int index = span.start;
  
   914         indexNodeMap[index] = node.Get();
  
   915         nodeIndexMap[node.Get()] = index;
  
   916     }
  
   917     public override void Visit(WhereConstraintNode& whereConstraintNode)
  
   918     {
  
   919         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(WhereConstraintNode)));
  
   920         whereConstraintNode.Constraint()->Accept(*this);
  
   921         treeViewNode->AddChild(node.Release());
  
   922         node.Reset(treeViewNode.Release());
  
   923         node->SetData(&whereConstraintNode);
  
   924         Span span = whereConstraintNode.GetSpan();
  
   925         lexer.ConvertExternal(span);
  
   926         int index = span.start;
  
   927         indexNodeMap[index] = node.Get();
  
   928         nodeIndexMap[node.Get()] = index;
  
   929     }
  
   930     public override void Visit(PredicateConstraintNode& predicateConstraintNode)
  
   931     {
  
   932         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(PredicateConstraintNode)));
  
   933         predicateConstraintNode.InvokeExpr()->Accept(*this);
  
   934         treeViewNode->AddChild(node.Release());
  
   935         node.Reset(treeViewNode.Release());
  
   936         node->SetData(&predicateConstraintNode);
  
   937         Span span = predicateConstraintNode.GetSpan();
  
   938         lexer.ConvertExternal(span);
  
   939         int index = span.start;
  
   940         indexNodeMap[index] = node.Get();
  
   941         nodeIndexMap[node.Get()] = index;
  
   942     }
  
   943     public override void Visit(IsConstraintNode& isConstraintNode)
  
   944     {
  
   945         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(IsConstraintNode)));
  
   946         isConstraintNode.TypeExpr()->Accept(*this);
  
   947         treeViewNode->AddChild(node.Release());
  
   948         isConstraintNode.ConceptOrTypeName()->Accept(*this);
  
   949         treeViewNode->AddChild(node.Release());
  
   950         node.Reset(treeViewNode.Release());
  
   951         node->SetData(&isConstraintNode);
  
   952         Span span = isConstraintNode.GetSpan();
  
   953         lexer.ConvertExternal(span);
  
   954         int index = span.start;
  
   955         indexNodeMap[index] = node.Get();
  
   956         nodeIndexMap[node.Get()] = index;
  
   957     }
  
   958     public override void Visit(MultiParamConstraintNode& multiParamConstraintNode)
  
   959     {
  
   960         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(MultiParamConstraintNode)));
  
   961         multiParamConstraintNode.ConceptId()->Accept(*this);
  
   962         treeViewNode->AddChild(node.Release());
  
   963         int nt = multiParamConstraintNode.TypeExprs().Count();
  
   964         for (int i = 0; i < nt; ++i;)
  
   965         {
  
   966             multiParamConstraintNode.TypeExprs()[i]->Accept(*this);
  
   967             treeViewNode->AddChild(node.Release());
  
   968         }
  
   969         node.Reset(treeViewNode.Release());
  
   970         node->SetData(&multiParamConstraintNode);
  
   971         Span span = multiParamConstraintNode.GetSpan();
  
   972         lexer.ConvertExternal(span);
  
   973         int index = span.start;
  
   974         indexNodeMap[index] = node.Get();
  
   975         nodeIndexMap[node.Get()] = index;
  
   976     }
  
   977     public override void Visit(TypeNameConstraintNode& typeNameConstraintNode)
  
   978     {
  
   979         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(TypeNameConstraintNode)));
  
   980         typeNameConstraintNode.TypeId()->Accept(*this);
  
   981         treeViewNode->AddChild(node.Release());
  
   982         node.Reset(treeViewNode.Release());
  
   983         node->SetData(&typeNameConstraintNode);
  
   984         Span span = typeNameConstraintNode.GetSpan();
  
   985         lexer.ConvertExternal(span);
  
   986         int index = span.start;
  
   987         indexNodeMap[index] = node.Get();
  
   988         nodeIndexMap[node.Get()] = index;
  
   989     }
  
   990     public override void Visit(ConstructorConstraintNode& constructorConstraintNode)
  
   991     {
  
   992         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConstructorConstraintNode)));
  
   993         constructorConstraintNode.TypeParamId()->Accept(*this);
  
   994         treeViewNode->AddChild(node.Release());
  
   995         int np = constructorConstraintNode.Parameters().Count();
  
   996         for (int i = 0; i < np; ++i;)
  
   997         {
  
   998             constructorConstraintNode.Parameters()[i]->Accept(*this);
  
   999             treeViewNode->AddChild(node.Release());
  
  1000         }
  
  1001         node.Reset(treeViewNode.Release());
  
  1002         node->SetData(&constructorConstraintNode);
  
  1003         Span span = constructorConstraintNode.GetSpan();
  
  1004         lexer.ConvertExternal(span);
  
  1005         int index = span.start;
  
  1006         indexNodeMap[index] = node.Get();
  
  1007         nodeIndexMap[node.Get()] = index;
  
  1008     }
  
  1009     public override void Visit(DestructorConstraintNode& destructorConstraintNode)
  
  1010     {
  
  1011         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DestructorConstraintNode)));
  
  1012         destructorConstraintNode.TypeParamId()->Accept(*this);
  
  1013         treeViewNode->AddChild(node.Release());
  
  1014         node.Reset(treeViewNode.Release());
  
  1015         node->SetData(&destructorConstraintNode);
  
  1016         Span span = destructorConstraintNode.GetSpan();
  
  1017         lexer.ConvertExternal(span);
  
  1018         int index = span.start;
  
  1019         indexNodeMap[index] = node.Get();
  
  1020         nodeIndexMap[node.Get()] = index;
  
  1021     }
  
  1022     public override void Visit(MemberFunctionConstraintNode& memberFunctionConstraintNode)
  
  1023     {
  
  1024         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(MemberFunctionConstraintNode)));
  
  1025         memberFunctionConstraintNode.ReturnTypeExpr()->Accept(*this);
  
  1026         treeViewNode->AddChild(node.Release());
  
  1027         memberFunctionConstraintNode.TypeParamId()->Accept(*this);
  
  1028         treeViewNode->AddChild(node.Release());
  
  1029         int np = memberFunctionConstraintNode.Parameters().Count();
  
  1030         for (int i = 0; i < np; ++i;)
  
  1031         {
  
  1032             memberFunctionConstraintNode.Parameters()[i]->Accept(*this);
  
  1033             treeViewNode->AddChild(node.Release());
  
  1034         }
  
  1035         node.Reset(treeViewNode.Release());
  
  1036         node->SetData(&memberFunctionConstraintNode);
  
  1037         Span span = memberFunctionConstraintNode.GetSpan();
  
  1038         lexer.ConvertExternal(span);
  
  1039         int index = span.start;
  
  1040         indexNodeMap[index] = node.Get();
  
  1041         nodeIndexMap[node.Get()] = index;
  
  1042     }
  
  1043     public override void Visit(FunctionConstraintNode& functionConstraintNode)
  
  1044     {
  
  1045         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(FunctionConstraintNode)));
  
  1046         functionConstraintNode.ReturnTypeExpr()->Accept(*this);
  
  1047         treeViewNode->AddChild(node.Release());
  
  1048         int np = functionConstraintNode.Parameters().Count();
  
  1049         for (int i = 0; i < np; ++i;)
  
  1050         {
  
  1051             functionConstraintNode.Parameters()[i]->Accept(*this);
  
  1052             treeViewNode->AddChild(node.Release());
  
  1053         }
  
  1054         node.Reset(treeViewNode.Release());
  
  1055         node->SetData(&functionConstraintNode);
  
  1056         Span span = functionConstraintNode.GetSpan();
  
  1057         lexer.ConvertExternal(span);
  
  1058         int index = span.start;
  
  1059         indexNodeMap[index] = node.Get();
  
  1060         nodeIndexMap[node.Get()] = index;
  
  1061     }
  
  1062     public override void Visit(AxiomStatementNode& axiomStatementNode)
  
  1063     {
  
  1064         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AxiomStatementNode)));
  
  1065         axiomStatementNode.Expression()->Accept(*this);
  
  1066         treeViewNode->AddChild(node.Release());
  
  1067         node.Reset(treeViewNode.Release());
  
  1068         node->SetData(&axiomStatementNode);
  
  1069         Span span = axiomStatementNode.GetSpan();
  
  1070         lexer.ConvertExternal(span);
  
  1071         int index = span.start;
  
  1072         indexNodeMap[index] = node.Get();
  
  1073         nodeIndexMap[node.Get()] = index;
  
  1074     }
  
  1075     public override void Visit(AxiomNode& axiomNode)
  
  1076     {
  
  1077         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AxiomNode)));
  
  1078         if (axiomNode.Id() != null)
  
  1079         {
  
  1080             axiomNode.Id()->Accept(*this);
  
  1081             treeViewNode->AddChild(node.Release());
  
  1082         }
  
  1083         int np = axiomNode.Parameters().Count();
  
  1084         for (int i = 0; i < np; ++i;)
  
  1085         {
  
  1086             axiomNode.Parameters()[i]->Accept(*this);
  
  1087             treeViewNode->AddChild(node.Release());
  
  1088         }
  
  1089         int ns = axiomNode.Statements().Count();
  
  1090         for (int i = 0; i < ns; ++i;)
  
  1091         {
  
  1092             axiomNode.Statements()[i]->Accept(*this);
  
  1093             treeViewNode->AddChild(node.Release());
  
  1094         }
  
  1095         node.Reset(treeViewNode.Release());
  
  1096         node->SetData(&axiomNode);
  
  1097         Span span = axiomNode.GetSpan();
  
  1098         lexer.ConvertExternal(span);
  
  1099         int index = span.start;
  
  1100         indexNodeMap[index] = node.Get();
  
  1101         nodeIndexMap[node.Get()] = index;
  
  1102     }
  
  1103     public override void Visit(ConceptIdNode& conceptIdNode)
  
  1104     {
  
  1105         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConceptIdNode)));
  
  1106         conceptIdNode.Id()->Accept(*this);
  
  1107         treeViewNode->AddChild(node.Release());
  
  1108         int np = conceptIdNode.TypeParameters().Count();
  
  1109         for (int i = 0; i < np; ++i;)
  
  1110         {
  
  1111             conceptIdNode.TypeParameters()[i]->Accept(*this);
  
  1112             treeViewNode->AddChild(node.Release());
  
  1113         }
  
  1114         node.Reset(treeViewNode.Release());
  
  1115         node->SetData(&conceptIdNode);
  
  1116         Span span = conceptIdNode.GetSpan();
  
  1117         lexer.ConvertExternal(span);
  
  1118         int index = span.start;
  
  1119         indexNodeMap[index] = node.Get();
  
  1120         nodeIndexMap[node.Get()] = index;
  
  1121     }
  
  1122     public override void Visit(ConceptNode& conceptNode)
  
  1123     {
  
  1124         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConceptNode)));
  
  1125         conceptNode.Id()->Accept(*this);
  
  1126         int np = conceptNode.TypeParameters().Count();
  
  1127         for (int i = 0; i < np; ++i;)
  
  1128         {
  
  1129             conceptNode.TypeParameters()[i]->Accept(*this);
  
  1130             treeViewNode->AddChild(node.Release());
  
  1131         }
  
  1132         if (conceptNode.Refinement() != null)
  
  1133         {
  
  1134             conceptNode.Refinement()->Accept(*this);
  
  1135             treeViewNode->AddChild(node.Release());
  
  1136         }
  
  1137         int nc = conceptNode.Constraints().Count();
  
  1138         for (int i = 0; i < nc; ++i;)
  
  1139         {
  
  1140             conceptNode.Constraints()[i]->Accept(*this);
  
  1141             treeViewNode->AddChild(node.Release());
  
  1142         }
  
  1143         int na = conceptNode.Axioms().Count();
  
  1144         for (int i = 0; i < na; ++i;)
  
  1145         {
  
  1146             conceptNode.Axioms()[i]->Accept(*this);
  
  1147             treeViewNode->AddChild(node.Release());
  
  1148         }
  
  1149         node.Reset(treeViewNode.Release());
  
  1150         node->SetData(&conceptNode);
  
  1151         Span span = conceptNode.GetSpan();
  
  1152         lexer.ConvertExternal(span);
  
  1153         int index = span.start;
  
  1154         indexNodeMap[index] = node.Get();
  
  1155         nodeIndexMap[node.Get()] = index;
  
  1156     }
  
  1157     public override void Visit(SameConstraintNode& sameConstraintNode)
  
  1158     {
  
  1159         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(SameConstraintNode)));
  
  1160         node.Reset(treeViewNode.Release());
  
  1161         node->SetData(&sameConstraintNode);
  
  1162         Span span = sameConstraintNode.GetSpan();
  
  1163         lexer.ConvertExternal(span);
  
  1164         int index = span.start;
  
  1165         indexNodeMap[index] = node.Get();
  
  1166         nodeIndexMap[node.Get()] = index;
  
  1167     }
  
  1168     public override void Visit(DerivedConstraintNode& derivedConstraintNode)
  
  1169     {
  
  1170         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DerivedConstraintNode)));
  
  1171         node.Reset(treeViewNode.Release());
  
  1172         node->SetData(&derivedConstraintNode);
  
  1173         Span span = derivedConstraintNode.GetSpan();
  
  1174         lexer.ConvertExternal(span);
  
  1175         int index = span.start;
  
  1176         indexNodeMap[index] = node.Get();
  
  1177         nodeIndexMap[node.Get()] = index;
  
  1178     }
  
  1179     public override void Visit(ConvertibleConstraintNode& convertibleConstraintNode)
  
  1180     {
  
  1181         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConvertibleConstraintNode)));
  
  1182         node.Reset(treeViewNode.Release());
  
  1183         node->SetData(&convertibleConstraintNode);
  
  1184         Span span = convertibleConstraintNode.GetSpan();
  
  1185         lexer.ConvertExternal(span);
  
  1186         int index = span.start;
  
  1187         indexNodeMap[index] = node.Get();
  
  1188         nodeIndexMap[node.Get()] = index;
  
  1189     }
  
  1190     public override void Visit(ExplicitlyConvertibleConstraintNode& explicitlyConvertibleConstraintNode)
  
  1191     {
  
  1192         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ExplicitlyConvertibleConstraintNode)));
  
  1193         node.Reset(treeViewNode.Release());
  
  1194         node->SetData(&explicitlyConvertibleConstraintNode);
  
  1195         Span span = explicitlyConvertibleConstraintNode.GetSpan();
  
  1196         lexer.ConvertExternal(span);
  
  1197         int index = span.start;
  
  1198         indexNodeMap[index] = node.Get();
  
  1199         nodeIndexMap[node.Get()] = index;
  
  1200     }
  
  1201     public override void Visit(CommonConstraintNode& commonConstraintNode)
  
  1202     {
  
  1203         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(CommonConstraintNode)));
  
  1204         node.Reset(treeViewNode.Release());
  
  1205         node->SetData(&commonConstraintNode);
  
  1206         Span span = commonConstraintNode.GetSpan();
  
  1207         lexer.ConvertExternal(span);
  
  1208         int index = span.start;
  
  1209         indexNodeMap[index] = node.Get();
  
  1210         nodeIndexMap[node.Get()] = index;
  
  1211     }
  
  1212     public override void Visit(NonreferenceTypeConstraintNode& nonreferenceTypeConstraintNode)
  
  1213     {
  
  1214         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(NonreferenceTypeConstraintNode)));
  
  1215         node.Reset(treeViewNode.Release());
  
  1216         node->SetData(&nonreferenceTypeConstraintNode);
  
  1217         Span span = nonreferenceTypeConstraintNode.GetSpan();
  
  1218         lexer.ConvertExternal(span);
  
  1219         int index = span.start;
  
  1220         indexNodeMap[index] = node.Get();
  
  1221         nodeIndexMap[node.Get()] = index;
  
  1222     }
  
  1223     public override void Visit(LabelNode& labelNode)
  
  1224     {
  
  1225         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(LabelNode)));
  
  1226         node.Reset(treeViewNode.Release());
  
  1227         node->SetData(&labelNode);
  
  1228         Span span = labelNode.GetSpan();
  
  1229         lexer.ConvertExternal(span);
  
  1230         int index = span.start;
  
  1231         indexNodeMap[index] = node.Get();
  
  1232         nodeIndexMap[node.Get()] = index;
  
  1233     }
  
  1234     public override void Visit(LabeledStatementNode& labeledStatementNode)
  
  1235     {
  
  1236         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(LabeledStatementNode)));
  
  1237         labeledStatementNode.Label()->Accept(*this);
  
  1238         treeViewNode->AddChild(node.Release());
  
  1239         labeledStatementNode.Stmt()->Accept(*this);
  
  1240         treeViewNode->AddChild(node.Release());
  
  1241         node.Reset(treeViewNode.Release());
  
  1242         node->SetData(&labeledStatementNode);
  
  1243         Span span = labeledStatementNode.GetSpan();
  
  1244         lexer.ConvertExternal(span);
  
  1245         int index = span.start;
  
  1246         indexNodeMap[index] = node.Get();
  
  1247         nodeIndexMap[node.Get()] = index;
  
  1248     }
  
  1249     public override void Visit(CompoundStatementNode& compoundStatementNode)
  
  1250     {
  
  1251         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(CompoundStatementNode)));
  
  1252         int ns = compoundStatementNode.Statements().Count();
  
  1253         for (int i = 0; i < ns; ++i;)
  
  1254         {
  
  1255             compoundStatementNode.Statements()[i]->Accept(*this);
  
  1256             treeViewNode->AddChild(node.Release());
  
  1257         }
  
  1258         node.Reset(treeViewNode.Release());
  
  1259         node->SetData(&compoundStatementNode);
  
  1260         Span span = compoundStatementNode.GetSpan();
  
  1261         lexer.ConvertExternal(span);
  
  1262         int index = span.start;
  
  1263         indexNodeMap[index] = node.Get();
  
  1264         nodeIndexMap[node.Get()] = index;
  
  1265     }
  
  1266     public override void Visit(ReturnStatementNode& returnStatementNode)
  
  1267     {
  
  1268         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ReturnStatementNode)));
  
  1269         if (returnStatementNode.Expression() != null)
  
  1270         {
  
  1271             returnStatementNode.Expression()->Accept(*this);
  
  1272             treeViewNode->AddChild(node.Release());
  
  1273         }
  
  1274         node.Reset(treeViewNode.Release());
  
  1275         node->SetData(&returnStatementNode);
  
  1276         Span span = returnStatementNode.GetSpan();
  
  1277         lexer.ConvertExternal(span);
  
  1278         int index = span.start;
  
  1279         indexNodeMap[index] = node.Get();
  
  1280         nodeIndexMap[node.Get()] = index;
  
  1281     }
  
  1282     public override void Visit(IfStatementNode& ifStatementNode)
  
  1283     {
  
  1284         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(IfStatementNode)));
  
  1285         ifStatementNode.Condition()->Accept(*this);
  
  1286         treeViewNode->AddChild(node.Release());
  
  1287         ifStatementNode.ThenS()->Accept(*this);
  
  1288         treeViewNode->AddChild(node.Release());
  
  1289         if (ifStatementNode.ElseS() != null)
  
  1290         {
  
  1291             ifStatementNode.ElseS()->Accept(*this);
  
  1292             treeViewNode->AddChild(node.Release());
  
  1293         }
  
  1294         node.Reset(treeViewNode.Release());
  
  1295         node->SetData(&ifStatementNode);
  
  1296         Span span = ifStatementNode.GetSpan();
  
  1297         lexer.ConvertExternal(span);
  
  1298         int index = span.start;
  
  1299         indexNodeMap[index] = node.Get();
  
  1300         nodeIndexMap[node.Get()] = index;
  
  1301     }
  
  1302     public override void Visit(WhileStatementNode& whileStatementNode)
  
  1303     {
  
  1304         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(WhileStatementNode)));
  
  1305         whileStatementNode.Condition()->Accept(*this);
  
  1306         treeViewNode->AddChild(node.Release());
  
  1307         whileStatementNode.Statement()->Accept(*this);
  
  1308         treeViewNode->AddChild(node.Release());
  
  1309         node.Reset(treeViewNode.Release());
  
  1310         node->SetData(&whileStatementNode);
  
  1311         Span span = whileStatementNode.GetSpan();
  
  1312         lexer.ConvertExternal(span);
  
  1313         int index = span.start;
  
  1314         indexNodeMap[index] = node.Get();
  
  1315         nodeIndexMap[node.Get()] = index;
  
  1316     }
  
  1317     public override void Visit(DoStatementNode& doStatementNode)
  
  1318     {
  
  1319         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DoStatementNode)));
  
  1320         doStatementNode.Statement()->Accept(*this);
  
  1321         treeViewNode->AddChild(node.Release());
  
  1322         doStatementNode.Condition()->Accept(*this);
  
  1323         treeViewNode->AddChild(node.Release());
  
  1324         node.Reset(treeViewNode.Release());
  
  1325         node->SetData(&doStatementNode);
  
  1326         Span span = doStatementNode.GetSpan();
  
  1327         lexer.ConvertExternal(span);
  
  1328         int index = span.start;
  
  1329         indexNodeMap[index] = node.Get();
  
  1330         nodeIndexMap[node.Get()] = index;
  
  1331     }
  
  1332     public override void Visit(ForStatementNode& forStatementNode)
  
  1333     {
  
  1334         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ForStatementNode)));
  
  1335         forStatementNode.InitS()->Accept(*this);
  
  1336         treeViewNode->AddChild(node.Release());
  
  1337         if (forStatementNode.Condition() != null)
  
  1338         {
  
  1339             forStatementNode.Condition()->Accept(*this);
  
  1340             treeViewNode->AddChild(node.Release());
  
  1341         }
  
  1342         forStatementNode.LoopS()->Accept(*this);
  
  1343         treeViewNode->AddChild(node.Release());
  
  1344         forStatementNode.ActionS()->Accept(*this);
  
  1345         treeViewNode->AddChild(node.Release());
  
  1346         node.Reset(treeViewNode.Release());
  
  1347         node->SetData(&forStatementNode);
  
  1348         Span span = forStatementNode.GetSpan();
  
  1349         lexer.ConvertExternal(span);
  
  1350         int index = span.start;
  
  1351         indexNodeMap[index] = node.Get();
  
  1352         nodeIndexMap[node.Get()] = index;
  
  1353     }
  
  1354     public override void Visit(BreakStatementNode& breakStatementNode)
  
  1355     {
  
  1356         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(BreakStatementNode)));
  
  1357         node.Reset(treeViewNode.Release());
  
  1358         node->SetData(&breakStatementNode);
  
  1359         Span span = breakStatementNode.GetSpan();
  
  1360         lexer.ConvertExternal(span);
  
  1361         int index = span.start;
  
  1362         indexNodeMap[index] = node.Get();
  
  1363         nodeIndexMap[node.Get()] = index;
  
  1364     }
  
  1365     public override void Visit(ContinueStatementNode& continueStatementNode)
  
  1366     {
  
  1367         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ContinueStatementNode)));
  
  1368         node.Reset(treeViewNode.Release());
  
  1369         node->SetData(&continueStatementNode);
  
  1370         Span span = continueStatementNode.GetSpan();
  
  1371         lexer.ConvertExternal(span);
  
  1372         int index = span.start;
  
  1373         indexNodeMap[index] = node.Get();
  
  1374         nodeIndexMap[node.Get()] = index;
  
  1375     }
  
  1376     public override void Visit(GotoStatementNode& gotoStatementNode)
  
  1377     {
  
  1378         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(GotoStatementNode)));
  
  1379         node.Reset(treeViewNode.Release());
  
  1380         node->SetData(&gotoStatementNode);
  
  1381         Span span = gotoStatementNode.GetSpan();
  
  1382         lexer.ConvertExternal(span);
  
  1383         int index = span.start;
  
  1384         indexNodeMap[index] = node.Get();
  
  1385         nodeIndexMap[node.Get()] = index;
  
  1386     }
  
  1387     public override void Visit(ConstructionStatementNode& constructionStatementNode)
  
  1388     {
  
  1389         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConstructionStatementNode)));
  
  1390         constructionStatementNode.TypeExpr()->Accept(*this);
  
  1391         treeViewNode->AddChild(node.Release());
  
  1392         constructionStatementNode.Id()->Accept(*this);
  
  1393         treeViewNode->AddChild(node.Release());
  
  1394         int na = constructionStatementNode.Arguments().Count();
  
  1395         for (int i = 0; i < na; ++i;)
  
  1396         {
  
  1397             constructionStatementNode.Arguments()[i]->Accept(*this);
  
  1398             treeViewNode->AddChild(node.Release());
  
  1399         }
  
  1400         node.Reset(treeViewNode.Release());
  
  1401         node->SetData(&constructionStatementNode);
  
  1402         Span span = constructionStatementNode.GetSpan();
  
  1403         lexer.ConvertExternal(span);
  
  1404         int index = span.start;
  
  1405         indexNodeMap[index] = node.Get();
  
  1406         nodeIndexMap[node.Get()] = index;
  
  1407     }
  
  1408     public override void Visit(DeleteStatementNode& deleteStatementNode)
  
  1409     {
  
  1410         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DeleteStatementNode)));
  
  1411         deleteStatementNode.Expression()->Accept(*this);
  
  1412         treeViewNode->AddChild(node.Release());
  
  1413         node.Reset(treeViewNode.Release());
  
  1414         node->SetData(&deleteStatementNode);
  
  1415         Span span = deleteStatementNode.GetSpan();
  
  1416         lexer.ConvertExternal(span);
  
  1417         int index = span.start;
  
  1418         indexNodeMap[index] = node.Get();
  
  1419         nodeIndexMap[node.Get()] = index;
  
  1420     }
  
  1421     public override void Visit(DestroyStatementNode& destroyStatementNode)
  
  1422     {
  
  1423         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DestroyStatementNode)));
  
  1424         destroyStatementNode.Expression()->Accept(*this);
  
  1425         treeViewNode->AddChild(node.Release());
  
  1426         node.Reset(treeViewNode.Release());
  
  1427         node->SetData(&destroyStatementNode);
  
  1428         Span span = destroyStatementNode.GetSpan();
  
  1429         lexer.ConvertExternal(span);
  
  1430         int index = span.start;
  
  1431         indexNodeMap[index] = node.Get();
  
  1432         nodeIndexMap[node.Get()] = index;
  
  1433     }
  
  1434     public override void Visit(AssignmentStatementNode& assignmentStatementNode)
  
  1435     {
  
  1436         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AssignmentStatementNode)));
  
  1437         assignmentStatementNode.TargetExpr()->Accept(*this);
  
  1438         treeViewNode->AddChild(node.Release());
  
  1439         assignmentStatementNode.SourceExpr()->Accept(*this);
  
  1440         treeViewNode->AddChild(node.Release());
  
  1441         node.Reset(treeViewNode.Release());
  
  1442         node->SetData(&assignmentStatementNode);
  
  1443         Span span = assignmentStatementNode.GetSpan();
  
  1444         lexer.ConvertExternal(span);
  
  1445         int index = span.start;
  
  1446         indexNodeMap[index] = node.Get();
  
  1447         nodeIndexMap[node.Get()] = index;
  
  1448     }
  
  1449     public override void Visit(ExpressionStatementNode& expressionStatementNode)
  
  1450     {
  
  1451         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ExpressionStatementNode)));
  
  1452         expressionStatementNode.Expression()->Accept(*this);
  
  1453         treeViewNode->AddChild(node.Release());
  
  1454         node.Reset(treeViewNode.Release());
  
  1455         node->SetData(&expressionStatementNode);
  
  1456         Span span = expressionStatementNode.GetSpan();
  
  1457         lexer.ConvertExternal(span);
  
  1458         int index = span.start;
  
  1459         indexNodeMap[index] = node.Get();
  
  1460         nodeIndexMap[node.Get()] = index;
  
  1461     }
  
  1462     public override void Visit(EmptyStatementNode& emptyStatementNode)
  
  1463     {
  
  1464         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(EmptyStatementNode)));
  
  1465         node.Reset(treeViewNode.Release());
  
  1466         node->SetData(&emptyStatementNode);
  
  1467         Span span = emptyStatementNode.GetSpan();
  
  1468         lexer.ConvertExternal(span);
  
  1469         int index = span.start;
  
  1470         indexNodeMap[index] = node.Get();
  
  1471         nodeIndexMap[node.Get()] = index;
  
  1472     }
  
  1473     public override void Visit(RangeForStatementNode& rangeForStatementNode)
  
  1474     {
  
  1475         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(RangeForStatementNode)));
  
  1476         rangeForStatementNode.TypeExpr()->Accept(*this);
  
  1477         treeViewNode->AddChild(node.Release());
  
  1478         rangeForStatementNode.Id()->Accept(*this);
  
  1479         treeViewNode->AddChild(node.Release());
  
  1480         rangeForStatementNode.Container()->Accept(*this);
  
  1481         treeViewNode->AddChild(node.Release());
  
  1482         rangeForStatementNode.Action()->Accept(*this);
  
  1483         treeViewNode->AddChild(node.Release());
  
  1484         node.Reset(treeViewNode.Release());
  
  1485         node->SetData(&rangeForStatementNode);
  
  1486         Span span = rangeForStatementNode.GetSpan();
  
  1487         lexer.ConvertExternal(span);
  
  1488         int index = span.start;
  
  1489         indexNodeMap[index] = node.Get();
  
  1490         nodeIndexMap[node.Get()] = index;
  
  1491     }
  
  1492     public override void Visit(SwitchStatementNode& switchStatementNode)
  
  1493     {
  
  1494         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(SwitchStatementNode)));
  
  1495         switchStatementNode.Condition()->Accept(*this);
  
  1496         treeViewNode->AddChild(node.Release());
  
  1497         int nc = switchStatementNode.Cases().Count();
  
  1498         for (int i = 0; i < nc; ++i;)
  
  1499         {
  
  1500             switchStatementNode.Cases()[i]->Accept(*this);
  
  1501             treeViewNode->AddChild(node.Release());
  
  1502         }
  
  1503         if (switchStatementNode.Default() != null)
  
  1504         {
  
  1505             switchStatementNode.Default()->Accept(*this);
  
  1506             treeViewNode->AddChild(node.Release());
  
  1507         }
  
  1508         node.Reset(treeViewNode.Release());
  
  1509         node->SetData(&switchStatementNode);
  
  1510         Span span = switchStatementNode.GetSpan();
  
  1511         lexer.ConvertExternal(span);
  
  1512         int index = span.start;
  
  1513         indexNodeMap[index] = node.Get();
  
  1514         nodeIndexMap[node.Get()] = index;
  
  1515     }
  
  1516     public override void Visit(CaseStatementNode& caseStatementNode)
  
  1517     {
  
  1518         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(CaseStatementNode)));
  
  1519         int nc = caseStatementNode.CaseExprs().Count();
  
  1520         for (int i = 0; i < nc; ++i;)
  
  1521         {
  
  1522             caseStatementNode.CaseExprs()[i]->Accept(*this);
  
  1523             treeViewNode->AddChild(node.Release());
  
  1524         }
  
  1525         int ns = caseStatementNode.Statements().Count();
  
  1526         for (int i = 0; i < ns; ++i;)
  
  1527         {
  
  1528             caseStatementNode.Statements()[i]->Accept(*this);
  
  1529             treeViewNode->AddChild(node.Release());
  
  1530         }
  
  1531         node.Reset(treeViewNode.Release());
  
  1532         node->SetData(&caseStatementNode);
  
  1533         Span span = caseStatementNode.GetSpan();
  
  1534         lexer.ConvertExternal(span);
  
  1535         int index = span.start;
  
  1536         indexNodeMap[index] = node.Get();
  
  1537         nodeIndexMap[node.Get()] = index;
  
  1538     }
  
  1539     public override void Visit(DefaultStatementNode& defaultStatementNode)
  
  1540     {
  
  1541         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DefaultStatementNode)));
  
  1542         int ns = defaultStatementNode.Statements().Count();
  
  1543         for (int i = 0; i < ns; ++i;)
  
  1544         {
  
  1545             defaultStatementNode.Statements()[i]->Accept(*this);
  
  1546             treeViewNode->AddChild(node.Release());
  
  1547         }
  
  1548         node.Reset(treeViewNode.Release());
  
  1549         node->SetData(&defaultStatementNode);
  
  1550         Span span = defaultStatementNode.GetSpan();
  
  1551         lexer.ConvertExternal(span);
  
  1552         int index = span.start;
  
  1553         indexNodeMap[index] = node.Get();
  
  1554         nodeIndexMap[node.Get()] = index;
  
  1555     }
  
  1556     public override void Visit(GotoCaseStatementNode& gotoCaseStatementNode)
  
  1557     {
  
  1558         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(GotoCaseStatementNode)));
  
  1559         gotoCaseStatementNode.CaseExpr()->Accept(*this);
  
  1560         treeViewNode->AddChild(node.Release());
  
  1561         node.Reset(treeViewNode.Release());
  
  1562         node->SetData(&gotoCaseStatementNode);
  
  1563         Span span = gotoCaseStatementNode.GetSpan();
  
  1564         lexer.ConvertExternal(span);
  
  1565         int index = span.start;
  
  1566         indexNodeMap[index] = node.Get();
  
  1567         nodeIndexMap[node.Get()] = index;
  
  1568     }
  
  1569     public override void Visit(GotoDefaultStatementNode& gotoDefaultStatementNode)
  
  1570     {
  
  1571         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(GotoDefaultStatementNode)));
  
  1572         node.Reset(treeViewNode.Release());
  
  1573         node->SetData(&gotoDefaultStatementNode);
  
  1574         Span span = gotoDefaultStatementNode.GetSpan();
  
  1575         lexer.ConvertExternal(span);
  
  1576         int index = span.start;
  
  1577         indexNodeMap[index] = node.Get();
  
  1578         nodeIndexMap[node.Get()] = index;
  
  1579     }
  
  1580     public override void Visit(ThrowStatementNode& throwStatementNode)
  
  1581     {
  
  1582         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ThrowStatementNode)));
  
  1583         if (throwStatementNode.Expression() != null)
  
  1584         {
  
  1585             throwStatementNode.Expression()->Accept(*this);
  
  1586             treeViewNode->AddChild(node.Release());
  
  1587         }
  
  1588         node.Reset(treeViewNode.Release());
  
  1589         node->SetData(&throwStatementNode);
  
  1590         Span span = throwStatementNode.GetSpan();
  
  1591         lexer.ConvertExternal(span);
  
  1592         int index = span.start;
  
  1593         indexNodeMap[index] = node.Get();
  
  1594         nodeIndexMap[node.Get()] = index;
  
  1595     }
  
  1596     public override void Visit(TryStatementNode& tryStatementNode)
  
  1597     {
  
  1598         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(TryStatementNode)));
  
  1599         tryStatementNode.TryBlock()->Accept(*this);
  
  1600         treeViewNode->AddChild(node.Release());
  
  1601         int n = tryStatementNode.Catches().Count();
  
  1602         for (int i = 0; i < n; ++i;)
  
  1603         {
  
  1604             tryStatementNode.Catches()[i]->Accept(*this);
  
  1605             treeViewNode->AddChild(node.Release());
  
  1606         }
  
  1607         node.Reset(treeViewNode.Release());
  
  1608         node->SetData(&tryStatementNode);
  
  1609         Span span = tryStatementNode.GetSpan();
  
  1610         lexer.ConvertExternal(span);
  
  1611         int index = span.start;
  
  1612         indexNodeMap[index] = node.Get();
  
  1613         nodeIndexMap[node.Get()] = index;
  
  1614     }
  
  1615     public override void Visit(CatchNode& catchNode)
  
  1616     {
  
  1617         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(CatchNode)));
  
  1618         catchNode.TypeExpr()->Accept(*this);
  
  1619         treeViewNode->AddChild(node.Release());
  
  1620         if (catchNode.Id() != null)
  
  1621         {
  
  1622             catchNode.Id()->Accept(*this);
  
  1623             treeViewNode->AddChild(node.Release());
  
  1624         }
  
  1625         catchNode.CatchBlock()->Accept(*this);
  
  1626         treeViewNode->AddChild(node.Release());
  
  1627         node.Reset(treeViewNode.Release());
  
  1628         node->SetData(&catchNode);
  
  1629         Span span = catchNode.GetSpan();
  
  1630         lexer.ConvertExternal(span);
  
  1631         int index = span.start;
  
  1632         indexNodeMap[index] = node.Get();
  
  1633         nodeIndexMap[node.Get()] = index;
  
  1634     }
  
  1635     public override void Visit(AssertStatementNode& assertStatementNode)
  
  1636     {
  
  1637         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AssertStatementNode)));
  
  1638         assertStatementNode.AssertExpr()->Accept(*this);
  
  1639         treeViewNode->AddChild(node.Release());
  
  1640         node.Reset(treeViewNode.Release());
  
  1641         node->SetData(&assertStatementNode);
  
  1642         Span span = assertStatementNode.GetSpan();
  
  1643         lexer.ConvertExternal(span);
  
  1644         int index = span.start;
  
  1645         indexNodeMap[index] = node.Get();
  
  1646         nodeIndexMap[node.Get()] = index;
  
  1647     }
  
  1648     public override void Visit(ConditionalCompilationPartNode& conditionalCompilationPartNode)
  
  1649     {
  
  1650         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConditionalCompilationPartNode)));
  
  1651         if (conditionalCompilationPartNode.Expr() != null)
  
  1652         {
  
  1653             conditionalCompilationPartNode.Expr()->Accept(*this);
  
  1654             treeViewNode->AddChild(node.Release());
  
  1655         }
  
  1656         int n = conditionalCompilationPartNode.Statements().Count();
  
  1657         for (int i = 0; i < n; ++i;)
  
  1658         {
  
  1659             conditionalCompilationPartNode.Statements()[i]->Accept(*this);
  
  1660             treeViewNode->AddChild(node.Release());
  
  1661         }
  
  1662         node.Reset(treeViewNode.Release());
  
  1663         node->SetData(&conditionalCompilationPartNode);
  
  1664         Span span = conditionalCompilationPartNode.GetSpan();
  
  1665         lexer.ConvertExternal(span);
  
  1666         int index = span.start;
  
  1667         indexNodeMap[index] = node.Get();
  
  1668         nodeIndexMap[node.Get()] = index;
  
  1669     }
  
  1670     public override void Visit(ConditionalCompilationDisjunctionNode& conditionalCompilationDisjunctionNode)
  
  1671     {
  
  1672         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConditionalCompilationDisjunctionNode)));
  
  1673         conditionalCompilationDisjunctionNode.Left()->Accept(*this);
  
  1674         treeViewNode->AddChild(node.Release());
  
  1675         conditionalCompilationDisjunctionNode.Right()->Accept(*this);
  
  1676         treeViewNode->AddChild(node.Release());
  
  1677         node.Reset(treeViewNode.Release());
  
  1678         node->SetData(&conditionalCompilationDisjunctionNode);
  
  1679         Span span = conditionalCompilationDisjunctionNode.GetSpan();
  
  1680         lexer.ConvertExternal(span);
  
  1681         int index = span.start;
  
  1682         indexNodeMap[index] = node.Get();
  
  1683         nodeIndexMap[node.Get()] = index;
  
  1684     }
  
  1685     public override void Visit(ConditionalCompilationConjunctionNode& conditionalCompilationConjunctionNode)
  
  1686     {
  
  1687         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConditionalCompilationConjunctionNode)));
  
  1688         conditionalCompilationConjunctionNode.Left()->Accept(*this);
  
  1689         treeViewNode->AddChild(node.Release());
  
  1690         conditionalCompilationConjunctionNode.Right()->Accept(*this);
  
  1691         treeViewNode->AddChild(node.Release());
  
  1692         node.Reset(treeViewNode.Release());
  
  1693         node->SetData(&conditionalCompilationConjunctionNode);
  
  1694         Span span = conditionalCompilationConjunctionNode.GetSpan();
  
  1695         lexer.ConvertExternal(span);
  
  1696         int index = span.start;
  
  1697         indexNodeMap[index] = node.Get();
  
  1698         nodeIndexMap[node.Get()] = index;
  
  1699     }
  
  1700     public override void Visit(ConditionalCompilationNotNode& conditionalCompilationNotNode)
  
  1701     {
  
  1702         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConditionalCompilationNotNode)));
  
  1703         conditionalCompilationNotNode.Expr()->Accept(*this);
  
  1704         treeViewNode->AddChild(node.Release());
  
  1705         node.Reset(treeViewNode.Release());
  
  1706         node->SetData(&conditionalCompilationNotNode);
  
  1707         Span span = conditionalCompilationNotNode.GetSpan();
  
  1708         lexer.ConvertExternal(span);
  
  1709         int index = span.start;
  
  1710         indexNodeMap[index] = node.Get();
  
  1711         nodeIndexMap[node.Get()] = index;
  
  1712     }
  
  1713     public override void Visit(ConditionalCompilationPrimaryNode& conditionalCompilationPrimaryNode)
  
  1714     {
  
  1715         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConditionalCompilationPrimaryNode)));
  
  1716         node.Reset(treeViewNode.Release());
  
  1717         node->SetData(&conditionalCompilationPrimaryNode);
  
  1718         Span span = conditionalCompilationPrimaryNode.GetSpan();
  
  1719         lexer.ConvertExternal(span);
  
  1720         int index = span.start;
  
  1721         indexNodeMap[index] = node.Get();
  
  1722         nodeIndexMap[node.Get()] = index;
  
  1723     }
  
  1724     public override void Visit(ParenthesizedConditionalCompilationExpressionNode& parenthesizeCondCompExprNode)
  
  1725     {
  
  1726         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ParenthesizedConditionalCompilationExpressionNode)));
  
  1727         parenthesizeCondCompExprNode.Expr()->Accept(*this);
  
  1728         treeViewNode->AddChild(node.Release());
  
  1729         node.Reset(treeViewNode.Release());
  
  1730         node->SetData(&parenthesizeCondCompExprNode);
  
  1731         Span span = parenthesizeCondCompExprNode.GetSpan();
  
  1732         lexer.ConvertExternal(span);
  
  1733         int index = span.start;
  
  1734         indexNodeMap[index] = node.Get();
  
  1735         nodeIndexMap[node.Get()] = index;
  
  1736     }
  
  1737     public override void Visit(ConditionalCompilationStatementNode& conditionalCompilationStatementNode)
  
  1738     {
  
  1739         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConditionalCompilationStatementNode)));
  
  1740         conditionalCompilationStatementNode.IfPart()->Accept(*this);
  
  1741         treeViewNode->AddChild(node.Release());
  
  1742         int n = conditionalCompilationStatementNode.ElifParts().Count();
  
  1743         for (int i = 0; i < n; ++i;)
  
  1744         {
  
  1745             conditionalCompilationStatementNode.ElifParts()[i]->Accept(*this);
  
  1746             treeViewNode->AddChild(node.Release());
  
  1747         }
  
  1748         if (conditionalCompilationStatementNode.ElsePart() != null)
  
  1749         {
  
  1750             conditionalCompilationStatementNode.ElsePart()->Accept(*this);
  
  1751             treeViewNode->AddChild(node.Release());
  
  1752         }
  
  1753         node.Reset(treeViewNode.Release());
  
  1754         node->SetData(&conditionalCompilationStatementNode);
  
  1755         Span span = conditionalCompilationStatementNode.GetSpan();
  
  1756         lexer.ConvertExternal(span);
  
  1757         int index = span.start;
  
  1758         indexNodeMap[index] = node.Get();
  
  1759         nodeIndexMap[node.Get()] = index;
  
  1760     }
  
  1761     public override void Visit(TypedefNode& typedefNode)
  
  1762     {
  
  1763         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(TypedefNode)));
  
  1764         typedefNode.TypeExpr()->Accept(*this);
  
  1765         treeViewNode->AddChild(node.Release());
  
  1766         typedefNode.Id()->Accept(*this);
  
  1767         treeViewNode->AddChild(node.Release());
  
  1768         node.Reset(treeViewNode.Release());
  
  1769         node->SetData(&typedefNode);
  
  1770         Span span = typedefNode.GetSpan();
  
  1771         lexer.ConvertExternal(span);
  
  1772         int index = span.start;
  
  1773         indexNodeMap[index] = node.Get();
  
  1774         nodeIndexMap[node.Get()] = index;
  
  1775     }
  
  1776     public override void Visit(ConstantNode& constantNode)
  
  1777     {
  
  1778         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConstantNode)));
  
  1779         constantNode.TypeExpr()->Accept(*this);
  
  1780         treeViewNode->AddChild(node.Release());
  
  1781         constantNode.Id()->Accept(*this);
  
  1782         treeViewNode->AddChild(node.Release());
  
  1783         constantNode.Value()->Accept(*this);
  
  1784         treeViewNode->AddChild(node.Release());
  
  1785         node.Reset(treeViewNode.Release());
  
  1786         node->SetData(&constantNode);
  
  1787         Span span = constantNode.GetSpan();
  
  1788         lexer.ConvertExternal(span);
  
  1789         int index = span.start;
  
  1790         indexNodeMap[index] = node.Get();
  
  1791         nodeIndexMap[node.Get()] = index;
  
  1792     }
  
  1793     public override void Visit(EnumTypeNode& enumTypeNode)
  
  1794     {
  
  1795         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(EnumTypeNode)));
  
  1796         enumTypeNode.Id()->Accept(*this);
  
  1797         treeViewNode->AddChild(node.Release());
  
  1798         if (enumTypeNode.GetUnderlyingType() != null)
  
  1799         {
  
  1800             enumTypeNode.GetUnderlyingType()->Accept(*this);
  
  1801             treeViewNode->AddChild(node.Release());
  
  1802         }
  
  1803         int n = enumTypeNode.Constants().Count();
  
  1804         for (int i = 0; i < n; ++i;)
  
  1805         {
  
  1806             enumTypeNode.Constants()[i]->Accept(*this);
  
  1807             treeViewNode->AddChild(node.Release());
  
  1808         }
  
  1809         node.Reset(treeViewNode.Release());
  
  1810         node->SetData(&enumTypeNode);
  
  1811         Span span = enumTypeNode.GetSpan();
  
  1812         lexer.ConvertExternal(span);
  
  1813         int index = span.start;
  
  1814         indexNodeMap[index] = node.Get();
  
  1815         nodeIndexMap[node.Get()] = index;
  
  1816     }
  
  1817     public override void Visit(EnumConstantNode& enumConstantNode)
  
  1818     {
  
  1819         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(EnumConstantNode)));
  
  1820         if (enumConstantNode.HasValue())
  
  1821         {
  
  1822             if (enumConstantNode.GetValue() != null)
  
  1823             {
  
  1824                 enumConstantNode.GetValue()->Accept(*this);
  
  1825                 treeViewNode->AddChild(node.Release());
  
  1826             }
  
  1827         }
  
  1828         enumConstantNode.Id()->Accept(*this);
  
  1829         treeViewNode->AddChild(node.Release());
  
  1830         node.Reset(treeViewNode.Release());
  
  1831         node->SetData(&enumConstantNode);
  
  1832         Span span = enumConstantNode.GetSpan();
  
  1833         lexer.ConvertExternal(span);
  
  1834         int index = span.start;
  
  1835         indexNodeMap[index] = node.Get();
  
  1836         nodeIndexMap[node.Get()] = index;
  
  1837     }
  
  1838     public override void Visit(ParameterNode& parameterNode)
  
  1839     {
  
  1840         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ParameterNode)));
  
  1841         parameterNode.TypeExpr()->Accept(*this);
  
  1842         treeViewNode->AddChild(node.Release());
  
  1843         if (parameterNode.Id() != null)
  
  1844         {
  
  1845             parameterNode.Id()->Accept(*this);
  
  1846             treeViewNode->AddChild(node.Release());
  
  1847         }
  
  1848         node.Reset(treeViewNode.Release());
  
  1849         node->SetData(¶meterNode);
  
  1850         Span span = parameterNode.GetSpan();
  
  1851         lexer.ConvertExternal(span);
  
  1852         int index = span.start;
  
  1853         indexNodeMap[index] = node.Get();
  
  1854         nodeIndexMap[node.Get()] = index;
  
  1855     }
  
  1856     public override void Visit(TemplateParameterNode& templateParameterNode)
  
  1857     {
  
  1858         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(TemplateParameterNode)));
  
  1859         templateParameterNode.Id()->Accept(*this);
  
  1860         treeViewNode->AddChild(node.Release());
  
  1861         if (templateParameterNode.DefaultTemplateArgument() != null)
  
  1862         {
  
  1863             templateParameterNode.DefaultTemplateArgument()->Accept(*this);
  
  1864             treeViewNode->AddChild(node.Release());
  
  1865         }
  
  1866         node.Reset(treeViewNode.Release());
  
  1867         node->SetData(&templateParameterNode);
  
  1868         Span span = templateParameterNode.GetSpan();
  
  1869         lexer.ConvertExternal(span);
  
  1870         int index = span.start;
  
  1871         indexNodeMap[index] = node.Get();
  
  1872         nodeIndexMap[node.Get()] = index;
  
  1873     }
  
  1874     public override void Visit(ConstNode& constNode)
  
  1875     {
  
  1876         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConstNode)));
  
  1877         constNode.Subject()->Accept(*this);
  
  1878         treeViewNode->AddChild(node.Release());
  
  1879         node.Reset(treeViewNode.Release());
  
  1880         node->SetData(&constNode);
  
  1881         Span span = constNode.GetSpan();
  
  1882         lexer.ConvertExternal(span);
  
  1883         int index = span.start;
  
  1884         indexNodeMap[index] = node.Get();
  
  1885         nodeIndexMap[node.Get()] = index;
  
  1886     }
  
  1887     public override void Visit(LValueRefNode& lvalueRefNode)
  
  1888     {
  
  1889         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(LValueRefNode)));
  
  1890         lvalueRefNode.Subject()->Accept(*this);
  
  1891         treeViewNode->AddChild(node.Release());
  
  1892         node.Reset(treeViewNode.Release());
  
  1893         node->SetData(&lvalueRefNode);
  
  1894         Span span = lvalueRefNode.GetSpan();
  
  1895         lexer.ConvertExternal(span);
  
  1896         int index = span.start;
  
  1897         indexNodeMap[index] = node.Get();
  
  1898         nodeIndexMap[node.Get()] = index;
  
  1899     }
  
  1900     public override void Visit(RValueRefNode& rvalueRefNode)
  
  1901     {
  
  1902         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(RValueRefNode)));
  
  1903         rvalueRefNode.Subject()->Accept(*this);
  
  1904         treeViewNode->AddChild(node.Release());
  
  1905         node.Reset(treeViewNode.Release());
  
  1906         node->SetData(&rvalueRefNode);
  
  1907         Span span = rvalueRefNode.GetSpan();
  
  1908         lexer.ConvertExternal(span);
  
  1909         int index = span.start;
  
  1910         indexNodeMap[index] = node.Get();
  
  1911         nodeIndexMap[node.Get()] = index;
  
  1912     }
  
  1913     public override void Visit(PointerNode& pointerNode)
  
  1914     {
  
  1915         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(PointerNode)));
  
  1916         pointerNode.Subject()->Accept(*this);
  
  1917         treeViewNode->AddChild(node.Release());
  
  1918         node.Reset(treeViewNode.Release());
  
  1919         node->SetData(&pointerNode);
  
  1920         Span span = pointerNode.GetSpan();
  
  1921         lexer.ConvertExternal(span);
  
  1922         int index = span.start;
  
  1923         indexNodeMap[index] = node.Get();
  
  1924         nodeIndexMap[node.Get()] = index;
  
  1925     }
  
  1926     public override void Visit(ArrayNode& arrayNode)
  
  1927     {
  
  1928         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ArrayNode)));
  
  1929         arrayNode.Subject()->Accept(*this);
  
  1930         treeViewNode->AddChild(node.Release());
  
  1931         if (arrayNode.Size() != null)
  
  1932         {
  
  1933             arrayNode.Size()->Accept(*this);
  
  1934             treeViewNode->AddChild(node.Release());
  
  1935         }
  
  1936         node.Reset(treeViewNode.Release());
  
  1937         node->SetData(&arrayNode);
  
  1938         Span span = arrayNode.GetSpan();
  
  1939         lexer.ConvertExternal(span);
  
  1940         int index = span.start;
  
  1941         indexNodeMap[index] = node.Get();
  
  1942         nodeIndexMap[node.Get()] = index;
  
  1943     }
  
  1944     public override void Visit(DotNode& dotNode)
  
  1945     {
  
  1946         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DotNode)));
  
  1947         dotNode.Subject()->Accept(*this);
  
  1948         treeViewNode->AddChild(node.Release());
  
  1949         dotNode.MemberId()->Accept(*this);
  
  1950         treeViewNode->AddChild(node.Release());
  
  1951         node.Reset(treeViewNode.Release());
  
  1952         node->SetData(&dotNode);
  
  1953         Span span = dotNode.GetSpan();
  
  1954         lexer.ConvertExternal(span);
  
  1955         int index = span.start;
  
  1956         indexNodeMap[index] = node.Get();
  
  1957         nodeIndexMap[node.Get()] = index;
  
  1958     }
  
  1959     public override void Visit(ArrowNode& arrowNode)
  
  1960     {
  
  1961         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ArrowNode)));
  
  1962         arrowNode.Subject()->Accept(*this);
  
  1963         treeViewNode->AddChild(node.Release());
  
  1964         arrowNode.MemberId()->Accept(*this);
  
  1965         treeViewNode->AddChild(node.Release());
  
  1966         node.Reset(treeViewNode.Release());
  
  1967         node->SetData(&arrowNode);
  
  1968         Span span = arrowNode.GetSpan();
  
  1969         lexer.ConvertExternal(span);
  
  1970         int index = span.start;
  
  1971         indexNodeMap[index] = node.Get();
  
  1972         nodeIndexMap[node.Get()] = index;
  
  1973     }
  
  1974     public override void Visit(EquivalenceNode& equivalenceNode)
  
  1975     {
  
  1976         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(EquivalenceNode)));
  
  1977         equivalenceNode.Left()->Accept(*this);
  
  1978         treeViewNode->AddChild(node.Release());
  
  1979         equivalenceNode.Right()->Accept(*this);
  
  1980         treeViewNode->AddChild(node.Release());
  
  1981         node.Reset(treeViewNode.Release());
  
  1982         node->SetData(&equivalenceNode);
  
  1983         Span span = equivalenceNode.GetSpan();
  
  1984         lexer.ConvertExternal(span);
  
  1985         int index = span.start;
  
  1986         indexNodeMap[index] = node.Get();
  
  1987         nodeIndexMap[node.Get()] = index;
  
  1988     }
  
  1989     public override void Visit(ImplicationNode& implicationNode)
  
  1990     {
  
  1991         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ImplicationNode)));
  
  1992         implicationNode.Left()->Accept(*this);
  
  1993         treeViewNode->AddChild(node.Release());
  
  1994         implicationNode.Right()->Accept(*this);
  
  1995         treeViewNode->AddChild(node.Release());
  
  1996         node.Reset(treeViewNode.Release());
  
  1997         node->SetData(&implicationNode);
  
  1998         Span span = implicationNode.GetSpan();
  
  1999         lexer.ConvertExternal(span);
  
  2000         int index = span.start;
  
  2001         indexNodeMap[index] = node.Get();
  
  2002         nodeIndexMap[node.Get()] = index;
  
  2003     }
  
  2004     public override void Visit(DisjunctionNode& disjunctionNode)
  
  2005     {
  
  2006         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DisjunctionNode)));
  
  2007         disjunctionNode.Left()->Accept(*this);
  
  2008         treeViewNode->AddChild(node.Release());
  
  2009         disjunctionNode.Right()->Accept(*this);
  
  2010         treeViewNode->AddChild(node.Release());
  
  2011         node.Reset(treeViewNode.Release());
  
  2012         node->SetData(&disjunctionNode);
  
  2013         Span span = disjunctionNode.GetSpan();
  
  2014         lexer.ConvertExternal(span);
  
  2015         int index = span.start;
  
  2016         indexNodeMap[index] = node.Get();
  
  2017         nodeIndexMap[node.Get()] = index;
  
  2018     }
  
  2019     public override void Visit(ConjunctionNode& conjunctionNode)
  
  2020     {
  
  2021         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConjunctionNode)));
  
  2022         conjunctionNode.Left()->Accept(*this);
  
  2023         treeViewNode->AddChild(node.Release());
  
  2024         conjunctionNode.Right()->Accept(*this);
  
  2025         treeViewNode->AddChild(node.Release());
  
  2026         node.Reset(treeViewNode.Release());
  
  2027         node->SetData(&conjunctionNode);
  
  2028         Span span = conjunctionNode.GetSpan();
  
  2029         lexer.ConvertExternal(span);
  
  2030         int index = span.start;
  
  2031         indexNodeMap[index] = node.Get();
  
  2032         nodeIndexMap[node.Get()] = index;
  
  2033     }
  
  2034     public override void Visit(BitOrNode& bitOrNode)
  
  2035     {
  
  2036         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(BitOrNode)));
  
  2037         bitOrNode.Left()->Accept(*this);
  
  2038         treeViewNode->AddChild(node.Release());
  
  2039         bitOrNode.Right()->Accept(*this);
  
  2040         treeViewNode->AddChild(node.Release());
  
  2041         node.Reset(treeViewNode.Release());
  
  2042         node->SetData(&bitOrNode);
  
  2043         Span span = bitOrNode.GetSpan();
  
  2044         lexer.ConvertExternal(span);
  
  2045         int index = span.start;
  
  2046         indexNodeMap[index] = node.Get();
  
  2047         nodeIndexMap[node.Get()] = index;
  
  2048     }
  
  2049     public override void Visit(BitXorNode& bitXorNode)
  
  2050     {
  
  2051         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(BitXorNode)));
  
  2052         bitXorNode.Left()->Accept(*this);
  
  2053         treeViewNode->AddChild(node.Release());
  
  2054         bitXorNode.Right()->Accept(*this);
  
  2055         treeViewNode->AddChild(node.Release());
  
  2056         node.Reset(treeViewNode.Release());
  
  2057         node->SetData(&bitXorNode);
  
  2058         Span span = bitXorNode.GetSpan();
  
  2059         lexer.ConvertExternal(span);
  
  2060         int index = span.start;
  
  2061         indexNodeMap[index] = node.Get();
  
  2062         nodeIndexMap[node.Get()] = index;
  
  2063     }
  
  2064     public override void Visit(BitAndNode& bitAndNode)
  
  2065     {
  
  2066         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(BitAndNode)));
  
  2067         bitAndNode.Left()->Accept(*this);
  
  2068         treeViewNode->AddChild(node.Release());
  
  2069         bitAndNode.Right()->Accept(*this);
  
  2070         treeViewNode->AddChild(node.Release());
  
  2071         node.Reset(treeViewNode.Release());
  
  2072         node->SetData(&bitAndNode);
  
  2073         Span span = bitAndNode.GetSpan();
  
  2074         lexer.ConvertExternal(span);
  
  2075         int index = span.start;
  
  2076         indexNodeMap[index] = node.Get();
  
  2077         nodeIndexMap[node.Get()] = index;
  
  2078     }
  
  2079     public override void Visit(EqualNode& equalNode)
  
  2080     {
  
  2081         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(EqualNode)));
  
  2082         equalNode.Left()->Accept(*this);
  
  2083         treeViewNode->AddChild(node.Release());
  
  2084         equalNode.Right()->Accept(*this);
  
  2085         treeViewNode->AddChild(node.Release());
  
  2086         node.Reset(treeViewNode.Release());
  
  2087         node->SetData(&equalNode);
  
  2088         Span span = equalNode.GetSpan();
  
  2089         lexer.ConvertExternal(span);
  
  2090         int index = span.start;
  
  2091         indexNodeMap[index] = node.Get();
  
  2092         nodeIndexMap[node.Get()] = index;
  
  2093     }
  
  2094     public override void Visit(NotEqualNode& notEqualNode)
  
  2095     {
  
  2096         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(NotEqualNode)));
  
  2097         notEqualNode.Left()->Accept(*this);
  
  2098         treeViewNode->AddChild(node.Release());
  
  2099         notEqualNode.Right()->Accept(*this);
  
  2100         treeViewNode->AddChild(node.Release());
  
  2101         node.Reset(treeViewNode.Release());
  
  2102         node->SetData(¬EqualNode);
  
  2103         Span span = notEqualNode.GetSpan();
  
  2104         lexer.ConvertExternal(span);
  
  2105         int index = span.start;
  
  2106         indexNodeMap[index] = node.Get();
  
  2107         nodeIndexMap[node.Get()] = index;
  
  2108     }
  
  2109     public override void Visit(LessNode& lessNode)
  
  2110     {
  
  2111         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(LessNode)));
  
  2112         lessNode.Left()->Accept(*this);
  
  2113         treeViewNode->AddChild(node.Release());
  
  2114         lessNode.Right()->Accept(*this);
  
  2115         treeViewNode->AddChild(node.Release());
  
  2116         node.Reset(treeViewNode.Release());
  
  2117         node->SetData(&lessNode);
  
  2118         Span span = lessNode.GetSpan();
  
  2119         lexer.ConvertExternal(span);
  
  2120         int index = span.start;
  
  2121         indexNodeMap[index] = node.Get();
  
  2122         nodeIndexMap[node.Get()] = index;
  
  2123     }
  
  2124     public override void Visit(GreaterNode& greaterNode)
  
  2125     {
  
  2126         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(GreaterNode)));
  
  2127         greaterNode.Left()->Accept(*this);
  
  2128         treeViewNode->AddChild(node.Release());
  
  2129         greaterNode.Right()->Accept(*this);
  
  2130         treeViewNode->AddChild(node.Release());
  
  2131         node.Reset(treeViewNode.Release());
  
  2132         node->SetData(&greaterNode);
  
  2133         Span span = greaterNode.GetSpan();
  
  2134         lexer.ConvertExternal(span);
  
  2135         int index = span.start;
  
  2136         indexNodeMap[index] = node.Get();
  
  2137         nodeIndexMap[node.Get()] = index;
  
  2138     }
  
  2139     public override void Visit(LessOrEqualNode& lessOrEqualNode)
  
  2140     {
  
  2141         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(LessOrEqualNode)));
  
  2142         lessOrEqualNode.Left()->Accept(*this);
  
  2143         treeViewNode->AddChild(node.Release());
  
  2144         lessOrEqualNode.Right()->Accept(*this);
  
  2145         treeViewNode->AddChild(node.Release());
  
  2146         node.Reset(treeViewNode.Release());
  
  2147         node->SetData(&lessOrEqualNode);
  
  2148         Span span = lessOrEqualNode.GetSpan();
  
  2149         lexer.ConvertExternal(span);
  
  2150         int index = span.start;
  
  2151         indexNodeMap[index] = node.Get();
  
  2152         nodeIndexMap[node.Get()] = index;
  
  2153     }
  
  2154     public override void Visit(GreaterOrEqualNode& greaterOrEqualNode)
  
  2155     {
  
  2156         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(GreaterOrEqualNode)));
  
  2157         greaterOrEqualNode.Left()->Accept(*this);
  
  2158         treeViewNode->AddChild(node.Release());
  
  2159         greaterOrEqualNode.Right()->Accept(*this);
  
  2160         treeViewNode->AddChild(node.Release());
  
  2161         node.Reset(treeViewNode.Release());
  
  2162         node->SetData(&greaterOrEqualNode);
  
  2163         Span span = greaterOrEqualNode.GetSpan();
  
  2164         lexer.ConvertExternal(span);
  
  2165         int index = span.start;
  
  2166         indexNodeMap[index] = node.Get();
  
  2167         nodeIndexMap[node.Get()] = index;
  
  2168     }
  
  2169     public override void Visit(ShiftLeftNode& shiftLeftNode)
  
  2170     {
  
  2171         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ShiftLeftNode)));
  
  2172         shiftLeftNode.Left()->Accept(*this);
  
  2173         treeViewNode->AddChild(node.Release());
  
  2174         shiftLeftNode.Right()->Accept(*this);
  
  2175         treeViewNode->AddChild(node.Release());
  
  2176         node.Reset(treeViewNode.Release());
  
  2177         node->SetData(&shiftLeftNode);
  
  2178         Span span = shiftLeftNode.GetSpan();
  
  2179         lexer.ConvertExternal(span);
  
  2180         int index = span.start;
  
  2181         indexNodeMap[index] = node.Get();
  
  2182         nodeIndexMap[node.Get()] = index;
  
  2183     }
  
  2184     public override void Visit(ShiftRightNode& shiftRightNode)
  
  2185     {
  
  2186         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ShiftRightNode)));
  
  2187         shiftRightNode.Left()->Accept(*this);
  
  2188         treeViewNode->AddChild(node.Release());
  
  2189         shiftRightNode.Right()->Accept(*this);
  
  2190         treeViewNode->AddChild(node.Release());
  
  2191         node.Reset(treeViewNode.Release());
  
  2192         node->SetData(&shiftRightNode);
  
  2193         Span span = shiftRightNode.GetSpan();
  
  2194         lexer.ConvertExternal(span);
  
  2195         int index = span.start;
  
  2196         indexNodeMap[index] = node.Get();
  
  2197         nodeIndexMap[node.Get()] = index;
  
  2198     }
  
  2199     public override void Visit(AddNode& addNode)
  
  2200     {
  
  2201         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AddNode)));
  
  2202         addNode.Left()->Accept(*this);
  
  2203         treeViewNode->AddChild(node.Release());
  
  2204         addNode.Right()->Accept(*this);
  
  2205         treeViewNode->AddChild(node.Release());
  
  2206         node.Reset(treeViewNode.Release());
  
  2207         node->SetData(&addNode);
  
  2208         Span span = addNode.GetSpan();
  
  2209         lexer.ConvertExternal(span);
  
  2210         int index = span.start;
  
  2211         indexNodeMap[index] = node.Get();
  
  2212         nodeIndexMap[node.Get()] = index;
  
  2213     }
  
  2214     public override void Visit(SubNode& subNode)
  
  2215     {
  
  2216         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(SubNode)));
  
  2217         subNode.Left()->Accept(*this);
  
  2218         treeViewNode->AddChild(node.Release());
  
  2219         subNode.Right()->Accept(*this);
  
  2220         treeViewNode->AddChild(node.Release());
  
  2221         node.Reset(treeViewNode.Release());
  
  2222         node->SetData(&subNode);
  
  2223         Span span = subNode.GetSpan();
  
  2224         lexer.ConvertExternal(span);
  
  2225         int index = span.start;
  
  2226         indexNodeMap[index] = node.Get();
  
  2227         nodeIndexMap[node.Get()] = index;
  
  2228     }
  
  2229     public override void Visit(MulNode& mulNode)
  
  2230     {
  
  2231         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(MulNode)));
  
  2232         mulNode.Left()->Accept(*this);
  
  2233         treeViewNode->AddChild(node.Release());
  
  2234         mulNode.Right()->Accept(*this);
  
  2235         treeViewNode->AddChild(node.Release());
  
  2236         node.Reset(treeViewNode.Release());
  
  2237         node->SetData(&mulNode);
  
  2238         Span span = mulNode.GetSpan();
  
  2239         lexer.ConvertExternal(span);
  
  2240         int index = span.start;
  
  2241         indexNodeMap[index] = node.Get();
  
  2242         nodeIndexMap[node.Get()] = index;
  
  2243     }
  
  2244     public override void Visit(DivNode& divNode)
  
  2245     {
  
  2246         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DivNode)));
  
  2247         divNode.Left()->Accept(*this);
  
  2248         treeViewNode->AddChild(node.Release());
  
  2249         divNode.Right()->Accept(*this);
  
  2250         treeViewNode->AddChild(node.Release());
  
  2251         node.Reset(treeViewNode.Release());
  
  2252         node->SetData(&divNode);
  
  2253         Span span = divNode.GetSpan();
  
  2254         lexer.ConvertExternal(span);
  
  2255         int index = span.start;
  
  2256         indexNodeMap[index] = node.Get();
  
  2257         nodeIndexMap[node.Get()] = index;
  
  2258     }
  
  2259     public override void Visit(RemNode& remNode)
  
  2260     {
  
  2261         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(RemNode)));
  
  2262         remNode.Left()->Accept(*this);
  
  2263         treeViewNode->AddChild(node.Release());
  
  2264         remNode.Right()->Accept(*this);
  
  2265         treeViewNode->AddChild(node.Release());
  
  2266         node.Reset(treeViewNode.Release());
  
  2267         node->SetData(&remNode);
  
  2268         Span span = remNode.GetSpan();
  
  2269         lexer.ConvertExternal(span);
  
  2270         int index = span.start;
  
  2271         indexNodeMap[index] = node.Get();
  
  2272         nodeIndexMap[node.Get()] = index;
  
  2273     }
  
  2274     public override void Visit(NotNode& notNode)
  
  2275     {
  
  2276         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(NotNode)));
  
  2277         notNode.Subject()->Accept(*this);
  
  2278         treeViewNode->AddChild(node.Release());
  
  2279         node.Reset(treeViewNode.Release());
  
  2280         node->SetData(¬Node);
  
  2281         Span span = notNode.GetSpan();
  
  2282         lexer.ConvertExternal(span);
  
  2283         int index = span.start;
  
  2284         indexNodeMap[index] = node.Get();
  
  2285         nodeIndexMap[node.Get()] = index;
  
  2286     }
  
  2287     public override void Visit(UnaryPlusNode& unaryPlusNode)
  
  2288     {
  
  2289         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(UnaryPlusNode)));
  
  2290         unaryPlusNode.Subject()->Accept(*this);
  
  2291         treeViewNode->AddChild(node.Release());
  
  2292         node.Reset(treeViewNode.Release());
  
  2293         node->SetData(&unaryPlusNode);
  
  2294         Span span = unaryPlusNode.GetSpan();
  
  2295         lexer.ConvertExternal(span);
  
  2296         int index = span.start;
  
  2297         indexNodeMap[index] = node.Get();
  
  2298         nodeIndexMap[node.Get()] = index;
  
  2299     }
  
  2300     public override void Visit(UnaryMinusNode& unaryMinusNode)
  
  2301     {
  
  2302         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(UnaryMinusNode)));
  
  2303         unaryMinusNode.Subject()->Accept(*this);
  
  2304         treeViewNode->AddChild(node.Release());
  
  2305         node.Reset(treeViewNode.Release());
  
  2306         node->SetData(&unaryMinusNode);
  
  2307         Span span = unaryMinusNode.GetSpan();
  
  2308         lexer.ConvertExternal(span);
  
  2309         int index = span.start;
  
  2310         indexNodeMap[index] = node.Get();
  
  2311         nodeIndexMap[node.Get()] = index;
  
  2312     }
  
  2313     public override void Visit(PrefixIncrementNode& prefixIncrementNode)
  
  2314     {
  
  2315         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(PrefixIncrementNode)));
  
  2316         prefixIncrementNode.Subject()->Accept(*this);
  
  2317         treeViewNode->AddChild(node.Release());
  
  2318         node.Reset(treeViewNode.Release());
  
  2319         node->SetData(&prefixIncrementNode);
  
  2320         Span span = prefixIncrementNode.GetSpan();
  
  2321         lexer.ConvertExternal(span);
  
  2322         int index = span.start;
  
  2323         indexNodeMap[index] = node.Get();
  
  2324         nodeIndexMap[node.Get()] = index;
  
  2325     }
  
  2326     public override void Visit(PrefixDecrementNode& prefixDecrementNode)
  
  2327     {
  
  2328         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(PrefixDecrementNode)));
  
  2329         prefixDecrementNode.Subject()->Accept(*this);
  
  2330         treeViewNode->AddChild(node.Release());
  
  2331         node.Reset(treeViewNode.Release());
  
  2332         node->SetData(&prefixDecrementNode);
  
  2333         Span span = prefixDecrementNode.GetSpan();
  
  2334         lexer.ConvertExternal(span);
  
  2335         int index = span.start;
  
  2336         indexNodeMap[index] = node.Get();
  
  2337         nodeIndexMap[node.Get()] = index;
  
  2338     }
  
  2339     public override void Visit(DerefNode& derefNode)
  
  2340     {
  
  2341         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(DerefNode)));
  
  2342         derefNode.Subject()->Accept(*this);
  
  2343         treeViewNode->AddChild(node.Release());
  
  2344         node.Reset(treeViewNode.Release());
  
  2345         node->SetData(&derefNode);
  
  2346         Span span = derefNode.GetSpan();
  
  2347         lexer.ConvertExternal(span);
  
  2348         int index = span.start;
  
  2349         indexNodeMap[index] = node.Get();
  
  2350         nodeIndexMap[node.Get()] = index;
  
  2351     }
  
  2352     public override void Visit(AddrOfNode& addrOfNode)
  
  2353     {
  
  2354         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AddrOfNode)));
  
  2355         addrOfNode.Subject()->Accept(*this);
  
  2356         treeViewNode->AddChild(node.Release());
  
  2357         node.Reset(treeViewNode.Release());
  
  2358         node->SetData(&addrOfNode);
  
  2359         Span span = addrOfNode.GetSpan();
  
  2360         lexer.ConvertExternal(span);
  
  2361         int index = span.start;
  
  2362         indexNodeMap[index] = node.Get();
  
  2363         nodeIndexMap[node.Get()] = index;
  
  2364     }
  
  2365     public override void Visit(ComplementNode& complementNode)
  
  2366     {
  
  2367         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ComplementNode)));
  
  2368         complementNode.Subject()->Accept(*this);
  
  2369         treeViewNode->AddChild(node.Release());
  
  2370         node.Reset(treeViewNode.Release());
  
  2371         node->SetData(&complementNode);
  
  2372         Span span = complementNode.GetSpan();
  
  2373         lexer.ConvertExternal(span);
  
  2374         int index = span.start;
  
  2375         indexNodeMap[index] = node.Get();
  
  2376         nodeIndexMap[node.Get()] = index;
  
  2377     }
  
  2378     public override void Visit(IsNode& isNode)
  
  2379     {
  
  2380         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(IsNode)));
  
  2381         isNode.Expr()->Accept(*this);
  
  2382         treeViewNode->AddChild(node.Release());
  
  2383         isNode.TargetTypeExpr()->Accept(*this);
  
  2384         treeViewNode->AddChild(node.Release());
  
  2385         node.Reset(treeViewNode.Release());
  
  2386         node->SetData(&isNode);
  
  2387         Span span = isNode.GetSpan();
  
  2388         lexer.ConvertExternal(span);
  
  2389         int index = span.start;
  
  2390         indexNodeMap[index] = node.Get();
  
  2391         nodeIndexMap[node.Get()] = index;
  
  2392     }
  
  2393     public override void Visit(AsNode& asNode)
  
  2394     {
  
  2395         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AsNode)));
  
  2396         asNode.Expr()->Accept(*this);
  
  2397         treeViewNode->AddChild(node.Release());
  
  2398         asNode.TargetTypeExpr()->Accept(*this);
  
  2399         treeViewNode->AddChild(node.Release());
  
  2400         node.Reset(treeViewNode.Release());
  
  2401         node->SetData(&asNode);
  
  2402         Span span = asNode.GetSpan();
  
  2403         lexer.ConvertExternal(span);
  
  2404         int index = span.start;
  
  2405         indexNodeMap[index] = node.Get();
  
  2406         nodeIndexMap[node.Get()] = index;
  
  2407     }
  
  2408     public override void Visit(IndexingNode& indexingNode)
  
  2409     {
  
  2410         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(IndexingNode)));
  
  2411         indexingNode.Subject()->Accept(*this);
  
  2412         treeViewNode->AddChild(node.Release());
  
  2413         indexingNode.Index()->Accept(*this);
  
  2414         treeViewNode->AddChild(node.Release());
  
  2415         node.Reset(treeViewNode.Release());
  
  2416         node->SetData(&indexingNode);
  
  2417         Span span = indexingNode.GetSpan();
  
  2418         lexer.ConvertExternal(span);
  
  2419         int index = span.start;
  
  2420         indexNodeMap[index] = node.Get();
  
  2421         nodeIndexMap[node.Get()] = index;
  
  2422     }
  
  2423     public override void Visit(InvokeNode& invokeNode)
  
  2424     {
  
  2425         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(InvokeNode)));
  
  2426         invokeNode.Subject()->Accept(*this);
  
  2427         treeViewNode->AddChild(node.Release());
  
  2428         int n = invokeNode.Arguments().Count();
  
  2429         for (int i = 0; i < n; ++i;)
  
  2430         {
  
  2431             invokeNode.Arguments()[i]->Accept(*this);
  
  2432             treeViewNode->AddChild(node.Release());
  
  2433         }
  
  2434         node.Reset(treeViewNode.Release());
  
  2435         node->SetData(&invokeNode);
  
  2436         Span span = invokeNode.GetSpan();
  
  2437         lexer.ConvertExternal(span);
  
  2438         int index = span.start;
  
  2439         indexNodeMap[index] = node.Get();
  
  2440         nodeIndexMap[node.Get()] = index;
  
  2441     }
  
  2442     public override void Visit(PostfixIncrementNode& postfixIncrementNode)
  
  2443     {
  
  2444         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(PostfixIncrementNode)));
  
  2445         postfixIncrementNode.Subject()->Accept(*this);
  
  2446         treeViewNode->AddChild(node.Release());
  
  2447         node.Reset(treeViewNode.Release());
  
  2448         node->SetData(&postfixIncrementNode);
  
  2449         Span span = postfixIncrementNode.GetSpan();
  
  2450         lexer.ConvertExternal(span);
  
  2451         int index = span.start;
  
  2452         indexNodeMap[index] = node.Get();
  
  2453         nodeIndexMap[node.Get()] = index;
  
  2454     }
  
  2455     public override void Visit(PostfixDecrementNode& postfixDecrementNode)
  
  2456     {
  
  2457         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(PostfixDecrementNode)));
  
  2458         postfixDecrementNode.Subject()->Accept(*this);
  
  2459         treeViewNode->AddChild(node.Release());
  
  2460         node.Reset(treeViewNode.Release());
  
  2461         node->SetData(&postfixDecrementNode);
  
  2462         Span span = postfixDecrementNode.GetSpan();
  
  2463         lexer.ConvertExternal(span);
  
  2464         int index = span.start;
  
  2465         indexNodeMap[index] = node.Get();
  
  2466         nodeIndexMap[node.Get()] = index;
  
  2467     }
  
  2468     public override void Visit(SizeOfNode& sizeOfNode)
  
  2469     {
  
  2470         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(SizeOfNode)));
  
  2471         sizeOfNode.Expression()->Accept(*this);
  
  2472         treeViewNode->AddChild(node.Release());
  
  2473         node.Reset(treeViewNode.Release());
  
  2474         node->SetData(&sizeOfNode);
  
  2475         Span span = sizeOfNode.GetSpan();
  
  2476         lexer.ConvertExternal(span);
  
  2477         int index = span.start;
  
  2478         indexNodeMap[index] = node.Get();
  
  2479         nodeIndexMap[node.Get()] = index;
  
  2480     }
  
  2481     public override void Visit(TypeNameNode& typeNameNode)
  
  2482     {
  
  2483         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(TypeNameNode)));
  
  2484         typeNameNode.Expression()->Accept(*this);
  
  2485         treeViewNode->AddChild(node.Release());
  
  2486         node.Reset(treeViewNode.Release());
  
  2487         node->SetData(&typeNameNode);
  
  2488         Span span = typeNameNode.GetSpan();
  
  2489         lexer.ConvertExternal(span);
  
  2490         int index = span.start;
  
  2491         indexNodeMap[index] = node.Get();
  
  2492         nodeIndexMap[node.Get()] = index;
  
  2493     }
  
  2494     public override void Visit(TypeIdNode& typeIdNode)
  
  2495     {
  
  2496         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(TypeIdNode)));
  
  2497         typeIdNode.Expression()->Accept(*this);
  
  2498         treeViewNode->AddChild(node.Release());
  
  2499         node.Reset(treeViewNode.Release());
  
  2500         node->SetData(&typeIdNode);
  
  2501         Span span = typeIdNode.GetSpan();
  
  2502         lexer.ConvertExternal(span);
  
  2503         int index = span.start;
  
  2504         indexNodeMap[index] = node.Get();
  
  2505         nodeIndexMap[node.Get()] = index;
  
  2506     }
  
  2507     public override void Visit(CastNode& castNode)
  
  2508     {
  
  2509         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(CastNode)));
  
  2510         castNode.TargetTypeExpr()->Accept(*this);
  
  2511         treeViewNode->AddChild(node.Release());
  
  2512         castNode.SourceExpr()->Accept(*this);
  
  2513         treeViewNode->AddChild(node.Release());
  
  2514         node.Reset(treeViewNode.Release());
  
  2515         node->SetData(&castNode);
  
  2516         Span span = castNode.GetSpan();
  
  2517         lexer.ConvertExternal(span);
  
  2518         int index = span.start;
  
  2519         indexNodeMap[index] = node.Get();
  
  2520         nodeIndexMap[node.Get()] = index;
  
  2521     }
  
  2522     public override void Visit(ConstructNode& constructNode)
  
  2523     {
  
  2524         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ConstructNode)));
  
  2525         constructNode.TypeExpr()->Accept(*this);
  
  2526         treeViewNode->AddChild(node.Release());
  
  2527         int n = constructNode.Arguments().Count();
  
  2528         for (int i = 0; i < n; ++i;)
  
  2529         {
  
  2530             constructNode.Arguments()[i]->Accept(*this);
  
  2531             treeViewNode->AddChild(node.Release());
  
  2532         }
  
  2533         node.Reset(treeViewNode.Release());
  
  2534         node->SetData(&constructNode);
  
  2535         Span span = constructNode.GetSpan();
  
  2536         lexer.ConvertExternal(span);
  
  2537         int index = span.start;
  
  2538         indexNodeMap[index] = node.Get();
  
  2539         nodeIndexMap[node.Get()] = index;
  
  2540     }
  
  2541     public override void Visit(NewNode& newNode)
  
  2542     {
  
  2543         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(NewNode)));
  
  2544         newNode.TypeExpr()->Accept(*this);
  
  2545         treeViewNode->AddChild(node.Release());
  
  2546         int n = newNode.Arguments().Count();
  
  2547         for (int i = 0; i < n; ++i;)
  
  2548         {
  
  2549             newNode.Arguments()[i]->Accept(*this);
  
  2550             treeViewNode->AddChild(node.Release());
  
  2551         }
  
  2552         node.Reset(treeViewNode.Release());
  
  2553         node->SetData(&newNode);
  
  2554         Span span = newNode.GetSpan();
  
  2555         lexer.ConvertExternal(span);
  
  2556         int index = span.start;
  
  2557         indexNodeMap[index] = node.Get();
  
  2558         nodeIndexMap[node.Get()] = index;
  
  2559     }
  
  2560     public override void Visit(ThisNode& thisNode)
  
  2561     {
  
  2562         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ThisNode)));
  
  2563         node.Reset(treeViewNode.Release());
  
  2564         node->SetData(&thisNode);
  
  2565         Span span = thisNode.GetSpan();
  
  2566         lexer.ConvertExternal(span);
  
  2567         int index = span.start;
  
  2568         indexNodeMap[index] = node.Get();
  
  2569         nodeIndexMap[node.Get()] = index;
  
  2570     }
  
  2571     public override void Visit(BaseNode& baseNode)
  
  2572     {
  
  2573         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(BaseNode)));
  
  2574         node.Reset(treeViewNode.Release());
  
  2575         node->SetData(&baseNode);
  
  2576         Span span = baseNode.GetSpan();
  
  2577         lexer.ConvertExternal(span);
  
  2578         int index = span.start;
  
  2579         indexNodeMap[index] = node.Get();
  
  2580         nodeIndexMap[node.Get()] = index;
  
  2581     }
  
  2582     public override void Visit(ParenthesizedExpressionNode& parenthesizedExpressionNode)
  
  2583     {
  
  2584         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(ParenthesizedExpressionNode)));
  
  2585         parenthesizedExpressionNode.Subject()->Accept(*this);
  
  2586         treeViewNode->AddChild(node.Release());
  
  2587         node.Reset(treeViewNode.Release());
  
  2588         node->SetData(&parenthesizedExpressionNode);
  
  2589         Span span = parenthesizedExpressionNode.GetSpan();
  
  2590         lexer.ConvertExternal(span);
  
  2591         int index = span.start;
  
  2592         indexNodeMap[index] = node.Get();
  
  2593         nodeIndexMap[node.Get()] = index;
  
  2594     }
  
  2595     public override void Visit(GlobalVariableNode& globalVariableNode)
  
  2596     {
  
  2597         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(GlobalVariableNode)));
  
  2598         globalVariableNode.TypeExpr()->Accept(*this);
  
  2599         treeViewNode->AddChild(node.Release());
  
  2600         globalVariableNode.Id()->Accept(*this);
  
  2601         treeViewNode->AddChild(node.Release());
  
  2602         if (globalVariableNode.Initializer() != null)
  
  2603         {
  
  2604             globalVariableNode.Initializer()->Accept(*this);
  
  2605             treeViewNode->AddChild(node.Release());
  
  2606         }
  
  2607         node.Reset(treeViewNode.Release());
  
  2608         node->SetData(&globalVariableNode);
  
  2609         Span span = globalVariableNode.GetSpan();
  
  2610         lexer.ConvertExternal(span);
  
  2611         int index = span.start;
  
  2612         indexNodeMap[index] = node.Get();
  
  2613         nodeIndexMap[node.Get()] = index;
  
  2614     }
  
  2615     public override void Visit(AttributeNode& attribute)
  
  2616     {
  
  2617         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AttributeNode)));
  
  2618         node.Reset(treeViewNode.Release());
  
  2619         node->SetData(&attribute);
  
  2620         Span span = attribute.GetSpan();
  
  2621         lexer.ConvertExternal(span);
  
  2622         int index = span.start;
  
  2623         indexNodeMap[index] = node.Get();
  
  2624         nodeIndexMap[node.Get()] = index;
  
  2625     }
  
  2626     public override void Visit(AttributesNode& attributes)
  
  2627     {
  
  2628         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(AttributesNode)));
  
  2629         long n = attributes.GetAttributes().Count();
  
  2630         for (long i = 0; i < n; ++i;)
  
  2631         {
  
  2632             attributes.GetAttributes()[i]->Accept(*this);
  
  2633             treeViewNode->AddChild(node.Release());
  
  2634         }
  
  2635         node.Reset(treeViewNode.Release());
  
  2636         node->SetData(&attributes);
  
  2637         Span span = attributes.GetSpan();
  
  2638         lexer.ConvertExternal(span);
  
  2639         int index = span.start;
  
  2640         indexNodeMap[index] = node.Get();
  
  2641         nodeIndexMap[node.Get()] = index;
  
  2642     }
  
  2643     public override void Visit(CommentNode& commentNode)
  
  2644     {
  
  2645         UniquePtr<TreeViewNode> treeViewNode(new TreeViewNode(typename(CommentNode)));
  
  2646         node.Reset(treeViewNode.Release());
  
  2647         node->SetData(&commentNode);
  
  2648         Span span = commentNode.GetSpan();
  
  2649         lexer.ConvertExternal(span);
  
  2650         int index = span.start;
  
  2651         indexNodeMap[index] = node.Get();
  
  2652         nodeIndexMap[node.Get()] = index;
  
  2653     }
  
  2654     private CmajorLexer& lexer;
  
  2655     private UniquePtr<TreeViewNode> node;
  
  2656     private HashMap<int, TreeViewNode*> indexNodeMap;
  
  2657     private HashMap<TreeViewNode*, int> nodeIndexMap;
  
  2658 }