Changeset 676 in dev for trunk/ab5.0/abdev/compiler_x64


Ignore:
Timestamp:
Jun 29, 2008, 3:20:40 PM (16 years ago)
Author:
dai_9181
Message:

If/While/Doなどのステートメントに引き渡す式の戻り値がクラス型の場合はBoolean型へのキャストを試みるようにした。

Location:
trunk/ab5.0/abdev/compiler_x64
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/compiler_x64/Compile_Statement.cpp

    r587 r676  
    124124    int reg=REG_RAX;
    125125    Type resultType;
    126     if( !NumOpe(&reg,buffer,Type(DEF_BOOLEAN),resultType) ){
    127         return;
     126    bool isNeedHeapFreeStructure;
     127    if( !NumOpe(&reg,buffer,Type(DEF_BOOLEAN),resultType, &isNeedHeapFreeStructure) ){
     128        return;
     129    }
     130
     131    if( resultType.IsObject() )
     132    {
     133        // Boolean型にキャストする
     134        Type booleanType( DEF_BOOLEAN );
     135        CallCastOperatorProc( reg, resultType, isNeedHeapFreeStructure, booleanType );
     136        resultType = booleanType;
    128137    }
    129138
  • trunk/ab5.0/abdev/compiler_x64/NumOpe.cpp

    r665 r676  
    921921
    922922        if(idCalc){
    923             if(type_stack[sp-2]==DEF_OBJECT){
     923            if( sp>=2 && type_stack[sp-2]==DEF_OBJECT )
     924            {
    924925                if( idCalc == CALC_AS
    925926                    && type_stack[sp-1] == ( DEF_OBJECT | FLAG_CAST )
Note: See TracChangeset for help on using the changeset viewer.