设为首页 加入收藏

TOP

Vczh Library++3.0之ManagedX语言检查类型的可见性 (四)
2014-11-23 22:30:32 来源: 作者: 【 】 浏览:2
Tags:Vczh Library 3.0 ManagedX 语言 检查 类型 可见
bol->baseTypes.Wrap())
151 {
152 ManagedTypeSymbol* translatedBaseType=argument.symbolManager->ReplaceGenericArguments(baseType, replacement.Wrap());
153 if(!baseTypes.Contains(translatedBaseType))
154 {
155 baseTypes.Add(translatedBaseType);
156 }
157 }
158 }
159 else
160 {
161 ManagedSymbolDeclaration* symbol=dynamic_cast(thisType->GetSymbol());
162 FOREACH(ManagedTypeSymbol*, baseType, symbol->baseTypes.Wrap())
163 {
164 if(!baseTypes.Contains(baseType))
165 {
166 baseTypes.Add(baseType);
167 }
168 }
169 }
170 for(vint i=oldCount;i 171 {
172 CollectBaseTypes(baseTypes[i], baseTypes, argument);
173 }
174 }
175
176 void EnsureTypeVisibility(ManagedLanguageElement* languageElement, ManagedTypeSymbol* type, ManagedSymbolItem* scopeItem, const MAP& argument)
177 {
178 CHECK_ERROR(
179 !scopeItem
180 || scopeItem->GetSymbolType()==ManagedSymbolItem::Class
181 || scopeItem->GetSymbolType()==ManagedSymbolItem::Structure
182 || scopeItem->GetSymbolType()==ManagedSymbolItem::Interface,
183 L"EnsureTypeVisibility(ManagedLanguageElement*, ManagedTypeSymbol*, ManagedSymbolItem*, const MAP&)#scopeItem内容非法。"
184 );
185
186 List thisTypes, baseTypes;
187 {
188 ManagedSymbolDeclaration* currentDeclaration=dynamic_cast(scopeItem);
189 while(currentDeclaration)
190 {
191 thisTypes.Add(argument.symbolManager->GetThisType(currentDeclaration));
192 currentDeclaration=dynamic_cast(currentDeclaration->GetParentItem());
193 }
194 }
195 FOREACH(ManagedTypeSymbol*, thisType, thisTypes.Wrap())
196 {
197 CollectBaseTypes(thisType, baseTypes, argument);
198 }
199 EnsureTypeVisibility(languageElement, type, argument, thisTypes, baseTypes);
200 }
主要方法就是,判断A.S.T是否可见有下面两个判断:
1:A.S是否可见
2:A.S扩展后的类型是B,判断B.T是否可见。
至于为什么这里不需要判断B是否可见,是因为在using S=xxx这条声明的语义分析里面已经查过了,如果不可见就会有错误信息产生。因此这里可以当B是可见的,减少多余的错误信息。

然后判断A.S是否可见比较简单,主要就是判断A.S和string是否可见。

一直这么递归下去,就把整个类型都检查完了。

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1116 Play on Words 下一篇pipe 函数 (C语言)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: