Changeset 46 in dev for BasicCompiler64/Compile_Func.cpp


Ignore:
Timestamp:
Feb 6, 2007, 1:19:17 AM (17 years ago)
Author:
dai_9181
Message:

VarPtrの戻り値の型をVoidPtrではなく、ポインタレベルを増加した型にした。
関連関数のパラメータにconstを適用。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_Func.cpp

    r28 r46  
    3939    return 0;
    4040}
    41 void Opcode_Func_Len(char *Parameter){
     41void Opcode_Func_Len( const char *Parameter ){
    4242    int type,TypeSize;
    4343    LONG_PTR lpIndex;
     
    4646    type=GetVarType(Parameter,&lpIndex,0);
    4747
    48     char *tempParm=Parameter;
     48    const char *tempParm=Parameter;
    4949    char temporary[VN_SIZE];
    5050    char temp2[32];
     
    9393    return;
    9494}
    95 void Opcode_Func_AddressOf(char *name){
     95void Opcode_Func_AddressOf( const char *name ){
    9696    extern int cp;
    9797    SUBINFO *psi;
     
    103103        SUBINFO **ppsi;
    104104        int num;
    105         ppsi=GetOverloadSubHash(name,&num);
     105        ppsi=GetOverloadSubHash( name, &num );
    106106        if(!num){
    107107            HeapDefaultFree(ppsi);
     
    202202    psi->bUse=1;
    203203}
    204 void Opcode_Func_SizeOf(char *Parameter){
     204void Opcode_Func_SizeOf( const char *Parameter ){
    205205    int type,size;
    206206    LONG_PTR lpIndex;
     
    212212    op_mov_RV(sizeof(_int64),REG_RAX,size);
    213213}
    214 void Opcode_Func_VarPtr(char *Parameter){
    215     int type;
     214void Opcode_Func_VarPtr( const char *Parameter, TYPEINFO &ReturnTypeInfo ){
    216215    RELATIVE_VAR RelativeVar;
    217216
    218217    //変数のアドレスを取得
    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 );
    220221
    221222    SetVarPtrToReg(REG_RAX,&RelativeVar);
    222223}
    223 void Opcode_Func_GetPtrData(char *Parameter,int type){
     224void Opcode_Func_GetPtrData( const char *Parameter, const int type ){
    224225    int i2;
    225226
     
    246247}
    247248
    248 int Opcode_CallFunc(char *Parameter,int FuncNum){
     249void Opcode_CallFunc( const char *Parameter, const int FuncNum, TYPEINFO &ReturnTypeInfo ){
    249250    switch(FuncNum){
    250251        case FUNC_LEN:
    251252            Opcode_Func_Len(Parameter);
    252             return DEF_LONG;
     253            ReturnTypeInfo.type = DEF_LONG;
     254            break;
    253255        case FUNC_ADDRESSOF:
    254256            Opcode_Func_AddressOf(Parameter);
    255             return DEF_PTR_VOID;
     257            ReturnTypeInfo.type = DEF_PTR_VOID;
     258            break;
    256259        case FUNC_SIZEOF:
    257260            Opcode_Func_SizeOf(Parameter);
    258             return DEF_LONG;
     261            ReturnTypeInfo.type = DEF_LONG;
     262            break;
    259263        case FUNC_VARPTR:
    260             Opcode_Func_VarPtr(Parameter);
    261             return DEF_PTR_VOID;
     264            Opcode_Func_VarPtr( Parameter, ReturnTypeInfo );
     265            break;
    262266
    263267        case FUNC_GETDOUBLE:
    264268            Opcode_Func_GetPtrData(Parameter,DEF_DOUBLE);
    265             return DEF_DOUBLE;
     269            ReturnTypeInfo.type = DEF_DOUBLE;
     270            break;
    266271        case FUNC_GETSINGLE:
    267272            Opcode_Func_GetPtrData(Parameter,DEF_SINGLE);
    268             return DEF_SINGLE;
     273            ReturnTypeInfo.type = DEF_SINGLE;
     274            break;
    269275        case FUNC_GETQWORD:
    270276            Opcode_Func_GetPtrData(Parameter,DEF_QWORD);
    271             return DEF_QWORD;
     277            ReturnTypeInfo.type = DEF_QWORD;
     278            break;
    272279        case FUNC_GETDWORD:
    273280            Opcode_Func_GetPtrData(Parameter,DEF_DWORD);
    274             return DEF_DWORD;
     281            ReturnTypeInfo.type = DEF_DWORD;
     282            break;
    275283        case FUNC_GETWORD:
    276284            Opcode_Func_GetPtrData(Parameter,DEF_WORD);
    277             return DEF_WORD;
     285            ReturnTypeInfo.type = DEF_WORD;
     286            break;
    278287        case FUNC_GETBYTE:
    279288            Opcode_Func_GetPtrData(Parameter,DEF_BYTE);
    280             return DEF_BYTE;
    281     }
    282     return 0;
    283 }
     289            ReturnTypeInfo.type = DEF_BYTE;
     290            break;
     291    }
     292}
Note: See TracChangeset for help on using the changeset viewer.