anchor.diff:    VarList, Variable, TypeInfo: TSyntaxNode;
   begin
     VarSect := TSyntaxNode.Create('variables');
  -
  -  FStack.Push(VarSect);
  -  try
  -    inherited VarSection;
  -  finally
  -    FStack.Pop;
  -  end;
  -
  -  FStack.Push(sVARIABLES);
  -  for VarList in VarSect.ChildNodes do
  -  begin
  -    TypeInfo := VarList.FindNode(UpperCase(sTYPE));
  -    for Variable in VarList.ChildNodes do
  +  try
  +    FStack.Push(VarSect);
  +    try
  +      inherited VarSection;
  +    finally
  +      FStack.Pop;
  +    end;
  +
  +    FStack.Push(sVARIABLES);
  +    for VarList in VarSect.ChildNodes do
       begin
  -      if not SameText(Variable.Name, sNAME) then
  -        Continue;
  -
  -      FStack.Push(sVARIABLE, False);
  -      try
  -        FStack.AddChild(Variable.Clone);
  -        FStack.AddChild(TypeInfo.Clone);
  -      finally
  -        FStack.Pop;
  -      end;
  -    end;
  -  end;
  -  FStack.Pop;
  +      TypeInfo := VarList.FindNode(UpperCase(sTYPE));
  +      for Variable in VarList.ChildNodes do
  +      begin
  +        if not SameText(Variable.Name, sNAME) then
  +          Continue;
  +
  +        FStack.Push(sVARIABLE, False);
  +        try
  +          FStack.AddChild(Variable.Clone);
  +          FStack.AddChild(TypeInfo.Clone);
  +        finally
  +          FStack.Pop;
  +        end;
  +      end;
  +    end;
  +    FStack.Pop;
  +  finally
  +    VarSect.Free;
  +  end;
   end;
   
   procedure TPasSyntaxTreeBuilder.VisibilityPrivate;
  
positive.code:   Col := Lexer.PosXY.X;
  
    RawStatement := TSyntaxNode.Create('STATEMENT');
  
    FStack.Push(RawStatement);
    try
      inherited;
    finally
      FStack.Pop;
    end;
  
    if not RawStatement.HasChildren then
      Exit;
  
    if RawStatement.FindNode(sASSIGN) <> nil then
    begin
      FStack.Push(sASSIGN, False);
      try
        FStack.Peek.SetAttribute('line', Line.ToString);
        FStack.Peek.SetAttribute('col', Col.ToString);
  
        NodeList := TList<TSyntaxNode>.Create;
        try
          AssignIdx := -1;
          for I := 0 to RawStatement.ChildNodes.Count - 1 do
          begin
            if RawStatement.ChildNodes[I].Name = sASSIGN then
            begin
              AssignIdx := I;
              Break;
            end;
            NodeList.Add(RawStatement.ChildNodes[I]);
          end;
          TExpressionTools.RawNodeListToTree(RawStatement, NodeList, FStack.AddChild('LHS', False));
  
          NodeList.Clear;
  
          for I := AssignIdx + 1 to RawStatement.ChildNodes.Count - 1 do
            NodeList.Add(RawStatement.ChildNodes[I]);
          TExpressionTools.RawNodeListToTree(RawStatement, NodeList, FStack.AddChild('RHS', False));
        finally
          NodeList.Free;
        end;
      finally
        FStack.Pop;
      end;
    end else
    begin
      FStack.Push(sCALL, False);
      try
        FStack.Peek.SetAttribute('line', Line.ToString);
        FStack.Peek.SetAttribute('col', Col.ToString);
  
        NodeList := TList<TSyntaxNode>.Create;
        try
          for Node in RawStatement.ChildNodes do
            NodeList.Add(Node);
          TExpressionTools.RawNodeListToTree(RawStatement, NodeList, FStack.Peek);
        finally
          NodeList.Free;
        end;
      finally
        FStack.Pop;
      end;
    end;
  end;
  
  
negative.code:   ParamKind: string;
  begin
    Params := TSyntaxNode.Create('params');
    try
      FStack.Push(Params);
      try
        inherited;
      finally
        FStack.Pop;
      end;
  
      FStack.Push(sPARAMETERS);
      for ParamList in Params.ChildNodes do
      begin
        TypeInfo := ParamList.FindNode(sTYPE);
        ParamKind := ParamList.GetAttribute('kind');
        for Param in ParamList.ChildNodes do
        begin
          if not SameText(Param.Name, sNAME) then
            Continue;
  
          FStack.Push(sPARAMETER, False);
          if ParamKind <> '' then
            FStack.Peek.SetAttribute('kind', ParamKind);
  
          FStack.AddChild(Param.Clone);
          if Assigned(TypeInfo) then
            FStack.AddChild(TypeInfo.Clone);
  
          FStack.Pop;
        end;
      end;
      FStack.Pop;
    finally
      Params.Free;
    end;
  end;
  
  procedure TPasSyntaxTreeBuilder.ForStatement;
  