Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [cdt-dev] IScope.getPhysicalNode() not available in CDT 4.0 - answer

BTW, if you want to set up a conference call to discuss more, please feel
free. I might be able to explain better and maybe understand better what
you're trying to do over the phone.

Doug Schaefer, QNX Software Systems
Eclipse CDT Project Lead, http://cdtdoug.blogspot.com


> -----Original Message-----
> From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx] On
> Behalf Of Doug Schaefer
> Sent: Monday, May 07, 2007 10:21 AM
> To: CDT General developers list.
> Subject: RE: [cdt-dev] IScope.getPhysicalNode() not available in CDT 4.0 -
> answer
> 
> Exactly. My recommendation continues to be to stay away from IScope's. On
> my
> todo list is to redo everything with IScope since I don't think they are
> properly set up.
> 
> You should be able to do everything you need with IASTName and IBinding.
> It
> might take more typing, but it is the way we set up the DOM.
> 
> Doug Schaefer, QNX Software Systems
> Eclipse CDT Project Lead, http://cdtdoug.blogspot.com
> 
> 
> > -----Original Message-----
> > From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx]
> On
> > Behalf Of Beth Tibbitts
> > Sent: Monday, May 07, 2007 8:17 AM
> > To: CDT General developers list.
> > Subject: RE: [cdt-dev] IScope.getPhysicalNode() not available in CDT 4.0
> -
> > answer
> >
> > By the way, it seems that the IASTNode that I get from the scope (see
> > "could use this too" in the comment from the example  below)
> >  isn't the same one I got from the older IScope.getPhysicalNode().
> > The source locations don't match up in my analysis, that found potential
> > problems in OpenMP code, starts reporting all the  OpenMP variables
> "out
> > of scope."
> > Need to look at it in more detail, haven't had time. Any ideas
> > appreciated.
> >
> > ...Beth
> >
> > Beth Tibbitts  (859) 243-4981  (TL 545-4981)
> > High Productivity Tools / Parallel Tools  http://eclipse.org/ptp
> > IBM T.J.Watson Research Center
> > Mailing Address:  IBM Corp., 455 Park Place, Lexington, KY 40511
> >
> >
> >
> >              Beth
> >              Tibbitts/Watson/I
> >              BM@IBMUS
> To
> >              Sent by:                  "CDT General developers list."
> >              cdt-dev-bounces@e         <cdt-dev@xxxxxxxxxxx>
> >              clipse.org
> cc
> >
> >
> Subject
> >              04/27/2007 09:25          RE: [cdt-dev]
> >              AM                        IScope.getPhysicalNode() not
> >                                        available in CDT 4.0 -
> answer
> >
> >              Please respond to
> >                "CDT General
> >              developers list."
> >              <cdt-dev@eclipse.
> >                    org>
> >
> >
> >
> >
> >
> >
> > Just so there's an answer in this thread, here's what worked:
> > As it turns out I didn't have to use the IScope, since I had an
> > IASTDeclarator
> > already, but I've included how to do it with that since that was the
> > original question.
> > The part that wasn't apparent was the instanceof/casting of IBinding
> into
> > something that can produce an IASTNode.  DUH. Seems obvious now.
> > If anyone knows of other classes I need to check for please let me know.
> > No others turned up in running on a bunch of (MPI and OpenMP) C
> benchmark
> > code I have.
> >
> > Thanks, Chris (for some offline help as well.)
> >
> > public IASTNode getPhysicalNode() {
> >       IASTNode node = null;
> >       IASTDeclarator declarator = getDeclarator();)
> >       IASTName dn = declarator.getName();
> >
> >       // Also retrievable from IScope (which was original question)
> >       IScope scope = getScope();
> >       IName sn;
> >       try {
> >             sn = scope.getScopeName();
> >             if(sn instanceof IASTName){
> >                   dn=(IASTName)sn; // could use this too *****
> >             }
> >       } catch (DOMException e) {return null;}
> >
> >       IBinding binding = dn.resolveBinding();
> >       if (binding instanceof CFunction) {
> >             CFunction cf = (CFunction) binding;
> >             node = cf.getPhysicalNode();
> >       } else if (binding instanceof CParameter) {
> >             CParameter cp = (CParameter) binding;;
> >       } else if (binding instanceof CVariable) {
> >             CVariable cv = (CVariable) binding;
> >             node = cv.getPhysicalNode();
> >       } else if (binding instanceof CTypedef) {
> >             CTypedef ct = (CTypedef) binding;
> >             node = ct.getPhysicalNode();
> >       } // any other types I can get a physical node from???
> >       return node;
> > }
> >
> > ...Beth
> >
> >  Beth Tibbitts  (859) 243-4981  (TL 545-4981)
> >  High Productivity Tools / Parallel Tools  http://eclipse.org/ptp
> >  IBM T.J.Watson Research Center
> >  Mailing Address:  IBM Corp., 455 Park Place, Lexington, KY 40511
> >
> >
> >
> >              Chris Recoskie
> >              <recoskie@xxxxxx.
> >              com>
> To
> >              Sent by:                  "CDT General developers list."
> >              cdt-dev-bounces@e         <cdt-dev@xxxxxxxxxxx>
> >              clipse.org
> cc
> >
> >
> Subject
> >              04/26/2007 11:52          RE: [cdt-dev]
> >              AM                        IScope.getPhysicalNode() not
> >                                        available in CDT 4.0
> >
> >              Please respond to
> >                "CDT General
> >              developers list."
> >              <cdt-dev@eclipse.
> >                    org>
> >
> >
> >
> >
> >
> >
> > The scope has an IName.  This means it's either an IASTName or an
> > IIndexName.
> >
> > If it's an IASTName (I'm assuming so since the stuff you are doing is
> > editor based), then you can do resolveBinding() on it to get the
> IBinding,
> > at which point you can then do interesting things.
> >
> > If it's an IIndexName, then ultimately it will be a PDOMName, and so you
> > can do a resolveBinding() on that instead.
> >
> >
> > ===========================
> >
> > Chris Recoskie
> > Team Lead, IBM CDT Team
> > IBM Toronto
> > http://www.eclipse.org/cdt
> >
> >
> >
> >
> >              Beth Tibbitts
> >              <tibbitts@xxxxxx.
> >              com>
> To
> >              Sent by:                  "CDT General developers list."
> >              cdt-dev-bounces@e         <cdt-dev@xxxxxxxxxxx>
> >              clipse.org
> cc
> >
> >
> Subject
> >              26/04/2007 11:38          RE: [cdt-dev]
> >              AM                        IScope.getPhysicalNode() not
> >                                        available in CDT 4.0
> >
> >              Please respond to
> >                "CDT General
> >              developers list."
> >              <cdt-dev@eclipse.
> >                    org>
> >
> >
> >
> >
> >
> >
> > >Maybe I'm missing something, but doesn't getParent() do what you need?
> > Do you mean IScope.getParent()?  Seems like this one be one level higher
> > than the scope itself.
> > or IASTDeclarator.getParent()?   I'm trying to figure out if that gives
> > the
> > original intent of the code.  It's not apparent.
> >
> > Basically, CDT 3.1 had IScope.getPhysicalNode() which returned an
> > IASTNode.
> > CDT 4.0 doesn't have this method on IScope.
> > (Can I get it from the Binding? it's not obvious to me anyway how to get
> > the IASTNode from the IScope.)
> >
> > Sorry if I'm being dense...
> >
> >
> > ...Beth
> >
> > Beth Tibbitts  (859) 243-4981  (TL 545-4981)
> > High Productivity Tools / Parallel Tools  http://eclipse.org/ptp
> > IBM T.J.Watson Research Center
> > Mailing Address:  IBM Corp., 455 Park Place, Lexington, KY 40511
> >
> >
> >
> >              Doug Schaefer
> >              <DSchaefer@xxxxxx
> >              m>
> To
> >              Sent by:                  "CDT General developers list."
> >              cdt-dev-bounces@e         <cdt-dev@xxxxxxxxxxx>
> >              clipse.org
> cc
> >
> >
> Subject
> >              04/25/2007 01:51          RE: [cdt-dev]
> >              PM                        IScope.getPhysicalNode() not
> >                                        available in CDT 4.0
> >
> >              Please respond to
> >                "CDT General
> >              developers list."
> >              <cdt-dev@eclipse.
> >                    org>
> >
> >
> >
> >
> >
> >
> > Maybe I'm missing something, but doesn't getParent() do what you need?
> >
> > Doug Schaefer, QNX Software Systems
> > Eclipse CDT Project Lead, http://cdtdoug.blogspot.com,
> >
> >
> > > -----Original Message-----
> > > From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx]
> > On
> > > Behalf Of Beth Tibbitts
> > > Sent: Wednesday, April 25, 2007 10:29 AM
> > > To: cdt-dev@xxxxxxxxxxx
> > > Subject: [cdt-dev] IScope.getPhysicalNode() not available in CDT 4.0
> > >
> > >
> > > One of my last remaining things to convert our PTP analysis code to
> CDT
> > > 4.0  ...
> > > The problem is that a class of ours, "Symbol" contains   a method to
> get
> > > the defining function it's found within.
> > > It relied on IScope to supply the getPhysicalNode() method, which
> > existed
> > > in CDT 3.1 but not CDT 4.0.
> > > Its ctor supplies:
> > >  public Symbol( IASTDeclarator declarator, IASTDeclaration
> declaration)
> > > whose args are core.dom.ast classes.
> > > A simplified version of this method is provided here (without checks
> for
> > > null, exception catching etc.)
> > > Any ideas on how to get the containing node from an IASTDeclarator?
> > >
> > >
> > >     /**
> > >      * getDefiningFunction - get the function in which declartor is
> > > defined
> > >      * @return IASTNode - either IASTTranslationUnit or
> > > IASTFunctionDefinition
> > >      */
> > >     public IASTNode getDefiningFunction()
> > >     {
> > >         IScope scope = declarator_.getName().resolveBinding().getScope
> > > ();//simplified
> > >         if (scope==).null)  return null;
> > >
> > >         IASTNode node  node = scope.getPhysicalNode();  // *** <===
> > > doesn't
> > > exist in CDT 4.0
> > >
> > >         // keep moving up the tree until we find the node
> > >         while(true) {
> > >             if (node==null)  return null;
> > >             if (node instanceof IASTTranslationUnit) return node;
> > //
> > > global dict
> > >             if (node instanceof IASTFunctionDefinition)  return node;
> > //
> > > our function
> > >             node = node.getParent();
> > >         }
> > >     }
> > >
> > > ...Beth
> > >
> > > Beth Tibbitts  (859) 243-4981  (TL 545-4981)
> > > High Productivity Tools / Parallel Tools  http://eclipse.org/ptp
> > > IBM T.J.Watson Research Center
> > > Mailing Address:  IBM Corp., 455 Park Place, Lexington, KY 40511
> > >
> > > _______________________________________________
> > > cdt-dev mailing list
> > > cdt-dev@xxxxxxxxxxx
> > > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> > _______________________________________________
> > cdt-dev mailing list
> > cdt-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> >
> >
> > _______________________________________________
> > cdt-dev mailing list
> > cdt-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> >
> >
> > _______________________________________________
> > cdt-dev mailing list
> > cdt-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> >
> >
> > _______________________________________________
> > cdt-dev mailing list
> > cdt-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> >
> >
> > _______________________________________________
> > cdt-dev mailing list
> > cdt-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> _______________________________________________
> cdt-dev mailing list
> cdt-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/cdt-dev


Back to the top