Ignore:
Timestamp:
Jul 12, 2007, 2:58:26 AM (17 years ago)
Author:
dai_9181
Message:

コード全体のリファクタリングを実施

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/calculation.cpp

    r198 r206  
     1#include "stdafx.h"
     2
    13#include <jenga/include/smoothie/LexicalAnalysis.h>
    24
     
    498500                        //定数関数
    499501
    500                         if(!GetConstCalcBuffer(temporary,temp2,Parms)){
     502                        ConstMacro *pConstMacro = compiler.GetMeta().GetGlobalConstMacros().Find( temporary );
     503                        if( !pConstMacro )
     504                        {
     505                            if(enableerror) SetError(3,temporary,cp);
     506                            return false;
     507                        }
     508                        if( !pConstMacro->GetCalcBuffer( temp2, Parms ) )
     509                        {
    501510                            if(enableerror) SetError(3,temporary,cp);
    502511                            return false;
     
    554563
    555564                            RELATIVE_VAR RelativeVar;
    556                             int ss[MAX_ARRAYDIM];
    557565                            void *offset;
    558566                            DWORD dwData;
     
    563571
    564572                            Type tempType;
    565                             i3=Debugging_GetVarOffset(Parms,&RelativeVar,tempType,ss);
     573                            i3=Debugging_GetVarOffset(Parms,&RelativeVar,tempType);
    566574                            if(i3==0){
    567575                                //式エラー
     
    657665                        /////////
    658666                        StrPtr[pnum]=0;
    659                         type[pnum] = CDBConst::obj.GetBasicType(Parms);
     667                        type[pnum] = compiler.GetMeta().GetGlobalConsts().GetBasicType(Parms);
    660668                        if(type[pnum]){
    661669                            if(IsRealNumberType(type[pnum])){
    662670                                //実数型
    663                                 nums[pnum] = CDBConst::obj.GetDoubleData(Parms);
     671                                nums[pnum] = compiler.GetMeta().GetGlobalConsts().GetDoubleData(Parms);
    664672                            }
    665673                            else if(IsWholeNumberType(type[pnum])){
    666674                                //整数
    667                                 i64nums[pnum] = CDBConst::obj.GetWholeData(Parms);
     675                                i64nums[pnum] = compiler.GetMeta().GetGlobalConsts().GetWholeData(Parms);
    668676                            }
    669677/*                          else if(type[pnum]==DEF_STRING){
     
    11081116#pragma optimize("", on)
    11091117
    1110 BOOL GetConstCalcBuffer(const char *name,const char *Parameter,char *pCalcBuffer){
    1111     extern HANDLE hHeap;
    1112     int i2,i3,i4,num;
    1113     char temporary[VN_SIZE];
    1114     char *pParms[MAX_PARMS];
    1115 
    1116     CONSTINFO *pci;
    1117     pci=GetConstHash(name);
    1118     if(!pci) return 0;
    1119 
    1120     num=0;
    1121     i2=0;
    1122     while(1){
    1123         i2=GetOneParameter(Parameter,i2,temporary);
    1124 
    1125         pParms[num]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
    1126         lstrcpy(pParms[num],temporary);
    1127 
    1128         num++;
    1129         if(Parameter[i2]=='\0') break;
    1130     }
    1131     if(num!=pci->ParmNum){
    1132         extern int cp;
    1133         for(i2=0;i2<num;i2++) HeapDefaultFree(pParms[i2]);
    1134         SetError(10,name,cp);
    1135         lstrcpy(pCalcBuffer,"0");
    1136         return 1;
    1137     }
    1138 
    1139     i2=0;
    1140     i4=0;
    1141     while(1){
    1142 
    1143         //数式内の項を取得
    1144         for(i3=0;;i2++,i3++){
    1145             if(!IsVariableChar(pci->StrValue[i2])){
    1146                 temporary[i3]=0;
    1147                 break;
    1148             }
    1149             temporary[i3]=pci->StrValue[i2];
    1150         }
    1151 
    1152         //パラメータと照合する
    1153         for(i3=0;i3<pci->ParmNum;i3++){
    1154             if(lstrcmp(pci->ppParm[i3],temporary)==0) break;
    1155         }
    1156 
    1157         if(i3==pci->ParmNum){
    1158             //パラメータでないとき
    1159             lstrcpy(pCalcBuffer+i4,temporary);
    1160             i4+=lstrlen(temporary);
    1161         }
    1162         else{
    1163             //パラメータのとき
    1164             lstrcpy(pCalcBuffer+i4,pParms[i3]);
    1165             i4+=lstrlen(pParms[i3]);
    1166         }
    1167 
    1168         //演算子をコピー
    1169         for(;;i2++,i4++){
    1170             if(pci->StrValue[i2]==1){
    1171                 pCalcBuffer[i4++]=pci->StrValue[i2++];
    1172                 pCalcBuffer[i4]=pci->StrValue[i2];
    1173                 continue;
    1174             }
    1175             if(IsVariableTopChar(pci->StrValue[i2])) break;
    1176             pCalcBuffer[i4]=pci->StrValue[i2];
    1177             if(pci->StrValue[i2]=='\0') break;
    1178         }
    1179 
    1180         if(pci->StrValue[i2]=='\0') break;
    1181     }
    1182 
    1183     for(i2=0;i2<num;i2++) HeapDefaultFree(pParms[i2]);
    1184 
    1185     return 1;
    1186 }
    1187 DWORD GetConstValue(char *name,double *pDbl,char *buffer,LONG_PTR *plpIndex){
    1188     CONSTINFO *pci;
    1189     pci=GetConstHash(name);
    1190     if(pci){
    1191         //定数が見つかったとき
    1192 
    1193         if(pci->StrValue){
    1194             //文字列定数
    1195 
    1196             //バイト数
    1197             *pDbl=pci->DblValue;
    1198 
    1199             //データ
    1200             memcpy(buffer,pci->StrValue,(int)pci->DblValue);
    1201 
    1202             if(plpIndex) *plpIndex=pci->lpIndex;
    1203 
    1204             return DEF_STRING;
    1205         }
    1206         else{
    1207             if(pci->type==DEF_INT64){
    1208                 memcpy(pDbl,&pci->i64Value,sizeof(_int64));
    1209                 return DEF_INT64;
    1210             }
    1211 
    1212             if(plpIndex) *plpIndex=pci->lpIndex;
    1213 
    1214             *pDbl=pci->DblValue;
    1215             return pci->type;
    1216         }
    1217     }
    1218 
    1219     if(plpIndex) *plpIndex=-1;
    1220 
    1221     return -1;
    1222 }
    12231118int IsStrCalculation(char *Command){
    12241119    int i,i2,i3,i4,PareNum;
     
    12831178
    12841179                    //ユーザー定義関数
    1285                     UserProc *pUserProc;
    1286                     pUserProc=GetSubHash(temporary);
     1180                    const UserProc *pUserProc = GetSubHash(temporary);
    12871181                    if(pUserProc){
    12881182                        if( pUserProc->ReturnType().IsStringClass() ){
     
    13001194
    13011195                    //定数
    1302                     CONSTINFO *pci;
    1303                     pci=GetConstHash(temporary);
    1304                     if(pci){
    1305 
    1306                         if(pci->ParmNum){
    1307                             //マクロ関数の場合
    1308                             GetStringInPare_RemovePare(temporary,Command+i2+i3+1);
    1309                             GetConstCalcBuffer(pci->name,temporary,temp2);
    1310                             return IsStrCalculation(temp2);
    1311                         }
    1312 
    1313                         if(pci->type==DEF_STRING) return 1;
    1314                         else return 0;
     1196                    ConstMacro *pConstMacro = compiler.GetMeta().GetGlobalConstMacros().Find( temporary );
     1197                    if(pConstMacro){
     1198                        //マクロ関数の場合
     1199                        GetStringInPare_RemovePare(temporary,Command+i2+i3+1);
     1200                        pConstMacro->GetCalcBuffer( temporary, temp2 );
     1201                        return IsStrCalculation(temp2);
    13151202                    }
    13161203                }
    13171204
    13181205                //定数
    1319                 i3 = CDBConst::obj.GetBasicType(Command+i2);
     1206                i3 = compiler.GetMeta().GetGlobalConsts().GetBasicType(Command+i2);
    13201207                if(i3==DEF_STRING) return 1;    //文字列
    13211208                if(i3) return 0;            //数値
Note: See TracChangeset for help on using the changeset viewer.