Kevin Atkinson wrote:
> I will not apply the patch as is as there are some changes I don't 
> approve of.

That's ok, I expected as much:)


> 1)
> I will accept the changes to deal with the fact that the sun compiler 
> is to stupid to know that abort doesn't return as those are harmless.

Well, yes CC is stupid, it doesn't check sprintf format strings either, but I'm told 
it  seems to produce better code for SPARC, so here we are.


> 2)
> In may cases you changed:
> 
>   String val = config.retrieve("key");
> to
>   String val = String(config.retrieve("key"));
> 
> what is the error you are getting without the change?  There might be 
> a better way to solve the problem.

There is a constructor for String that takes an PosibError (what things return), but 
there is also an operator= on String that takes a PosibError.

Just the constructor ought to be enough, the = operator is redundant IMHO.

Deleting String::operator= (PosibError...) would probably be the easiest and most 
correct solution, but I was a bit nervous about it, so I chose to use the constructor 
explicitly.

What do you think?


> Same for
> -static void display_menu(O * out, const Choices * choices, int
> width) { +static void display_menu(O * out, const StackPtr<Choices> 
> &choices, int +width)

The sun compiler bitched about incompatible types, 'Choices *' is not the same as 
'StackPtr<Choices>', which is what is needed in the function.

I guess StackPtr<Mumble> just happens to resolve to the same as Mumble * with GNUs STL 
implementation, but assuming it always does is bad form or at least not something that 
you can assume all compilers understand.

 
> 3)
> The C++ standard requires "friend class HashTable", "friend HashTable" 
> is not valid C++ and will not compile with gcc

Hmm, that wasn't good.

With:   friend class HashTable;  I get:
"vector_hash.hpp", line 243: Error: A typedef name cannot be used in an elaborated 
type specifier..

With:   friend class Parms::HashTable; I get:
Error: aspeller_default_readonly_ws::ReadOnlyWS::WordLookupParms::HashTable is not 
defined. 


How about:
 
#ifdef __SUNPRO_CC
    // Fix for deficient sun compilers:
    friend HashTable
#else
    friend class HashTable
#endif


> 4)
> What is the reason for?
> +#if (1)
> +  FStream CIN(stdin, false);
> +  FStream COUT(stdout, false);
> +  FStream CERR(stderr, false);
> +#else
> +#include "iostream.hpp"

It seems the symbols from iostream.cpp were not available when linking the 
application, maybe because of defective name mangling, maybe because of scoping, it 
seemed a lot easier to simply define the vairables there rather than battle with the 
build system to figure out what went wrong.

As far as I know libaspell.so is supposed to provide a C interface, not a C++ one, 
right? In that case referencing C++ symbols in it is wrong, even if g++ lets you get 
away with it.

This is what happens if I try to link it with the default code:

CC -g -o .libs/aspell aspell.o check_funs.o checker_string.o  
../lib/.libs/libaspell.so -lcurses -R/home/ffr/projects/spell/test/lib
ild: (undefined symbol) acommon::CERR -- referenced in the text segment of aspell.o
[Hint: static member acommon::CERR must be defined in the program]

ild: (undefined symbol) acommon::CIN -- referenced in the text segment of aspell.o
[Hint: static member acommon::CIN must be defined in the program]

ild: (undefined symbol) acommon::COUT -- referenced in the text segment of aspell.o
[Hint: static member acommon::COUT must be defined in the program]
 


> 5)
> In parm_string you comment out one of my compressions due to a 
> conflict with the STL.  I have a configure test to deal with this 
> problem.  It will define the macro "REL_OPS_POLLUTION".  Check that 
> the macro is defined in settings.h and if it is use an ifndef around 
> the comparasion.  if the macro is not defined please let me know.

Ah, right, I just checked and it isn't defined.

The problem isn't that it's impossible to have your own == operator, the problem is 
that stl can make an std::string from a char * which can be made from a ParamString 
automagicly, that causes a conflict between the two == operators.

... Which IMHO is stupid of CC as the sane thing to do is to select the "nearest" 
operator for the job.


As the current configure test doesn't define REL_OPS_POLLUTION on my system it might 
be wrong to expand the test to catch this case as well.

I worry about doing what I do now and using the std::string == operator as it might 
not work the same way and it may be slower, but I havn't seen any problems with the 
approach while running aspell.

-- 
 Flemming Frandsen / Systems Designer


_______________________________________________
Aspell-devel mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/aspell-devel

Reply via email to