Changeset 292 in dev for trunk/abdev/BasicCompiler_Common/Subroutine.cpp
- Timestamp:
- Aug 22, 2007, 3:46:23 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/Subroutine.cpp
r290 r292 228 228 229 229 resultType = pUserProc->ReturnType(); 230 231 Type leftType; 232 GetVarType( ObjectName, leftType, false ); 233 234 ///////////////////////////////////////////////////////// 235 // ☆★☆ ジェネリクスサポート ☆★☆ 236 237 if( resultType.IsTypeParameter() ) 238 { 239 // 型パラメータだったとき 240 241 int ptrLevel = PTR_LEVEL( resultType.GetBasicType() ); 242 243 if( leftType.HasActualGenericType() ) 244 { 245 // TODO: GetDummyActualGenericTypeを適切な形に実装し直す 246 resultType = leftType.GetDummyActualGenericType(); 247 } 248 else 249 { 250 // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする 251 resultType.SetBasicType( DEF_OBJECT ); 252 } 253 254 for( int i=0; i<ptrLevel; i++ ) 255 { 256 resultType.PtrLevelUp(); 257 } 258 } 259 260 // 261 ///////////////////////////////////////////////////////// 230 262 } 231 263 … … 274 306 275 307 //インデクサ(getter)の戻り値を取得 276 bool GetReturnTypeOfIndexerGetterProc( const CClass &objClass, Type &resultType ){ 308 bool GetReturnTypeOfIndexerGetterProc( const Type &classType, Type &resultType ) 309 { 277 310 vector<const UserProc *> subs; 278 objClass.GetMethods().Enum( CALC_ARRAY_GET, subs );311 classType.GetClass().GetMethods().Enum( CALC_ARRAY_GET, subs ); 279 312 if( subs.size() == 0 ){ 280 313 return false; … … 282 315 283 316 resultType = subs[0]->ReturnType(); 317 318 319 ///////////////////////////////////////////////////////// 320 // ☆★☆ ジェネリクスサポート ☆★☆ 321 322 if( resultType.IsTypeParameter() ) 323 { 324 // 型パラメータだったとき 325 326 int ptrLevel = PTR_LEVEL( resultType.GetBasicType() ); 327 328 if( classType.HasActualGenericType() ) 329 { 330 // TODO: GetDummyActualGenericTypeを適切な形に実装し直す 331 resultType = classType.GetDummyActualGenericType(); 332 } 333 else 334 { 335 // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする 336 resultType.SetBasicType( DEF_OBJECT ); 337 } 338 339 for( int i=0; i<ptrLevel; i++ ) 340 { 341 resultType.PtrLevelUp(); 342 } 343 } 344 345 // 346 ///////////////////////////////////////////////////////// 284 347 285 348 return true;
Note:
See TracChangeset
for help on using the changeset viewer.