Changeset 290 in dev for trunk/abdev/BasicCompiler_Common/src/Compiler.cpp
- Timestamp:
- Aug 21, 2007, 11:00:25 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/src/Compiler.cpp
r273 r290 19 19 bool Compiler::StringToType( const string &typeName, Type &type ){ 20 20 type.SetIndex( -1 ); 21 22 23 ///////////////////////////////////////////////////////// 24 // ☆★☆ ジェネリクスサポート ☆★☆ 25 26 if( strstr( typeName.c_str(), "<" ) ) 27 { 28 // ジェネリッククラスをインスタンス化した型の場合 29 int i = 0; 30 char className[VN_SIZE], typeParameter[VN_SIZE]; 31 GetIdentifierToken( className, typeName.c_str(), i ); 32 i++; 33 GetIdentifierToken( typeParameter, typeName.c_str(), i ); 34 35 // ジェネリクスクラスを取得 36 const CClass *pGenericClass = compiler.GetObjectModule().meta.GetClasses().Find( className ); 37 38 // 型パラメータの型情報を取得 39 Type baseType; 40 StringToType( typeParameter, baseType ); 41 42 GenericTypes genericTypes; 43 genericTypes.push_back( GenericType( "(non support)", baseType ) ); 44 45 // 基本型をセット 46 type.SetBasicType( DEF_OBJECT ); 47 48 // 拡張情報をセット 49 type.SetClassPtr( pGenericClass ); 50 type.SetActualGenericTypes( genericTypes ); 51 52 return true; 53 } 54 55 // 56 ///////////////////////////////////////////////////////// 57 21 58 22 59 if( typeName[0] == '*' ){ … … 74 111 const CClass *pobj_c = compiler.GetObjectModule().meta.GetClasses().Find( typeName ); 75 112 if(pobj_c){ 76 type.SetClassPtr( pobj_c );77 78 113 if( pobj_c->IsStructure() ){ 79 114 type.SetBasicType( DEF_STRUCT ); … … 82 117 type.SetBasicType( DEF_OBJECT ); 83 118 } 119 type.SetClassPtr( pobj_c ); 84 120 return true; 85 121 } 122 123 124 ///////////////////////////////////////////////////////// 125 // ☆★☆ ジェネリクスサポート ☆★☆ 126 127 // 型パラメータ 128 if( compiler.pCompilingClass ) 129 { 130 // クラスに属するメソッドをコンパイルしているとき 131 if( compiler.pCompilingClass->IsExistFormalGenericTypeParameter( typeName ) ) 132 { 133 // コンパイル中クラスにおけるジェネリクス用の型パラメータのとき 134 type.SetBasicType( DEF_TYPE_PARAMETER ); 135 type.SetClassPtr( compiler.GetObjectModule().meta.GetClasses().GetObjectClassPtr() ); 136 return true; 137 } 138 } 139 140 // 141 ///////////////////////////////////////////////////////// 86 142 87 143 return false;
Note:
See TracChangeset
for help on using the changeset viewer.