添付ファイルの情報



[添付ファイル一覧] [全ページの添付ファイル一覧]

fileatloutline1.diff
格納ファイル名:attach/4A756E6B2F3332_61746C6F75746C696E65312E64696666
ページ:Junk/32
格納ファイル名:attach/4A756E6B2F3332_61746C6F75746C696E65312E64696666
MD5ハッシュ値:ecc95b80e4b2e7f8cc7344ed1be13faf
サイズ:4.4KB (4497 bytes)
Content-type:application/octet-stream
登録日時:2007/05/26 07:53:17
アクセス数:319
MD5ハッシュ値:ecc95b80e4b2e7f8cc7344ed1be13faf
fileatloutline1.diff
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
Index: sakura_core/CDlgFuncList.cpp
===================================================================
--- sakura_core/CDlgFuncList.cpp	(revision 1089)
+++ sakura_core/CDlgFuncList.cpp	(working copy)
@@ -901,7 +901,8 @@
 			//	Global空間の場合 (C++のみ)
 
 			// 2002/10/27 frozen ここから
-			if( 3 <= pcFuncInfo->m_nInfo  && pcFuncInfo->m_nInfo <= 7 )
+			// 2007.05.26 genta "__interface" をクラスに類する扱いにする
+			if( 3 <= pcFuncInfo->m_nInfo  && pcFuncInfo->m_nInfo <= 8 )
 				htiClass = TVI_ROOT;
 			else
 			{
@@ -922,7 +923,7 @@
 				htiClass = htiGlobal;
 			}
 		}
-		pFuncName = new char[ strlen(pWork) + 1 + 7 ];	// +6 は追加する文字列の最大長
+		pFuncName = new char[ strlen(pWork) + 1 + 18 ];	// +16 は追加する文字列の最大長
 		strcpy( pFuncName, pWork );
 
 		// 2002/10/27 frozen 追加文字列の種類を増やした
@@ -934,6 +935,8 @@
 		case 5: strcat( pFuncName, " 列挙体" );break;
 		case 6: strcat( pFuncName, " 共用体" );break;
 //		case 7: strcat( pFuncName, " 名前空間" );break;
+		
+		case 8: strcat( pFuncName, " インターフェース" );break; // 2007.05.26 genta : "__interface"
 		};
 //		}
 		/* 該当クラス名のアイテムの子として、メソッドのアイテムを登録 */
Index: sakura_core/CEditDoc_FuncList1.cpp
===================================================================
--- sakura_core/CEditDoc_FuncList1.cpp	(revision 1089)
+++ sakura_core/CEditDoc_FuncList1.cpp	(working copy)
@@ -302,8 +302,11 @@
 	enum MODE2
 	{
 		M2_NORMAL			= 0x00,	//!< 通常
+		M2_ATTRIBUTE		= 0x02,	//!< C++/CLI attribute : 2007.05.26 genta
+
 		M2_NAMESPACE_SAVE	= 0x11,	//!< ネームスペース名調査中
-			// 「通常」状態で単語 "class" "struct" "union" "enum" "namespace"を読み込むと、この状態になり、';' '{' ',' '>' '='を読み込むと「通常」になる。
+			// 「通常」状態で単語 "class" "struct" "union" "enum" "namespace", "__interface" を読み込むと、この状態になり、';' '{' ',' '>' '='を読み込むと「通常」になる。
+			//	2007.05.26 genta キーワードに__interface追加
 			//
 			// ':' を読み込むと「ネームスペース名調査完了」へ移行すると同時に
 			// szWordをszTokenNameに保存し、あとで ':' 又は '{' の直前の単語が調べられるようにしている。
@@ -596,6 +599,8 @@
 							nItemFuncId = 5;
 						else if( strcmp(szWord,"union")==0 )
 							nItemFuncId = 6;
+						else if( strcmp(szWord,"__interface")==0 )
+							nItemFuncId = 8;
 						if( nItemFuncId != 0 )
 						{
 							nMode2 = M2_NAMESPACE_SAVE;
@@ -788,7 +793,10 @@
 //						nNestLevel2 = 1;
 //					}
 //					nMode = 0;
-					if( nNestLevel_func == 0 && (nMode2 == M2_NORMAL || nMode2 == M2_NAMESPACE_SAVE || nMode2 == M2_NAMESPACE_END) )
+					//	2007.05.26 genta C++/CLI nMode2 == M2_NAMESPACE_ENDの場合を対象外に
+					//	NAMESPACE_END(class クラス名 :の後ろ)においては()を関数とみなさない.
+					//	TEMPLATE<sizeof(int)> のようなケースでsizeofを関数と誤認する.
+					if( nNestLevel_func == 0 && (nMode2 == M2_NORMAL || nMode2 == M2_NAMESPACE_SAVE ) )
 					{
 						if( strcmp(szWordPrev, "__declspec") == 0 ) {continue;}
 						if(nNestLevel_fparam==0)
@@ -818,7 +826,8 @@
 					if( nNestLevel_fparam > 0)
 					{
 						--nNestLevel_fparam;
-						if( nNestLevel_fparam == 0)
+						//	2007.05.26 genta C++/CLI Attribute内部ではnMode2の変更は行わない
+						if( nNestLevel_fparam == 0 && nMode2 != M2_ATTRIBUTE )
 						{
 							nMode2 = M2_FUNC_NAME_END;
 							nItemFuncId = 2;
@@ -827,6 +836,22 @@
 					//  2002/10/27 frozen ここまで
 					continue;
 				}else
+				// From Here 2007.05.26 genta C++/CLI Attributeの取り扱い
+				if( '[' == pLine[i] ){
+					if( nNestLevel_func == 0 && nNestLevel_fparam == 0 && nMode2 == M2_NORMAL ) {
+						nMode2 = M2_ATTRIBUTE;
+						continue;
+					}
+				} else
+				if( ']' == pLine[i] ){
+					//	Attribute内部でも[]を配列として使うかもしれないので,
+					//	括弧のレベルは元に戻っている必要有り
+					if( nNestLevel_fparam == 0 && nMode2 == M2_ATTRIBUTE ) {
+						nMode2 = M2_NORMAL;
+						continue;
+					}
+				} else
+				// To Here 2007.05.26 genta C++/CLI Attributeの取り扱い
 				if( ';' == pLine[i] ){
 					//  2002/10/27 frozen ここから
 //					if( 2 == nNestLevel2 ){
@@ -898,7 +923,8 @@
 					//  2002/10/27 frozen ここまで
 					nMode = 0;
 					continue;
-				}else if( nNestLevel_fparam == 0 ){
+				}else if( nNestLevel_fparam == 0 && nMode2 != M2_ATTRIBUTE ){
+					// 2007.05.26 genta C++/CLI Attribute内部では関数名処理は一切行わない
 					if( C_IsWordChar( pLine[i] ) ){
 						//  2002/10/27 frozen ここから削除
 //						if( 2 == nNestLevel2 ){




    


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS