Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] Nested class Accessibility
  • From: Ming Cheng <chengm349@xxxxxxxxxxx>
  • Date: Tue, 2 Jun 2020 01:40:21 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kHTqwSe8EHQ7Dd4a0tsCFLZCQkTjs2XHF7aeTDGWnus=; b=Dv5GUQtqc750zTZovXc4BeNGQBE0irVyHEwvi0xKsCGh4vfrjpBqe6sorGuSqP5PjNhaUMHPUww+3cRGPyBfB16ToeK7LNc9yCwFuQv92JBUhldU+ZbD/8GcTKqfuPQuy2/XDXGQ3O7Uej8QlRh6eFudMIX9JwyFcTC97qVWqfBxzBbHV+mct2VSa8VMRklqxJ0T0M/VEYJNviBQe8Bp9kMgmTP++f+0QT4107d6w2SX+G9/gbk+q+F+rZSRA19oETFpdZ4WzD9FCZ+gJiO3v3xLd2Wb0fwP2v4hpTqCwuQvYBQ1ViM+ZSEhdg3/xxp7pbiVd+wqVqveQkoTmWusZQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RgorXMcjdA7nKG1Th519WBzTmIillFVvk/Hbv/BjbS4esaCa5E0Bs05CRl3Zu/kTjMKhDfoHxgIMQ0ZX3sXLS5IkOhm5EOwKwKox77RqU66RYKW5xY3V853Q3fzEYsCUjrOwyqP0j0Iw7+/+W5WZCPQpmllxHP+qKaqF3dNGOAjXkuD4K9fble/H5Z8sagqX7PrrAgctMLsu375wOwcV54M7TGtnaXzTvlHN3uGWM90ex/usBWp5SgM/3D461jUCbfSuuJORTOg4ebb4eh6UbuFgPlKGGqNJwe9EAa5jqcA1DGt93A1PpPOOmL0mkHXUKyYssLBrtz6JOkcDS72SGA==
  • Delivered-to: cdt-dev@xxxxxxxxxxx
  • List-archive: <https://www.eclipse.org/mailman/private/cdt-dev>
  • List-help: <mailto:cdt-dev-request@eclipse.org?subject=help>
  • List-subscribe: <https://www.eclipse.org/mailman/listinfo/cdt-dev>, <mailto:cdt-dev-request@eclipse.org?subject=subscribe>
  • List-unsubscribe: <https://www.eclipse.org/mailman/options/cdt-dev>, <mailto:cdt-dev-request@eclipse.org?subject=unsubscribe>
  • Thread-index: AQHWNY/J/7o3vP3IjkS6Qf7dBRATMai+xkc/gAKrIdaAAp6WvYAAglwD
  • Thread-topic: Nested class Accessibility

anyway, job done and thanks!

From: cdt-dev-bounces@xxxxxxxxxxx <cdt-dev-bounces@xxxxxxxxxxx> on behalf of Corbat Thomas <thomas.corbat@xxxxxx>
Sent: Monday, June 1, 2020 5:55 PM
To: CDT General developers list. <cdt-dev@xxxxxxxxxxx>
Subject: Re: [cdt-dev] Nested class Accessibility
 

Hi


I thought they had their own overload for labels, but they are just IASTDeclarations (a subclass).  You should already encounter them when visiting in visit(IASTDeclaration).


Greetings

Thomas


Von: cdt-dev-bounces@xxxxxxxxxxx <cdt-dev-bounces@xxxxxxxxxxx> im Auftrag von Ming Cheng <chengm349@xxxxxxxxxxx>
Gesendet: Sonntag, 31. Mai 2020 03:59:26
An: CDT General developers list.
Betreff: Re: [cdt-dev] Nested class Accessibility
 
Hi Thomas,

Your guide is very clear and helpful. I agree your 2nd suggestion should be the choice. 
I'd also like to take this opportunity to learn ASTVisitor more. Here is the class' public interface:

public abstract class ASTVisitor {

