Changeset 46 in dev for BasicCompiler64
- Timestamp:
- Feb 6, 2007, 1:19:17 AM (18 years ago)
- Location:
- BasicCompiler64
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler64/CParameter.cpp
r45 r46 140 140 return 1; 141 141 } 142 SUBINFO *CParameter::OverloadSolutionWithReturnType(c har *name,SUBINFO **ppsi,int num){142 SUBINFO *CParameter::OverloadSolutionWithReturnType(const char *name,SUBINFO **ppsi,int num){ 143 143 int i,sw=0; 144 144 SUBINFO *psi; … … 210 210 } 211 211 212 SUBINFO *CParameter::OverloadSolution(c har *name,SUBINFO **ppsi,int num){212 SUBINFO *CParameter::OverloadSolution(const char *name,SUBINFO **ppsi,int num){ 213 213 int i,sw=0; 214 214 SUBINFO *psi; … … 283 283 } 284 284 285 BOOL CParameter::ErrorCheck(c har *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){285 BOOL CParameter::ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){ 286 286 if(ParmsNum>pi_num){ 287 287 if(ppi[pi_num-1].type!=DEF_ELLIPSE){ … … 330 330 } 331 331 332 void CParameter::NewTempParameters( c har *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum ){332 void CParameter::NewTempParameters( const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum ){ 333 333 /////////////////////////////////////////////////////// 334 334 // 一時オブジェクトをあらかじめスタックに積んでおく … … 539 539 } 540 540 541 void CParameter::SetParameter(c har *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){541 void CParameter::SetParameter(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){ 542 542 /////////////////////////////////////////////////////////// 543 543 // パラメータをレジスタ及びスタックフレームにセット … … 559 559 560 560 //戻り値用の変数名を取得 561 char *lpszVarNameToReturn; 562 if(FuncName[0]==1&&FuncName[1]==ESC_OPERATOR) lpszVarNameToReturn="_System_ReturnValue"; 563 else lpszVarNameToReturn=FuncName; 561 const char *lpszVarNameToReturn = (FuncName[0]==1&&FuncName[1]==ESC_OPERATOR)?"_System_ReturnValue":FuncName; 564 562 565 563 //パラメータをレジスタとスタックに格納 -
BasicCompiler64/Compile_Calc.cpp
r40 r46 285 285 if( VarType == DEF_OBJECT && VarRelativeVar.dwKind == VAR_REFLOCAL ){ 286 286 // 参照型オブジェクトへの代入(初期化)はポインタ変数と同様の処理に値する 287 VarType =PTR_LEVEL_UP( VarType );287 PTR_LEVEL_UP( VarType ); 288 288 289 289 VarRelativeVar.dwKind = VAR_LOCAL; … … 291 291 if( CalcType == DEF_OBJECT ){ 292 292 //右辺値が実体オブジェクトのときは、参照をコピー 293 CalcType = PTR_LEVEL_UP( DEF_OBJECT);293 PTR_LEVEL_UP( CalcType ); 294 294 } 295 295 } -
BasicCompiler64/Compile_CallProc.cpp
r45 r46 90 90 FuncId=(int)(_int64)pInfo; 91 91 92 ret_type=Opcode_CallFunc(Parameter,FuncId); 92 TYPEINFO ReturnTypeInfo = { DEF_LONG, NULL }; 93 Opcode_CallFunc( Parameter, FuncId, ReturnTypeInfo ); 94 if( plpRetIndex ){ 95 *plpRetIndex = ReturnTypeInfo.u.lpIndex; 96 } 97 return ReturnTypeInfo.type; 93 98 } 94 99 else if(idProc==PROC_PTR){ -
BasicCompiler64/Compile_Func.cpp
r28 r46 39 39 return 0; 40 40 } 41 void Opcode_Func_Len( char *Parameter){41 void Opcode_Func_Len( const char *Parameter ){ 42 42 int type,TypeSize; 43 43 LONG_PTR lpIndex; … … 46 46 type=GetVarType(Parameter,&lpIndex,0); 47 47 48 c har *tempParm=Parameter;48 const char *tempParm=Parameter; 49 49 char temporary[VN_SIZE]; 50 50 char temp2[32]; … … 93 93 return; 94 94 } 95 void Opcode_Func_AddressOf( char *name){95 void Opcode_Func_AddressOf( const char *name ){ 96 96 extern int cp; 97 97 SUBINFO *psi; … … 103 103 SUBINFO **ppsi; 104 104 int num; 105 ppsi=GetOverloadSubHash( name,&num);105 ppsi=GetOverloadSubHash( name, &num ); 106 106 if(!num){ 107 107 HeapDefaultFree(ppsi); … … 202 202 psi->bUse=1; 203 203 } 204 void Opcode_Func_SizeOf( char *Parameter){204 void Opcode_Func_SizeOf( const char *Parameter ){ 205 205 int type,size; 206 206 LONG_PTR lpIndex; … … 212 212 op_mov_RV(sizeof(_int64),REG_RAX,size); 213 213 } 214 void Opcode_Func_VarPtr(char *Parameter){ 215 int type; 214 void Opcode_Func_VarPtr( const char *Parameter, TYPEINFO &ReturnTypeInfo ){ 216 215 RELATIVE_VAR RelativeVar; 217 216 218 217 //変数のアドレスを取得 219 if(!GetVarOffsetReadOnly(Parameter,&type,&RelativeVar,0)) return; 218 if(!GetVarOffsetReadOnly( Parameter, &ReturnTypeInfo.type, &RelativeVar, &ReturnTypeInfo.u.lpIndex )) return; 219 220 PTR_LEVEL_UP( ReturnTypeInfo.type ); 220 221 221 222 SetVarPtrToReg(REG_RAX,&RelativeVar); 222 223 } 223 void Opcode_Func_GetPtrData( char *Parameter,int type){224 void Opcode_Func_GetPtrData( const char *Parameter, const int type ){ 224 225 int i2; 225 226 … … 246 247 } 247 248 248 int Opcode_CallFunc(char *Parameter,int FuncNum){249 void Opcode_CallFunc( const char *Parameter, const int FuncNum, TYPEINFO &ReturnTypeInfo ){ 249 250 switch(FuncNum){ 250 251 case FUNC_LEN: 251 252 Opcode_Func_Len(Parameter); 252 return DEF_LONG; 253 ReturnTypeInfo.type = DEF_LONG; 254 break; 253 255 case FUNC_ADDRESSOF: 254 256 Opcode_Func_AddressOf(Parameter); 255 return DEF_PTR_VOID; 257 ReturnTypeInfo.type = DEF_PTR_VOID; 258 break; 256 259 case FUNC_SIZEOF: 257 260 Opcode_Func_SizeOf(Parameter); 258 return DEF_LONG; 261 ReturnTypeInfo.type = DEF_LONG; 262 break; 259 263 case FUNC_VARPTR: 260 Opcode_Func_VarPtr( Parameter);261 return DEF_PTR_VOID;264 Opcode_Func_VarPtr( Parameter, ReturnTypeInfo ); 265 break; 262 266 263 267 case FUNC_GETDOUBLE: 264 268 Opcode_Func_GetPtrData(Parameter,DEF_DOUBLE); 265 return DEF_DOUBLE; 269 ReturnTypeInfo.type = DEF_DOUBLE; 270 break; 266 271 case FUNC_GETSINGLE: 267 272 Opcode_Func_GetPtrData(Parameter,DEF_SINGLE); 268 return DEF_SINGLE; 273 ReturnTypeInfo.type = DEF_SINGLE; 274 break; 269 275 case FUNC_GETQWORD: 270 276 Opcode_Func_GetPtrData(Parameter,DEF_QWORD); 271 return DEF_QWORD; 277 ReturnTypeInfo.type = DEF_QWORD; 278 break; 272 279 case FUNC_GETDWORD: 273 280 Opcode_Func_GetPtrData(Parameter,DEF_DWORD); 274 return DEF_DWORD; 281 ReturnTypeInfo.type = DEF_DWORD; 282 break; 275 283 case FUNC_GETWORD: 276 284 Opcode_Func_GetPtrData(Parameter,DEF_WORD); 277 return DEF_WORD; 285 ReturnTypeInfo.type = DEF_WORD; 286 break; 278 287 case FUNC_GETBYTE: 279 288 Opcode_Func_GetPtrData(Parameter,DEF_BYTE); 280 returnDEF_BYTE;281 }282 return 0;283 } 289 ReturnTypeInfo.type = DEF_BYTE; 290 break; 291 } 292 } -
BasicCompiler64/Opcode.h
r40 r46 345 345 private: 346 346 BOOL _overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level); 347 SUBINFO *OverloadSolutionWithReturnType(c har *name,SUBINFO **ppsi,int num);347 SUBINFO *OverloadSolutionWithReturnType(const char *name,SUBINFO **ppsi,int num); 348 348 public: 349 SUBINFO *OverloadSolution(c har *name,SUBINFO **ppsi,int num);350 351 BOOL ErrorCheck(c har *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);349 SUBINFO *OverloadSolution(const char *name,SUBINFO **ppsi,int num); 350 351 BOOL ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum); 352 352 void MacroParameterSupport(PARAMETER_INFO *ppi); 353 353 void SetObjectParameter(int reg,CClass *pobj_Class,LPSTR Parameter); 354 354 355 355 //一時オブジェクトパラメータの生成と破棄 356 void NewTempParameters( c har *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum );356 void NewTempParameters( const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum ); 357 357 void DeleteTempParameters(); 358 358 359 void SetParameter(c har *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);359 void SetParameter(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum); 360 360 361 361 void BackupParameter(int pi_num); … … 390 390 int GetFunctionType(int FuncNum); 391 391 int GetFunctionFromName(char *FuncName); 392 int Opcode_CallFunc(char *Parameter,int FuncNum);392 void Opcode_CallFunc( const char *Parameter, const int FuncNum, TYPEINFO &ReturnTypeInfo ); 393 393 394 394 //OperatorProc.cpp
Note:
See TracChangeset
for help on using the changeset viewer.