Changeset 373 in dev for trunk/abdev/BasicCompiler32


Ignore:
Timestamp:
Nov 26, 2007, 9:44:17 PM (17 years ago)
Author:
dai_9181
Message:

Foreachにて自動的に一時オブジェクトを生成できるようにした

File:
1 edited

Legend:

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

    r372 r373  
    597597    Type resultType;
    598598    int i;
    599     char temporary[VN_SIZE],variable[VN_SIZE],collectionVar[VN_SIZE];
     599    char temporary[VN_SIZE],collectionVar[VN_SIZE];
    600600    bool isError = false;
    601601
     602    //レキシカルスコープをレベルアップ
     603    compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_FOR );
     604
    602605    //第1パラメータを取得
    603     i=GetOneParameter(Parameter,0,temporary);
     606    char variable[VN_SIZE];
     607    i=GetOneParameter(Parameter,0,variable);
    604608    if(!Parameter[i]){
    605609        SetError(12,"Foreach",cp);
     
    608612    }
    609613
    610     lstrcpy( variable, temporary );
    611 
    612614    //第2パラメータを取得(in~)
    613615    i=GetOneParameter(Parameter,i,collectionVar);
     616   
     617    if( !GetVarType( variable, resultType, false ) )
     618    {
     619        Type collectionType;
     620        if( !NumOpe_GetType( Parameter, Type(), collectionType ) )
     621        {
     622            isError = true;
     623            goto ErrorStep;
     624        }
     625
     626        // 未定義の場合は自動的に定義する
     627        sprintf(temporary,"%s%c%c%s", variable, 1, ESC_AS, collectionType.GetActualGenericType(0).GetClass().GetFullName() );
     628        OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
     629    }
    614630
    615631    // Resetメソッドを呼び出す
     
    634650    //je ...
    635651    const PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
    636 
    637     //レキシカルスコープをレベルアップ
    638     compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_FOR );
    639652
    640653    // Currentプロパティから現在の値を取得
Note: See TracChangeset for help on using the changeset viewer.