Ignore:
Timestamp:
Jul 21, 2008, 6:10:13 AM (16 years ago)
Author:
dai_9181
Message:
  • [700]の一部を差し戻し。
    • 差し戻し内容
      • strlenSSE2へのdefineを差し戻し。
      • _TermOpeを差し戻し。

!!!注意
コミット時は、下記の事項を守ること。

  • ライブラリのリビルドが正常に行えることを確認すること。
  • 最低限のテストケース(現状ではSimpleTestCase)がリリース版で正常に動作することを確認すること。
  • コンパイラ・デバッガ関連のコード修正時は、上記2点について、x86/x64の双方にて確認すること。
  • 「まとめてコミット」はなるべく避けること。何のためのコミットなのかをログと対にして確認できるようにすること。
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/compiler_x86/NumOpe.cpp

    r700 r701  
    353353bool _TermOpe( const char *term, const Type &baseType, Type &resultType, bool &isLiteral, bool &isNeedHeapFreeStructure, bool *pIsClassName, bool isProcedureCallOnly, bool &isVariable, RELATIVE_VAR &relativeVar, bool isWriteAccess )
    354354{
    355     extern void GetWithName(std::string&);
    356 
    357355    char parameter[VN_SIZE];
     356
    358357    // Withを解決
    359     std::string termFull;
     358    char termFull[VN_SIZE];
    360359    if(term[0]=='.'){
    361360        GetWithName(termFull);
    362         termFull.insert(termFull.end(),term,term+strlen(term));
    363     }
    364     else termFull.assign(term,term+strlen(term));
    365 
    366     std::vector<char> termLeft(termFull.begin(), termFull.end());
    367     termLeft.push_back('\0');
     361        lstrcat(termFull,term);
     362    }
     363    else lstrcpy(termFull,term);
     364
     365    char termLeft[VN_SIZE];
     366    lstrcpy(termLeft,termFull);
    368367
    369368    // パース
    370369    char member[VN_SIZE];
    371370    ReferenceKind refType;
    372     if( SplitMemberName( termFull.c_str(), &termLeft[0], member, refType ) ){
     371    if( SplitMemberName( termFull, termLeft, member, refType ) ){
    373372        ///////////////////////////////////////////////////////////////////
    374373        // オブジェクトとメンバに分解できるとき
     
    381380        bool isClassName = false;
    382381        Type leftType;
    383         if( GetTermType( &termLeft[0], Type(), leftType, isLiteral, &isClassName ) ){
     382        if( GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){
    384383            if( isClassName == false && compiler.GetObjectModule().meta.GetBlittableTypes().IsExist( leftType ) ){
    385384                // 左側のオブジェクト部分がBlittable型のとき
    386 /*
     385
    387386                char temporary[VN_SIZE];
    388387                lstrcpy( temporary, termLeft );
     
    390389                    compiler.GetObjectModule().meta.GetBlittableTypes().Find( leftType ).GetCreateStaticMethodFullName().c_str(),
    391390                    temporary );
    392 */
    393                 std::vector<char> temporary;
    394                 const std::string& staticMethodFullName = compiler.GetObjectModule().meta.GetBlittableTypes().Find( leftType ).GetCreateStaticMethodFullName();
    395                 temporary.reserve(VN_SIZE);
    396                 temporary.assign(staticMethodFullName.begin(), staticMethodFullName.end());
    397                 temporary.push_back('(');
    398                 temporary.insert(temporary.end(), termLeft.begin(), termLeft.end());
    399                 temporary.push_back(')');
    400                 temporary.swap(termLeft);
    401             }
    402         }
    403 
    404         if( !TermOpe( &termLeft[0], baseType, leftType, isLiteral, isNeedHeapFreeStructure, &isClassName ) ){
     391            }
     392        }
     393
     394        if( !TermOpe( termLeft, baseType, leftType, isLiteral, isNeedHeapFreeStructure, &isClassName ) ){
    405395            goto globalArea;
    406396        }
     
    420410        }
    421411
    422         return TermMemberOpe( leftType, isNeedHeapFreeStructure, baseType, resultType, termFull.c_str(), &termLeft[0], member, isVariable, relativeVar );
     412        return TermMemberOpe( leftType, isNeedHeapFreeStructure, baseType, resultType, termFull, termLeft, member, isVariable, relativeVar );
    423413    }
    424414globalArea:
     
    430420
    431421    if( pIsClassName ){
    432         if( compiler.GetObjectModule().meta.FindClassSupportedTypeDef( LexicalAnalyzer::FullNameToSymbol( termFull.c_str() ) ) ){
     422        if( compiler.GetObjectModule().meta.FindClassSupportedTypeDef( LexicalAnalyzer::FullNameToSymbol( termFull ) ) ){
    433423            *pIsClassName = true;
    434424            return true;
     
    444434
    445435
    446     if(lstrcmpi(termFull.c_str(),"This")==0 && isProcedureCallOnly == false ){
     436    if(lstrcmpi(termFull,"This")==0 && isProcedureCallOnly == false ){
    447437        if( !compiler.IsCompilingClass() )
    448438        {
     
    468458    char temporary[8192];
    469459
    470     int i2=GetCallProcName(termFull.c_str(),procName);
     460    int i2=GetCallProcName(termFull,procName);
    471461    if(termFull[i2]=='('){
    472         int i4=GetStringInPare_RemovePare(parameter,termFull.c_str()+i2+1);
     462        int i4=GetStringInPare_RemovePare(parameter,termFull+i2+1);
    473463
    474464        void *pInfo;
     
    567557
    568558    char VarName[VN_SIZE],ArrayElements[VN_SIZE];
    569     GetArrayElement(termFull.c_str(),VarName,ArrayElements);
     559    GetArrayElement(termFull,VarName,ArrayElements);
    570560    if(ArrayElements[0]){
    571561        Type classType;
     
    589579        false,  //エラー表示なし
    590580        isWriteAccess,
    591         termFull.c_str(),
     581        termFull,
    592582        &relativeVar,resultType)){
    593583        //////////
     
    609599
    610600    //配列要素を排除
    611     GetArrayElement(termFull.c_str(),VarName,ArrayElements);
     601    GetArrayElement(termFull,VarName,ArrayElements);
    612602
    613603    if(GetSubHash(VarName,0)){
    614604
    615605        {
    616             CallPropertyMethod(termFull.c_str(),NULL,resultType);
     606            CallPropertyMethod(termFull,NULL,resultType);
    617607
    618608            //大きな型への暗黙の変換
     
    646636    if( isProcedureCallOnly )
    647637    {
    648         compiler.errorMessenger.Output(3, termFull.c_str(), cp );
     638        compiler.errorMessenger.Output(3, termFull, cp );
    649639    }
    650640
Note: See TracChangeset for help on using the changeset viewer.