Ignore:
Timestamp:
Sep 9, 2007, 12:37:48 PM (17 years ago)
Author:
dai_9181
Message:

GCのバグをいくつか修正

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/NumOpe.cpp

    r301 r319  
    7373
    7474    char *parameter = (char *)malloc( lstrlen( str ) + 32 );
    75     sprintf( parameter, "\"%s\"%c%c*Char", str, 1, ESC_AS );
    76     SetStringQuotes( parameter );
     75    sprintf( parameter, "%s%c%c*Char", str, 1, ESC_AS );
    7776
    7877    Operator_New( *compiler.GetObjectModule().meta.GetClasses().GetStringClassPtr(), "", parameter, Type( DEF_OBJECT, *compiler.GetObjectModule().meta.GetClasses().GetStringClassPtr() ) );
     
    763762                }
    764763
    765                 if(term[0]=='\"'){
    766                     //リテラル文字列
    767                     if(!RemoveStringQuotes(term)){
    768                         SetError(43,NULL,cp);
    769                         goto error;
    770                     }
    771                     i3=lstrlen(term);
    772 StrLiteral:
    773 
    774                     if( baseType.IsObject() || baseType.IsNull() ){
     764                if( (term[0]=='e'||term[0]=='E')
     765                    && (term[1]=='x'||term[1]=='X')
     766                    && term[2]=='\"'
     767                    || term[0] == '\"' )
     768                {
     769                    if( baseType.IsObject() || baseType.IsNull() )
     770                    {
    775771                        //要求タイプがオブジェクト、または未定のとき
    776772
     
    786782                    }
    787783
    788 
     784                    bool isEx = true;
     785                    if( term[0] == '\"' )
     786                    {
     787                        isEx = false;
     788                    }
     789
     790                    if( isEx )
     791                    {
     792                        // 拡張版リテラル文字列(エスケープシーケンス可能)
     793                        if(!RemoveStringQuotes(term+2)){
     794                            SetError(43,NULL,cp);
     795                            goto error;
     796                        }
     797                        i3=FormatString_EscapeSequence(term+2);
     798                        term+=2;
     799                    }
     800                    else
     801                    {
     802                        // 通常文字列
     803                        if(!RemoveStringQuotes(term)){
     804                            SetError(43,NULL,cp);
     805                            goto error;
     806                        }
     807                        i3=lstrlen(term);
     808                    }
     809StrLiteral:
    789810                    type_stack[sp]=typeOfPtrChar;
    790811                    bLiteralCalculation=0;
     
    794815                    //push DataSize
    795816                    compiler.codeGenerator.op_push_V( i2, Schedule::DataTable );
    796                 }
    797                 else if((term[0]=='e'||term[0]=='E')&&
    798                     (term[1]=='x'||term[1]=='X')&&
    799                     term[2]=='\"'){
    800                     //拡張版リテラル文字列(エスケープシーケンス可能)
    801                     if(!RemoveStringQuotes(term+2)){
    802                         SetError(43,NULL,cp);
    803                         goto error;
    804                     }
    805                     i3=FormatString_EscapeSequence(term+2);
    806                     term+=2;
    807 
    808                     goto StrLiteral;
    809817                }
    810818                else if(IsVariableTopChar(term[0])||
     
    896904                            //リテラル文字列
    897905
     906                            if( baseType.IsObject() || baseType.IsNull() )
     907                            {
     908                                //要求タイプがオブジェクト、または未定のとき
     909
     910                                //String型オブジェクトを生成
     911                                NewStringObject(term);
     912
     913                                type_stack[sp]=DEF_OBJECT;
     914                                index_stack[sp]=(LONG_PTR)compiler.GetObjectModule().meta.GetClasses().GetStringClassPtr();
     915                                bLiteralCalculation=0;
     916
     917                                sp++;
     918                                break;
     919                            }
     920
    898921                            double dbl = compiler.GetObjectModule().meta.GetGlobalConsts().GetDoubleData(term);
    899922                            memcpy(&i64data,&dbl,sizeof(double));
Note: See TracChangeset for help on using the changeset viewer.