Branch: Tag:

2013-02-03

2013-02-03 13:08:50 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Compiler: Make sure private implies both local and protected.

The typechecker and other stuff got confused when symbols
were private but not protected.

Fixes [LysLysKOM 20106812]:
| 20106812 idag 12:54 /12 rader/ Mattias Wingstedt (Firefruit)
| Mottagare: Pike (-) erfarenhetsutbyte <12765>
| Ärende: Felarv
| ------------------------------------------------------------
| Jag får "type mismatch in argument" där argumentet som förväntas är en
| Error.Generic. Den klagar på "Missing identifier error_name".
|
| Det jag skickar in är ett objekt från en klass som ärver
| Error.Generic. Fast den verkar ha rätt, när jag instansierar en
| Error.Generic får den en error_name, som saknas när jag instansierar
| min klass som ärver Error.Generic. I övrigt verkar de båda objekten
| innehålla samma medlemsvariabler.
|
| Pike version 7.8 release 700.
|
| Vad kan det vara för fin finess mitt program har råkat ut för?
| (20106812) /Mattias Wingstedt (Firefruit)/----------

5133:       if (run_time_type == PIKE_T_FREE) dummy.func.offset = -1;    -  if (flags & ID_PRIVATE) flags |= ID_INLINE; +  if (flags & ID_PRIVATE) flags |= ID_LOCAL|ID_PROTECTED;       ref.id_flags=flags;    ref.identifier_offset=Pike_compiler->new_program->num_identifiers;
5571:    }   #endif    -  if (flags & ID_PRIVATE) flags |= ID_INLINE; +  if (flags & ID_PRIVATE) flags |= ID_LOCAL|ID_PROTECTED;       ref.id_flags=flags;    ref.identifier_offset=Pike_compiler->new_program->num_identifiers;
6052:    debug_add_to_identifiers(fun);    }    -  if (flags & ID_PRIVATE) flags |= ID_INLINE; +  if (flags & ID_PRIVATE) flags |= ID_LOCAL|ID_PROTECTED;       ref.inherit_offset = 0;    ref.id_flags = flags;
6130:       debug_add_to_identifiers(fun);    -  if (flags & ID_PRIVATE) flags |= ID_INLINE; +  if (flags & ID_PRIVATE) flags |= ID_LOCAL|ID_PROTECTED;       ref.id_flags = flags;    ref.identifier_offset = i;