    public static final int PROCESS_SKIP = 1;
    public static final int PROCESS_ABORT = 2;
    public static final int PROCESS_CONTINUE = 3;
    public boolean shouldVisitNames;
    public boolean shouldVisitDeclarations;
    public boolean shouldVisitInitializers;
    public boolean shouldVisitParameterDeclarations;
    public boolean shouldVisitDeclarators;
    public boolean shouldVisitDeclSpecifiers;
    public boolean shouldVisitArrayModifiers;
    public boolean shouldVisitPointerOperators;
    public boolean shouldVisitAttributes;
    public boolean shouldVisitTokens;
    public boolean shouldVisitExpressions;
    public boolean shouldVisitStatements;
    public boolean shouldVisitTypeIds;
    public boolean shouldVisitEnumerators;
    public boolean shouldVisitTranslationUnit;
    public boolean shouldVisitProblems;
    public boolean shouldVisitDesignators;
    public boolean shouldVisitBaseSpecifiers;
    public boolean shouldVisitNamespaces;
    public boolean shouldVisitTemplateParameters;
    public boolean shouldVisitCaptures;
    public boolean shouldVisitVirtSpecifiers;
    public boolean shouldVisitDecltypeSpecifiers;
    public boolean includeInactiveNodes;
    public boolean shouldVisitAmbiguousNodes;
    public boolean shouldVisitImplicitNames;
    public boolean shouldVisitImplicitNameAlternates;
    public boolean shouldVisitImplicitDestructorNames;

    public ASTVisitor() {

    }

    public ASTVisitor(boolean visitNodes) {

    }

    public int visit(IASTTranslationUnit tu) {

    }

    public int visit(IASTName name) {

    }

    public int visit(IASTDeclaration declaration) {

    }

    public int visit(IASTInitializer initializer) {

    }

    public int visit(IASTParameterDeclaration parameterDeclaration) {

    }

    public int visit(IASTDeclarator declarator) {
 
    }

    public int visit(IASTDeclSpecifier declSpec) {
  
    }

    public int visit(IASTArrayModifier arrayModifier) {

    }

    public int visit(IASTPointerOperator ptrOperator) {

    }

    public int visit(IASTAttribute attribute) {

    }

    public int visit(IASTAttributeSpecifier specifier) {

    }

    public int visit(IASTToken token) {

    }

    public int visit(IASTExpression _expression_) {

    }

    public int visit(IASTStatement statement) {

    }

    public int visit(IASTTypeId typeId) {

    }

    public int visit(IASTEnumerationSpecifier.IASTEnumerator enumerator) {

    }

    public int visit(IASTProblem problem) {
   
    }

    public int visit(ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier baseSpecifier) {

    }

    public int visit(ICPPASTNamespaceDefinition namespaceDefinition) {

    }

    public int visit(ICPPASTTemplateParameter templateParameter) {

    }

    public int visit(ICPPASTCapture capture) {

    }

    public int visit(ICASTDesignator designator) {

    }

    public int visit(ICPPASTDesignator designator) {

    }

    public int visit(ICPPASTVirtSpecifier virtSpecifier) {
  
    }

    public int visit(ICPPASTClassVirtSpecifier classVirtSpecifier) {
  
    }

    public int visit(ICPPASTDecltypeSpecifier decltypeSpecifier) {

    }


"you can also visit the visibility labels (implement the corresponding visit() method and enable them)", would you please elaborate a little bit more?

Thanks.

From: cdt-dev-bounces@xxxxxxxxxxx <cdt-dev-bounces@xxxxxxxxxxx> on behalf of Corbat Thomas <thomas.corbat@xxxxxx>
Sent: Friday, May 29, 2020 9:16 AM
To: CDT General developers list. <cdt-dev@xxxxxxxxxxx>
Subject: Re: [cdt-dev] Nested class Accessibility
 

Hi


If you are already visiting the AST, you can also visit the visibility labels (implement the corresponding visit() method and enable them) and remember the last visibility you have encountered on the way. You probably will need to have a stack of visibilities, as you might overwrite it in the nested classes. I'm not sure if there is already some functionality like this lingering somewhere. This is one possibility.


Otherwise, you can look for this information in the bindings, if you are familiar with them. ICPPClassType has a method getVisibility(IBinding). I guess you can call it on the "Enclosing" binding with the "Nested" binding as argument.


I would suggest the latter.


I hope this helps!
Thomas


Von: cdt-dev-bounces@xxxxxxxxxxx <cdt-dev-bounces@xxxxxxxxxxx> im Auftrag von Ming Cheng <chengm349@xxxxxxxxxxx>
Gesendet: Freitag, 29. Mai 2020 10:15:18
An: cdt-dev@xxxxxxxxxxx
Betreff: [cdt-dev] Nested class Accessibility
 
Hi,

Assume I have this class definition:

class Enclosing {      
   private:   
       int x;
     
   /* start of Nested class declaration */  
   class Nested {
      int y;   
      void NestedFun(Enclosing *e) {
        cout<<e->x;  // works fine: nested class can access 
                     // private members of Enclosing class
      }       
   }; // declaration Nested class ends here
}; // declaration Enclosing class ends here
  
Now ASTVisitor will give me callback "public int visit(IASTDeclaration decl)" for class Enclosing and later Nested. How can I get class Nested's accessibility within Enclosing? 

Thanks.
Ming

Back to the top