[aspectc-user] AC meets Symbian
Olaf Spinczyk
Olaf.Spinczyk at informatik.uni-erlangen.de
Tue Jul 6 11:04:53 CEST 2004
Hi,
Olaf Spinczyk wrote:
> Hi Thiago and Bil,
>
> Thiago A. CorrĂȘa wrote:
>
>> Hi,
>>
>> ac++ has some serious problems
>> figuring out overloads. I'm not sure
>> if this one is the same bug that I
>> reported ( see bugtrack ), but it sure
>> looks like it.
>>
>>
>>> Hi Olaf (et. al.),
>>>
>>> After some discussion with others
>>
>>
>> here on
>>
>>> the various things we talked about,
>>
>>
>> it was
>>
>>> concluded that my proper course was
>>
>>
>> to pursue
>>
>>> using AC first, and then look at the
>>
>>
>> possibility
>>
>>> of implementing all the GUI stuff
>>
>>
>> which I was talking
>>
>>> about.
>>>
>>> Seems fair.
>>>
>>> So I ran through the demos on the
>>
>>
>> distribution. They
>>
>>> all work as advertised.
>>>
>>> Cool.
>>>
>>> So I tried doing something very
>>
>>
>> simple with the
>>
>>> Symbian code.
>>>
>>> Not cool.
>>>
>>> AC++ complains about some of the
>>
>>
>> header files. I've
>>
>>> looked through them and don't see
>>
>>
>> anything unusual.
>>
>>> But this is C++, so anything is
>>
>>
>> possible.
>>
>>> Here's a typical error msg:
>>>
>>>
>>> C:\..\elloWorld>c:\ac\ac++ -e cpp -p
>>
>>
>> src -d out -v1 -DNDEBUG -D_UNICODE
>>
>>> -D__SYMBIAN32__ -D__GCC32__
>>
>>
>> -D__EPOC32__ -D__MARM__
>> -D__AVKON_ELAF__ -D__MARM_ARM4__
>>
>>> -D__DLL__ -I
>>
>>
>> "c:\Symbian\6.1\Series60\EPOC32\INCLUDE"
>>
>>> -I
>>
>>
>> "c:\SYMBIAN\EMCCSOFT\HELLOWORLD\INC"
>>
>>> -I
>>
>>
>> "c:\SYMBIAN\EMCCSOFT\HELLOWORLD\SRC\"
>>
>>> -I
>>
>>
>> "c:\SYMBIAN\EMCCSOFT\HELLOWORLD\GROUP"
>>
>>> ..s32strm.inl(296): error: call to
>>
>>
>> function `ExternalizeL (const TSize
>> &,RWriteStream &)' is ambiguous
>>
>>> ..s32strm.inl(134): candidates are
>>
>>
>> `void ExternalizeL(const TRect
>> &,RWriteStream &)'
>>
>>> ..s32strm.inl(133):
>>
>>
>> `void ExternalizeL(TSize,RWriteStream &)'
>>
>>>
>>> I played around, changing the
>>
>>
>> various flags with no
>>
>>> particular result. The flags and
>>
>>
>> includes come from
>>
>>> the command line given to GCC (which
>>
>>
>> works).
>>
>>> The actual code is not unusual
>>
>>
>> (s32std.h) and seems correct:
>>
>>>
>>
>>
>> ===========================================
>>
>>> ...
>>>
>>> class TRect
>>> {
>>> public:
>>> enum TUninitialized { EUninitialized };
>>> TRect(TUninitialized) {}
>>> ...
>>>
>>> class TSize;
>>>
>>>
>>
>>
>> ===========================================
>>
>>>
>>> and (s32strm.inl):
>>>
>>>
>>>
>>
>>
>> ===========================================
>>
>>> ...
>>> IMPORT_C void ExternalizeL(TSize
>>
>>
>> aSize,RWriteStream& aStream);
>>
>>> IMPORT_C void ExternalizeL(const
>>
>>
>> TRect& aRect,RWriteStream& aStream);
>>
>>> ...
>>> inline RWriteStream&
>>
>>
>> operator<<(RWriteStream& aStream,const
>> TSize& aSize)
>>
>>> {ExternalizeL(aSize,aStream);return
>>
>>
>> aStream;}
>>
>>> ...
>>>
>>>
>>
>>
>> ===========================================
>>
>>>
>>>
>>>
>>>
>>> So...
>>>
>>> I'm lost. I'm 86.7% certain that the
>>
>>
>> compilers used by symbian (GCC,
>>
>>> VC, BCC) are the same as used
>>
>>
>> normally. Thus it would appear that they
>>
>>> will parse a .h file that AC++
>>
>>
>> won't. But that's a guess. I really don't
>>
>>> know enough to confirm it.
>>>
>>> Is there anything you can suggest?
>>>
>>> -Bil
>
>
> we tried to parse a Symbian OS example application a few weeks ago and
> it worked. Probably the reason is that not so many functions were
> actually *called* by this simple "hello world"-like program.
>
> Obviously, there is a problem in the overload resolution. This is shown
> by Thiago's bug 175 and the Bil's Symbian problem. We'll fix this as
> soon as possible, but we need your help. I was not able to reproduce
> Bil's problem from the example code (ac++ terminated with error message,
> but g++ did so as well, because TSize is only declared and not defined).
>
> To be able to fix such problems quickly we need minimal example code,
> i.e. it should not depend on any header files and it should not contain
> any code, which is not related to the problem. I did this for bug 175:
>
> class C2 {};
>
> class C3 {
> C3(C2 c) {}
> };
>
> void contains( const C3&) {}
> void contains( C2 ) {}
>
> int main () {
> C2 c2;
> contains(c2);
> }
>
> =>
>
> t19.c:12: error: call to function `contains (C2)' is ambiguous
> t19.c:8: candidates are `void contains(C2)'
> t19.c:7: `void contains(const C3 &)'
>
> Bil, we'll now look into Thiago's bug 175 first. You could either wait
> until this is fixed and hope that the Symbian problem also disappears or
> actively help us. We need some (minimal) example code (from you) which
> we can use to reproduce the problem. Then we'll be able to come up with
> a quick bugfix.
>
> Yours,
>
> Olaf
bug 175 is fixed. I hope that this bug was also the reason for Bil's
Symbian problem. We'll now build and test a new pre-release 0.9pre1. It
will be posted to aspectc.org as soon as possible.
Olaf
More information about the aspectc-user
mailing list