From: Vladimir K. <vka...@op...> - 2013-12-17 04:34:07
|
> 2) The language symbol tables need some attention if you take a look at > them using -debug-lsymbols. They are meant to reflect the symbols in the > target language in order to look for name clashes. The following shows a > couple of problems: > > struct MotorCar { > struct Wheels { > enum Shape { Round, Square }; > struct Nut { > int material; > }; > }; > }; > struct Wheels {}; > > MotorCar::Wheels should be MotorCar.Wheels (in Java/C#) > MotorCar.Wheels.Nut is missing > Global Wheels is missing (in fact it doesn't wrap this and errors out) The language symbol table is somewhat oversimplified - there is no distinction between class scope and class symbol. Fortunately it is not used for classes lookup - there is a separate function for that: Language::classLookup Looks like the simplest solution for the problem you discovered is just to stop adding the classes to the language symbol table, because they are not used there anyway. I tested that solution and it works. (Name clashes between classes are, kind of, hard to imagine, because they would be detected while parsing in add_symbols) The alternative is to distinguish classes from scopes by some prefix, or add one more level of indirection, like in real symbol tables. |