Changeset 301 in dev for trunk/abdev/BasicCompiler_Common/src
- Timestamp:
- Aug 23, 2007, 10:58:43 PM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler_Common/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/src/Compiler.cpp
r299 r301 28 28 // ジェネリッククラスをインスタンス化した型の場合 29 29 int i = 0; 30 char className[VN_SIZE] , typeParameter[VN_SIZE];30 char className[VN_SIZE]; 31 31 GetIdentifierToken( className, typeName.c_str(), i ); 32 i++;33 GetIdentifierToken( typeParameter, typeName.c_str(), i );34 32 35 33 // ジェネリクスクラスを取得 36 34 const CClass *pGenericClass = this->GetObjectModule().meta.GetClasses().Find( className ); 37 35 38 // 型パラメータの型情報を取得 39 Type baseType; 40 StringToType( typeParameter, baseType ); 36 if( !pGenericClass ) 37 { 38 Jenga::Throw( "StringToType内のジェネリクスクラス取得部分でpGenericClassがNULL" ); 39 } 40 41 if( typeName[i] != '<' ) 42 { 43 Jenga::Throw( "StringToType内でジェネリクス構文の解析に失敗" ); 44 } 41 45 42 46 GenericTypes genericTypes; 43 genericTypes.push_back( GenericType( "(non support)", baseType ) ); 47 while( true ) 48 { 49 i++; 50 51 char typeParameter[VN_SIZE]; 52 GetIdentifierToken( typeParameter, typeName.c_str(), i ); 53 54 // 型パラメータの型情報を取得 55 Type baseType; 56 StringToType( typeParameter, baseType ); 57 58 genericTypes.push_back( GenericType( "(non support)", baseType ) ); 59 60 if( typeName[i] != ',' ) 61 { 62 break; 63 } 64 } 44 65 45 66 // 基本型をセット -
trunk/abdev/BasicCompiler_Common/src/Type.cpp
r299 r301 455 455 } 456 456 457 const Type &Type::Get DummyActualGenericType() const458 { 459 return actualGenericTypes[ 0].GetType();457 const Type &Type::GetActualGenericType( int index ) const 458 { 459 return actualGenericTypes[index].GetType(); 460 460 } 461 461 bool Type::HasActualGenericType() const … … 515 515 if( pClass->GetSuperClassActualTypeParameters().size() ) 516 516 { 517 // TODO: 適切な形に実装し直す(暫定的にトップの型を持ってきている) 517 518 typeParameter = pClass->GetSuperClassActualTypeParameters()[0]; 518 519 } … … 526 527 if( classType.HasActualGenericType() ) 527 528 { 528 // TODO: GetDummyActualGenericTypeを適切な形に実装し直す 529 typeParameter = classType.GetDummyActualGenericType(); 529 typeParameter = classType.GetActualGenericType( typeParameter.GetFormalTypeIndex() ); 530 530 } 531 531 else
Note:
See TracChangeset
for help on using the changeset viewer.