Changeset 7 in dev for BasicCompiler_Common/Variable.cpp
- Timestamp:
- Dec 7, 2006, 3:09:44 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Variable.cpp
r5 r7 1010 1010 if(VarSize%PTR_SIZE) VarSize+=PTR_SIZE-(VarSize%PTR_SIZE); 1011 1011 1012 lstrcpy(GlobalVar[MaxGlobalVarNum].name,name); 1013 if(SubScripts[0]==-1) GlobalVar[MaxGlobalVarNum].bArray=0; 1014 else GlobalVar[MaxGlobalVarNum].bArray=1; 1015 GlobalVar[MaxGlobalVarNum].type=pTypeInfo->type; 1016 GlobalVar[MaxGlobalVarNum].u.index=pTypeInfo->u.lpIndex; 1012 //新しいオブジェクトポインタを取得 1013 VARIABLE *pVar = &GlobalVar[MaxGlobalVarNum]; 1014 1015 //グローバル変数の個数を増加 1016 MaxGlobalVarNum++; 1017 1018 lstrcpy(pVar->name,name); 1019 if(dwFlag & DIMFLAG_CONST) pVar->bConst = 1; 1020 else pVar->bConst = 0; 1021 if(SubScripts[0]==-1) pVar->bArray=0; 1022 else pVar->bArray=1; 1023 pVar->type=pTypeInfo->type; 1024 pVar->u.index=pTypeInfo->u.lpIndex; 1017 1025 1018 1026 //コンストラクタ用パラメータ 1019 GlobalVar[MaxGlobalVarNum].ConstractParameter=(char *)HeapAlloc(hHeap,0,lstrlen(ConstractParameter)+1);1020 lstrcpy( GlobalVar[MaxGlobalVarNum].ConstractParameter,ConstractParameter);1027 pVar->ConstractParameter=(char *)HeapAlloc(hHeap,0,lstrlen(ConstractParameter)+1); 1028 lstrcpy(pVar->ConstractParameter,ConstractParameter); 1021 1029 1022 1030 if(InitBuf[0]||dwFlag==DIMFLAG_INITDEBUGVAR){ 1023 1031 //初期バッファがあるとき 1024 GlobalVar[MaxGlobalVarNum].offset=AllInitGlobalVarSize;1032 pVar->offset=AllInitGlobalVarSize; 1025 1033 AllInitGlobalVarSize+=VarSize; 1026 1034 } 1027 1035 else{ 1028 1036 //初期バッファがないとき 1029 GlobalVar[MaxGlobalVarNum].offset=AllGlobalVarSize | 0x80000000;1037 pVar->offset=AllGlobalVarSize | 0x80000000; 1030 1038 AllGlobalVarSize+=VarSize; 1031 1039 } 1032 1040 1033 1041 //レキシカルスコープ 1034 GlobalVar[MaxGlobalVarNum].ScopeLevel=obj_LexScopes.GetNowLevel(); 1035 GlobalVar[MaxGlobalVarNum].ScopeStartAddress=obj_LexScopes.GetStartAddress(); 1036 GlobalVar[MaxGlobalVarNum].bLiving=TRUE; 1042 pVar->ScopeLevel=obj_LexScopes.GetNowLevel(); 1043 pVar->ScopeStartAddress=obj_LexScopes.GetStartAddress(); 1044 pVar->bLiving=TRUE; 1045 1046 //エラー用 1047 pVar->source_code_address=cp; 1037 1048 1038 1049 //初期バッファにデータをセット … … 1042 1053 initGlobalBuf, 1043 1054 AllInitGlobalVarSize); 1044 if(InitBuf[0]) 1045 SetInitGlobalData(GlobalVar[MaxGlobalVarNum].offset,1046 GlobalVar[MaxGlobalVarNum].type,1047 GlobalVar[MaxGlobalVarNum].u.index,1048 GlobalVar[MaxGlobalVarNum].SubScripts,1055 if(InitBuf[0]){ 1056 int result = SetInitGlobalData(pVar->offset, 1057 pVar->type, 1058 pVar->u.index, 1059 pVar->SubScripts, 1049 1060 InitBuf); 1050 1061 1051 1052 //エラー用 1053 GlobalVar[MaxGlobalVarNum].source_code_address=cp; 1054 1055 1056 MaxGlobalVarNum++; 1062 if(!result){ 1063 //動的な式だった場合は代入演算を行う 1064 char temporary[8192]; 1065 sprintf(temporary,"%s=%s",name,InitBuf); 1066 OpcodeCalc(temporary); 1067 } 1068 } 1069 1057 1070 1058 1071
Note:
See TracChangeset
for help on using the changeset viewer.