Changeset 68 in dev


Ignore:
Timestamp:
Mar 12, 2007, 4:04:55 AM (17 years ago)
Author:
dai_9181
Message:

#84の対応(64bitでの動作確認はまだ)。
Stringクラスのコンストラクタにリテラル文字列が渡せないバグを修正。
STRING_IS_NOT_ALWAYS_UNICODEを暗黙的に定義するようにした(暫定対応)。

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_Object.cpp

    r64 r68  
    208208    // コンストラクタの呼び出し
    209209    ////////////////////////////
     210
     211    if( lstrcmp(classObj.name,"proc")==0){
     212        int i=0;
     213    }
    210214
    211215    BOOL bSomeObjects;
  • BasicCompiler32/NumOpe.cpp

    r67 r68  
    7373    ///////////////////////////////////////////////////////
    7474
    75     char *parameter = (char *)malloc( lstrlen( lpszText ) + 3 );
    76     lstrcpy( parameter, lpszText );
     75    char *parameter = (char *)malloc( lstrlen( lpszText ) + 32 );
     76    sprintf( parameter, "\"%s\"%c%c*Char", lpszText, 1, ESC_AS );
    7777    SetStringQuotes( parameter );
    7878
     
    196196                        pobj_Class=(CClass *)lpBaseIndex;
    197197                        TYPEINFO BaseTypeInfo = {BaseType,lpBaseIndex};
    198                         if(IsStringSubsituation(pobj_Class)
    199                             || IsStringObjectType(BaseTypeInfo)){
     198                        if(IsStringObjectType(BaseTypeInfo)){
    200199                            //要求タイプがオブジェクトであり、Stringの受け入れが可能な場合
    201200
  • BasicCompiler64/NumOpe.cpp

    r67 r68  
    213213                        pobj_Class=(CClass *)lpBaseIndex;
    214214                        TYPEINFO BaseTypeInfo = {BaseType,lpBaseIndex};
    215                         if(IsStringSubsituation(pobj_Class)
    216                             || IsStringObjectType(BaseTypeInfo)){
    217                             //要求タイプがオブジェクトであり、Stringの受け入れが可能な場合
     215                        if(IsStringObjectType(BaseTypeInfo)){
     216                            //要求タイプがStringのとき
    218217
    219218                            //String型オブジェクトを生成
  • BasicCompiler_Common/Class.cpp

    r67 r68  
    372372    //※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う
    373373    for( int i=(int)methods.size()-1; i>=0; i-- ){
    374         char *temp;
    375         temp=methods[i]->psi->name;
     374        SUBINFO *psi = methods[i]->psi;
     375        char *temp = psi->name;
    376376        if(temp[0]==1&&temp[1]==ESC_OPERATOR){
    377377            if((BYTE)temp[2]==idOperatorCalc){
    378                 subs.push_back( methods[i]->psi );
     378                subs.push_back( psi );
    379379            }
    380380        }
  • BasicCompiler_Common/NumOpe_GetType.cpp

    r67 r68  
    376376                    if(pBaseType){
    377377                        if(pBaseType->type==DEF_OBJECT){
    378                             if(IsStringSubsituation(pBaseType->u.pobj_Class)
    379                                 || IsStringObjectType(*pBaseType)){
     378                            if(IsStringObjectType(*pBaseType)){
    380379                                //要求タイプがオブジェクトであり、Stringの受け入れが可能な場合
    381380                                extern CClass *pobj_StringClass;
     
    513512                        //////////
    514513
    515                         type[sp]=i2;
     514                        if(i2&FLAG_PTR){
     515                            //配列ポインタ
     516                            type[sp]=GetPtrType(i2^FLAG_PTR,index_stack[sp]);
     517                        }
     518                        else{
     519                            type[sp]=i2;
     520                        }
     521
    516522                        bLiteralCalculation=0;
    517523                        sp++;
  • BasicCompiler_Common/Variable.cpp

    r67 r68  
    211211
    212212    //文字型
    213     else if( lstrcmpi( TypeName, "Char" ) == 0 ) return DEF_CHAR;
     213    //else if( lstrcmpi( TypeName, "Char" ) == 0 ) return DEF_CHAR;
    214214
    215215    //bool型
     
    290290
    291291    //文字型
    292     else if(type==DEF_CHAR)             lstrcpy(name,"Char");
     292    //else if(type==DEF_CHAR)               lstrcpy(name,"Char");
    293293
    294294    //bool型
  • BasicCompiler_Common/preprocessor.cpp

    r67 r68  
    8484    }
    8585
     86    // TODO: 削除
     87    add( "__STRING_IS_NOT_ALWAYS_UNICODE" );
     88
    8689    char temporary[255];
    8790    sprintf(temporary,"_AB_VER%d",MAJOR_VER);
     
    166169}
    167170
    168 void preprocessor_ifdef(char *buffer,BOOL bndef){
     171void preprocessor_ifdef(char *buffer,bool isNot){
    169172    int i,i2,i3;
    170173    char temporary[VN_SIZE];
    171174
    172     if(bndef) i=lstrlen("#ifndef");
     175    if(isNot) i=lstrlen("#ifndef");
    173176    else i=lstrlen("#ifdef");
    174177    while(buffer[i]==' '||buffer[i]=='\t') i++;
     
    185188    if(pobj_define->check(temporary)) sw=1;
    186189
    187     if(bndef){
     190    if(isNot){
    188191        //#ifndefのとき(反対にする)
    189192        if(sw) sw=0;
     
    357360            }
    358361            else if(_memicmp(buffer+i,"#ifdef",6)==0){
    359                 preprocessor_ifdef(buffer+i,0);
     362                preprocessor_ifdef(buffer+i,false);
    360363                continue;
    361364            }
    362365            else if(_memicmp(buffer+i,"#ifndef",7)==0){
    363                 preprocessor_ifdef(buffer+i,1);
     366                preprocessor_ifdef(buffer+i,true);
    364367                continue;
    365368            }
Note: See TracChangeset for help on using the changeset viewer.