Vczh Library++3.0之ManagedX语言检查类型的可见性 (二)

2014-11-23 22:30:32 · 作者: · 浏览: 27
{
32 FOREACH(ManagedTypeSymbol*, genericArgument, currentType->GetGenericArguments())
33 {
34 EnsureTypeVisibility(languageElement, genericArgument, argument, thisTypes, baseTypes);
35 }
36 }
37
38 ManagedSymbolItem* currentSymbol=currentDeclaration->GetSymbol();
39 declatt::Accessor currentAccessor=declatt::Public;
40 switch(currentSymbol->GetSymbolType())
41 {
42 case ManagedSymbolItem::Class:
43 case ManagedSymbolItem::Structure:
44 case ManagedSymbolItem::Interface:
45 {
46 ManagedSymbolDeclaration* symbol=dynamic_cast(currentSymbol);
47 currentAccessor=symbol->accessor;
48 }
49 break;
50 case ManagedSymbolItem::TypeRename:
51 {
52 ManagedSymbolTypeRename* symbol=dynamic_cast(currentSymbol);
53 currentAccessor=symbol->accessor;
54 }
55 break;
56 case ManagedSymbolItem::GenericParameter:
57 break;
58 default:
59 argument.errors.Add(ManagedLanguageCodeException::GetTypeInvisible(languageElement, currentType));
60 return;
61 }
62
63 if(!parentType)
64 {
65 ManagedSymbolItem* parentSymbol=currentSymbol->GetParentItem();
66 switch(parentSymbol->GetSymbolType())
67 {
68 case ManagedSymbolItem::Class:
69 case ManagedSymbolItem::Structure:
70 case ManagedSymbolItem::Interface:
71 {
72 ManagedSymbolDeclaration* parentDeclaration=dynamic_cast(parentSymbol);
73 parentType=argument.symbolManager->GetThisType(parentDeclaration);
74 }
75 break;
76 }
77 }
78 if(parentType && !thisTypes.Contains(parentType))
79 {
80 if(baseTypes.Contains(parentType))
81 {
82 switch(currentAccessor)
83 {
84 case declatt::Public:
85 case declatt::Protected:
86 case declatt::Internal:
87 case declatt::ProtectedInternal:
88 break;
89 default:
90 argument.errors.Add(ManagedLanguage