Changeset 53 in dev
- Timestamp:
- Feb 11, 2007, 12:30:12 AM (18 years ago)
- Location:
- BasicCompiler_Common
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Class.cpp
r51 r53 125 125 pobj_c=pobj_DBClass->Iterator_GetNext(); 126 126 127 int i; 128 char temporary[VN_SIZE]; 129 for(i=0;i<pobj_c->iStaticMemberNum;i++){ 130 sprintf(temporary,"%s.%s",pobj_c->name,pobj_c->ppobj_StaticMember[i]->name); 127 foreach( CMember *member, pobj_c->staticMembers ){ 128 char temporary[VN_SIZE]; 129 sprintf(temporary,"%s.%s",pobj_c->name,member->name); 131 130 AddGlobalVariable( 132 131 temporary, 133 pobj_c->ppobj_StaticMember[i]->SubScripts,134 & pobj_c->ppobj_StaticMember[i]->TypeInfo,135 GetTypeSize( pobj_c->ppobj_StaticMember[i]->TypeInfo.type,pobj_c->ppobj_StaticMember[i]->TypeInfo.u.lpIndex),136 pobj_c->ppobj_StaticMember[i]->InitBuf,137 pobj_c->ppobj_StaticMember[i]->ConstractParameter,132 member->SubScripts, 133 &member->TypeInfo, 134 GetTypeSize(member->TypeInfo.type,member->TypeInfo.u.lpIndex), 135 member->InitBuf, 136 member->ConstractParameter, 138 137 0); 139 138 140 if( pobj_c->ppobj_StaticMember[i]->TypeInfo.type==DEF_OBJECT){139 if(member->TypeInfo.type==DEF_OBJECT){ 141 140 //エラー用 142 cp= pobj_c->ppobj_StaticMember[i]->source_code_address;141 cp=member->source_code_address; 143 142 144 143 CallConstructor(temporary, 145 pobj_c->ppobj_StaticMember[i]->SubScripts,146 pobj_c->ppobj_StaticMember[i]->TypeInfo,147 pobj_c->ppobj_StaticMember[i]->ConstractParameter);144 member->SubScripts, 145 member->TypeInfo, 146 member->ConstractParameter); 148 147 } 149 148 … … 207 206 } 208 207 209 if(ppobj_StaticMember){ 210 //静的メンバ 211 for(i=0;i<iStaticMemberNum;i++){ 212 delete ppobj_StaticMember[i]; 213 } 214 HeapDefaultFree(ppobj_StaticMember); 215 ppobj_StaticMember=0; 208 //静的メンバ 209 foreach( CMember *member, staticMembers ){ 210 delete member; 216 211 } 217 212 … … 277 272 } 278 273 void CClass::AddStaticMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer, int NowLine ){ 279 ppobj_StaticMember=(CMember **)HeapReAlloc(hHeap,0,ppobj_StaticMember,(iStaticMemberNum+1)*sizeof(CMember *)); 280 ppobj_StaticMember[iStaticMemberNum]=new CMember( this, dwAccess, isConst, isRef, buffer, NowLine ); 281 iStaticMemberNum++; 274 CMember *member = new CMember( this, dwAccess, isConst, isRef, buffer, NowLine ); 275 staticMembers.push_back( member ); 282 276 } 283 277 void CClass::AddMethod( SUBINFO *psi,DWORD dwAccess, bool isConst, BOOL bAbstract, BOOL bVirtual ){ … … 320 314 //重複チェック 321 315 322 int i;323 324 316 //メンバ 325 for( i=0;i<iMemberNum;i++){317 for( int i=0;i<iMemberNum;i++){ 326 318 if(lstrcmp(name,ppobj_Member[i]->name)==0){ 327 319 return 1; … … 330 322 331 323 //静的メンバ 332 for (i=0;i<iStaticMemberNum;i++){333 if( lstrcmp(name,ppobj_StaticMember[i]->name)==0){324 foreach( CMember *member, staticMembers ){ 325 if( lstrcmp( name, member->name ) == 0 ){ 334 326 return 1; 335 327 } … … 911 903 pobj_c->ppobj_Member=(CMember **)HeapAlloc(hHeap,0,1); 912 904 pobj_c->iMemberNum=0; 913 pobj_c->ppobj_StaticMember=(CMember **)HeapAlloc(hHeap,0,1);914 pobj_c->iStaticMemberNum=0;915 905 916 906 pobj_c->ConstructorMemberSubIndex=-1; … … 1069 1059 pobj_c->ppobj_Member=(CMember **)HeapAlloc(hHeap,0,1); 1070 1060 pobj_c->iMemberNum=0; 1071 pobj_c->ppobj_StaticMember=(CMember **)HeapAlloc(hHeap,0,1);1072 pobj_c->iStaticMemberNum=0;1073 1061 1074 1062 pobj_c->ConstructorMemberSubIndex=-1; -
BasicCompiler_Common/Class.h
r51 r53 63 63 class CDebugSection; 64 64 class CClass{ 65 friend CMember; 65 66 friend CDBClass; 66 67 friend CDebugSection; 68 69 //静的メンバ情報 70 std::vector<CMember *>staticMembers; 67 71 68 72 //メソッド情報 … … 86 90 int iMemberNum; 87 91 88 //静的メンバ情報89 CMember **ppobj_StaticMember;90 int iStaticMemberNum;91 92 92 //仮想関数の数 93 93 int vtbl_num; … … 104 104 void Inherits( CClass *pInheritsClass ); 105 105 106 //メンバ、メソッドの追加 106 107 void AddMember( DWORD dwAccess, bool idConst, bool isRef, char *buffer ); 107 108 void AddStaticMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer, int NowLine ); … … 109 110 void AddStaticMethod(SUBINFO *psi,DWORD dwAccess); 110 111 112 //重複チェック 111 113 BOOL DupliCheckAll(const char *name); 112 114 BOOL DupliCheckMember(const char *name); -
BasicCompiler_Common/DebugMiddleFile.cpp
r51 r53 382 382 383 383 //静的メンバ 384 *(long *)(buffer+i2)= pobj_c->iStaticMemberNum;385 i2+=sizeof(long); 386 for (i4=0;i4<pobj_c->iStaticMemberNum;i4++){387 lstrcpy(buffer+i2, pobj_c->ppobj_StaticMember[i4]->name);384 *(long *)(buffer+i2)=(long)pobj_c->staticMembers.size(); 385 i2+=sizeof(long); 386 foreach( CMember *member, pobj_c->staticMembers ){ 387 lstrcpy(buffer+i2,member->name); 388 388 i2+=lstrlen(buffer+i2)+1; 389 389 390 memcpy(buffer+i2, pobj_c->ppobj_StaticMember[i4]->SubScripts,sizeof(int)*MAX_ARRAYDIM);390 memcpy(buffer+i2,member->SubScripts,sizeof(int)*MAX_ARRAYDIM); 391 391 i2+=sizeof(int)*MAX_ARRAYDIM; 392 392 393 393 //型 394 *(long *)(buffer+i2)= pobj_c->ppobj_StaticMember[i4]->TypeInfo.type;394 *(long *)(buffer+i2)=member->TypeInfo.type; 395 395 i2+=sizeof(long); 396 396 397 397 //型の拡張情報 398 SetLpIndex_DebugFile(buffer,&i2, pobj_c->ppobj_StaticMember[i4]->TypeInfo.type,pobj_c->ppobj_StaticMember[i4]->TypeInfo.u.lpIndex);399 400 *(long *)(buffer+i2)= pobj_c->ppobj_StaticMember[i4]->dwAccess;398 SetLpIndex_DebugFile(buffer,&i2,member->TypeInfo.type,member->TypeInfo.u.lpIndex); 399 400 *(long *)(buffer+i2)=member->dwAccess; 401 401 i2+=sizeof(long); 402 402 … … 772 772 773 773 //静的メンバ 774 pobj_c->iStaticMemberNum=*(long *)(buffer+i2); 775 i2+=sizeof(long); 776 pobj_c->ppobj_StaticMember= 777 (CMember **)HeapAlloc(hHeap,0,pobj_c->iStaticMemberNum*sizeof(CMember *)); 778 for(i4=0;i4<pobj_c->iStaticMemberNum;i4++){ 779 pobj_c->ppobj_StaticMember[i4]=new CMember(); 780 781 pobj_c->ppobj_StaticMember[i4]->name=(char *)HeapAlloc(hHeap,0,lstrlen(buffer+i2)+1); 782 lstrcpy(pobj_c->ppobj_StaticMember[i4]->name,buffer+i2); 774 int nStaticMember = *(long *)(buffer+i2); 775 i2+=sizeof(long); 776 for( i4=0; i4<nStaticMember; i4++ ){ 777 CMember *member=new CMember(); 778 779 member->name=(char *)HeapAlloc(hHeap,0,lstrlen(buffer+i2)+1); 780 lstrcpy(member->name,buffer+i2); 783 781 i2+=lstrlen(buffer+i2)+1; 784 782 785 memcpy( pobj_c->ppobj_StaticMember[i4]->SubScripts,buffer+i2,sizeof(int)*MAX_ARRAYDIM);783 memcpy(member->SubScripts,buffer+i2,sizeof(int)*MAX_ARRAYDIM); 786 784 i2+=sizeof(int)*MAX_ARRAYDIM; 787 785 788 786 //型 789 pobj_c->ppobj_StaticMember[i4]->TypeInfo.type=*(long *)(buffer+i2);787 member->TypeInfo.type=*(long *)(buffer+i2); 790 788 i2+=sizeof(long); 791 789 792 790 //型の拡張情報 793 GetLpIndex_DebugFile(buffer,&i2,pobj_c->ppobj_StaticMember[i4]->TypeInfo.type,&pobj_c->ppobj_StaticMember[i4]->TypeInfo.u.lpIndex); 794 795 pobj_c->ppobj_StaticMember[i4]->dwAccess=*(long *)(buffer+i2); 796 i2+=sizeof(long); 791 GetLpIndex_DebugFile(buffer,&i2,member->TypeInfo.type,&member->TypeInfo.u.lpIndex); 792 793 member->dwAccess=*(long *)(buffer+i2); 794 i2+=sizeof(long); 795 796 pobj_c->staticMembers.push_back( member ); 797 797 } 798 798 }
Note:
See TracChangeset
for help on using the changeset viewer.