Re: Semantic does not correctly show PRIVATE/PROTECTED methods to a class of whom those private/protected methods belong

"Dixon Ryan (ETAS/ESW6)" <[email protected]> Thu, 27 Nov 2014 17:24:22 +0000
Newsgroups gmane.emacs.semantic
Message-ID <[email protected]>
Eric,

Please completely disregard this topic. All concerns here were never a problem. I made the mistake of not compiling the test project files which is a mistake! Was busy at work while fitting this in when I could.

Thank you.

-----Original Message-----
From: Eric Ludlam [mailto:[email protected]] 
Sent: 26 November 2014 19:31
To: Dixon Ryan (ETAS/ESW6); [email protected]
Cc: [email protected]
Subject: Re: [cedet-semantic] Semantic does not correctly show PRIVATE/PROTECTED methods to a class of whom those private/protected methods belong

Hi,

I found that the syntax for friend works if I used:

friend class MySecondClass;

I'm assuming that 'class' is optional based on your example below.  If I left it out, it showed up as a variable of type int.

I submitted a change to the parser to correctly parse the friend statement without CLASS, and added a test for both with and without class and made sure it found private data.

Hopefully this solves your problem.

Eric

On 11/26/2014 12:33 PM, Dixon Ryan (ETAS/ESW6) wrote:
> Hi Eric,
>
> Yes I made a mistake after muddling things up with some tests I have been running.
>
> This is solved. However, there is an issue friend classes I believe:
>
> I do not seem to be getting access to all of the private/protected methods or variables of the class that declares another as a friend.
>
> It is MySecondClass.cpp where the cursor should be put to see this problem.
>
>
> Cheers.
> ====
>
> Here are the project files that prove this issue:
>
> ===main.cpp=== (Don't even need this)
> #include "MyClass.hpp"
>
> int main ( void ) {
>     MyClass mc;
>
>     mc.
>
>     return 0;
> }
> ===END main.cpp===
>
> ===MyClass.hpp===
> #include <string>
> #include "MySecondClass.hpp"
>
> class MyClass : public MySecondClass{
> public:
>     friend MySecondClass;
>
> private:
>     int data;
> public:
>     MyClass ( )
>     : MySecondClass( )
>     { }
>
>     ~MyClass ( ) { }
>
>     void myFunc( void ) const;
>     void myOtherFunc( void ) const;
>     int getData( void ) const;
> protected:
>     void onlySubclass( void ) const;
>     void anotherFunction( std::string s );
>     int data1;
> public:
>     std::string secondMyFunc( std::string s ) const;
>     void oneMoreForGoodMeasure( void ) const;
>     int data2;
>
> private:
>     void somePrivateMethod( void ) const;
>     void someOtherPrivateMethod( void ); }; ===END MyClass.hpp===
>
> ===MyClass.cpp===
> #include "MyClass.hpp"
>
> void MyClass::myFunc( void ) const {
>     ;
> }
>
> void MyClass::myOtherFunc( void ) const {
>     ;
> }
>
> int MyClass::getData( void ) const {
>     return 0;
> }
>
> void MyClass::onlySubclass( void ) const {
>     ;
> }
>
> void MyClass::anotherFunction( std::string s ) {
>     return "";
> }
>
> std::string MyClass::secondMyFunc( std::string s ) const {
>     return s;
> }
>
> void MyClass::oneMoreForGoodMeasure( void ) const {
>     ;
> }
>
> void MyClass::somePrivateMethod( void ) const {
>
>     ;
> }
>
> void MyClass::someOtherPrivateMethod( void ) {
>     ;
> }
> ===END MyClass.cpp===
>
> ===MySecondClass.hpp===
> #include "MyClass.hpp"
>
> class MySecondClass {
> public:
>     void methodOne( void ) const;
> private:
>     void methodTwo ( void ) const;
>     int data1;
>     void methodThree( MyClass mc );
> };
> ===END MySecondClass.hpp===
>
> ===MySecondClass.cpp===
> #include "MySecondClass.hpp"
>
> void MySecondClass::methodOne( void ) const {
>     ;
> }
>
> void MySecondClass::methodTwo( void ) const {
>     ;
> }
>
> void MySecondClass::methodThree( MyClass mc ) {
>     mc. //I seem to get inconsistent access. I should get access to all methods and variables that belong to MyClass as I have declared that MySecondClass (this) is a friend of MyClass in MyClass!
> }
> ===END MySecondClass.hpp===
>
> -----Original Message-----
> From: Eric Ludlam [mailto:[email protected]]
> Sent: 26 November 2014 16:58
> To: Dixon Ryan (ETAS/ESW6); [email protected]
> Cc: [email protected]
> Subject: Re: [cedet-semantic] Semantic does not correctly show 
> PRIVATE/PROTECTED methods to a class of whom those private/protected 
> methods belong
>
> Hi,
>
> Only showing those 5 methods is the correct behavior because you can't call the protected or private methods from Main.
>
> If I go into MyClass.cpp, myfunc(void) and type in:
>
> this.<complete>
>
> then I get all the private and protected methods.
>
> Eric
>
> On 11/26/2014 06:44 AM, Dixon Ryan (ETAS/ESW6) wrote:
>> I think the title explains the problem.
>>
>> Here are the source files which prove this bug (not showing 
>> PRIVATE/PROTECTED when semantic should):
>>
>> ===MyClass.hpp===
>>
>> #include <string>
>>
>> class MyClass {
>>
>> private:
>>
>>      int data;
>>
>> public:
>>
>>      void myFunc( void ) const;
>>
>>      void myOtherFunc( void ) const;
>>
>>      int getData( void ) const;
>>
>> protected:
>>
>>      void onlySubclassAndPar( void ) const;
>>
>>      void anotherFunction( std::string s );
>>
>> public:
>>
>>      std::string secondMyFunc( std::string s ) const;
>>
>>      void oneMoreForGoodMeasure( void ) const;
>>
>> private:
>>
>>     void somePrivateMethod( void ) const;
>>
>>      void someOtherPrivateMethod( void );
>>
>> };
>>
>> ==END MyClass.hpp===
>>
>> ==MyClass.cpp===
>>
>> #include "MyClass.hpp"
>>
>> void MyClass::myFunc( void ) const {
>>
>>      ;
>>
>> }
>>
>> void MyClass::myOtherFunc( void ) const {
>>
>>      ;
>>
>> }
>>
>> int MyClass::getData( void ) const {
>>
>>      return 0;
>>
>> }
>>
>> void MyClass::onlySubclassAndPar( void ) const {
>>
>>      ;
>>
>> }
>>
>> void MyClass::anotherFunction( std::string s ) {
>>
>>      return "";
>>
>> }
>>
>> std::string MyClass::secondMyFunc( std::string s ) const {
>>
>>      return s;
>>
>> }
>>
>> void MyClass::oneMoreForGoodMeasure( void ) const {
>>
>>      ;
>>
>> }
>>
>> void MyClass::somePrivateMethod( void ) const {
>>
>>      ;
>>
>> }
>>
>> void MyClass::someOtherPrivateMethod( void ) {
>>
>>      ;
>>
>> }
>>
>> ===END MyClass.cpp===
>>
>> ===main.cpp===
>>
>> #include "MyClass.hpp"
>>
>> int main ( void ) {
>>
>>      MyClass mc;
>>
>>      mc. //only 5 PUBLIC methods
>>
>>      return 0;
>>
>> }
>>
>> ===END main.cpp===
>>
>>
>>
>> ---------------------------------------------------------------------
>> -
>> -------- Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT 
>> Server from Actuate! Instantly Supercharge Your Business Reports and 
>> Dashboards with Interactivity, Sharing, Native Excel Exports, App 
>> Integration & more Get technology previously reserved for 
>> billion-dollar corporations, FREE 
>> http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.
>> clktrk
>>
>>
>>
>> _______________________________________________
>> cedet-semantic mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/cedet-semantic
>>
>

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk