亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ccheck.c

?? Open Watcom 的 C 編譯器源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
            if( ( typ1 != typ2 ) ) {
                // Types are not the same
                // if extensions are enabled, then we can do a compatible struct test
                if( CompFlags.extensions_enabled ) {
                    if( CompatibleStructs( typ1->u.tag, typ2->u.tag ) != OK) {
                        if( top_level > 0 ) {
                            if( ret_val != PW )
                                ret_val = PM;
                            else
                                ret_val = NO;
                        } else {
                            ret_val = NO;
                        }
                    }
                } else {
                    ret_val = NO;
                }
            }
        } else if( (TYPE_FIELD == typ1->decl_type) || (TYPE_UFIELD == typ1->decl_type) ) { /* CarlYoung 31-Oct-03 */
            if( typ2->u.f.field_width > typ1->u.f.field_width )
                ret_val = AC;
        }
    } else if( typ1->decl_type == TYPE_UNION && top_level > 0 ) {
        if( InUnion( typ1, typ2, 0 ) != OK ) {
            ret_val = NO;
        } else {
            ret_val = PM;
        }
    } else if( typ2->decl_type == TYPE_UNION && top_level > 0 ) {
        if( InUnion( typ2, typ1, 1 )!= OK ) {
            ret_val = NO;
        } else {
            ret_val = PM;
        }
    } else if( typ1->decl_type == TYPE_ARRAY ) {
        if( !IdenticalType( typ1->object, typ2 ) ) {
            ret_val = NO;
        }
    } else if( typ2->decl_type == TYPE_ARRAY ) {
        if( !IdenticalType( typ2->object, typ1 ) ) {
            ret_val = NO;
        }
    } else if( typ1->decl_type >= TYPE_LAST_ENTRY  ||
            typ2->decl_type >= TYPE_LAST_ENTRY ) {
            ret_val = NO;
    } else if( top_level == 0 ) {
        ret_val = CompTable[ typ1->decl_type ][ typ2->decl_type ];
    } else {
        ret_val = NO;
        switch( typ1->decl_type ) {
        case TYPE_CHAR:
        case TYPE_SHORT:
        case TYPE_INT:
        case TYPE_LONG:
        case TYPE_LONG64:
            if( typ2->decl_type == typ1->decl_type+1 ) {
                ret_val = PS;
            } else if( TypeSize( typ1 ) ==   TypeSize( typ2 ) ) {
                ret_val = PM;
            }
            break;
        case TYPE_UCHAR:
        case TYPE_USHORT:
        case TYPE_UINT:
        case TYPE_ULONG:
        case TYPE_ULONG64:
            if( typ2->decl_type+1 == typ1->decl_type ) {
                ret_val = PS;
            } else if( TypeSize( typ1 ) ==   TypeSize( typ2 ) ) {
                ret_val = PM;
            }
            break;
        default:
            break;
        }
    }
    return( ret_val );
}
#define SUBNOT( a, b, on )  ( ( (a&on)|(b&on) )^(a&on) )
static cmp_type CompatibleType( TYPEPTR typ1, TYPEPTR typ2, int assignment )
{
    cmp_type         ret_val;
    cmp_type         ret_pq;
    type_modifiers   typ1_flags, typ2_flags;
    int              top_level;

    top_level = 0;
    typ1_flags = FLAG_NONE;
    typ2_flags = FLAG_NONE;
    ret_pq = OK;
    typ1 = SkipTypeFluff( typ1 ); // skip typedefs go into enums base
    typ2 = SkipTypeFluff( typ2 );
    if( typ1->decl_type == TYPE_POINTER && typ2->decl_type == TYPE_POINTER ) {
    // top level pointer
        typ1_flags = typ1->u.p.decl_flags;
        typ2_flags = typ2->u.p.decl_flags;
        if( assignment ) {
            type_modifiers subnot;

            subnot = SUBNOT( typ1_flags, typ2_flags, QUAL_FLAGS );
            if( subnot ) {  // allow void * =  unaligned *
                if( subnot & (QUAL_FLAGS & ~FLAG_UNALIGNED) ) {
                    ret_pq = PQ;
                } else if( subnot & FLAG_UNALIGNED) {
                    int align1;

                    align1 = GetTypeAlignment( typ1->object );
                    if( align1 > 1 ) {
                        ret_pq = PQ;
                    }
                }
            }
            if( (typ1_flags & FLAG_MEM_MODEL)!=(typ2_flags & FLAG_MEM_MODEL) ) {
                int size1, size2;

                size1 = TypeSize( typ1 );
                size2 = TypeSize( typ2 );
                if( size1 < size2 ) {
                   ret_pq = PT;
                } else if( size1 > size2 ) {
                    ret_pq = PX;
                }
            }
        }
        typ1 = typ1->object;
        typ2 = typ2->object;
        ++top_level;
    }
    ret_val = DoCompatibleType( typ1, typ2, top_level, VC_CONVERT );
    if( ret_val == OK ) {
        ret_val = ret_pq;
    }
    return( ret_val );
}

void CompatiblePtrType( TYPEPTR typ1, TYPEPTR typ2 )
{
    switch( CompatibleType( typ1, typ2, 0 ) ) {
    case PT:                                        /* 31-aug-89 */
    case PX:
        break;
    case PQ:
        if( !CompFlags.no_check_qualifiers ) { // else fuck em
            CWarn1( WARN_QUALIFIER_MISMATCH, ERR_QUALIFIER_MISMATCH );
        }
        break;
    case PM:                                    /* 16-may-91 */
    case NO:
        CWarn1( WARN_POINTER_TYPE_MISMATCH, ERR_POINTER_TYPE_MISMATCH );
        break;
    case PS:
        CWarn1( WARN_SIGN_MISMATCH, ERR_SIGN_MISMATCH );
        break;
    case PW:
        CWarn1( WARN_INCONSISTENT_INDIRECTION_LEVEL,
                    ERR_INCONSISTENT_INDIRECTION_LEVEL );
        break;
    case PC:
        CWarn1( WARN_PCTYPE_MISMATCH, ERR_PCTYPE_MISMATCH );
        break;
    case OK:
    case AC:
        break;
    }
}

static void CompareParms( TYPEPTR *master,
                          TREEPTR *passed,
                          int source_fno,
                          int call_line )
{
    TYPEPTR     typ;
    TYPEPTR     typ2;
    int         parm_num;
    TREEPTR     parm;
    char        *filename;

    cmp_type    cmp;

    typ = *master;
    if( typ != NULL ) {                     /* 27-feb-90 */
        if( typ->decl_type == TYPE_VOID ) { /* type func(void); */
            typ = NULL;                     /* indicate no parms */
        }
    }
    ErrLine = call_line;
    filename = FileIndexToCorrectName( source_fno );
    parm_num = 1;
    while( typ != NULL  &&  *passed != 0 ) {
        SymLoc = filename;
        while( typ->decl_type == TYPE_TYPEDEF ) typ = typ->object;
        //TODO is crap needed or has it been done
        if( typ->decl_type == TYPE_FUNCTION ) {
            typ = PtrNode( typ, FLAG_NONE, SEG_CODE );
        } else if( typ->decl_type == TYPE_ARRAY ) {
            typ = PtrNode( typ->object,
                            FLAG_WAS_ARRAY,
                           SEG_DATA );
        }
        parm = *passed;
        typ2 = parm->expr_type;
        // typ2 will be NULL if parm is OPR_ERROR in which case an error
        // has already been generated
        if( typ2 != NULL ) {
            /* check compatibility of parms */
            SetDiagType2 ( typ2, typ );
            cmp = CompatibleType( typ, typ2, 1 );
            switch( cmp ) {
            case NO:
            case PT:
            case PX:
            case AC:
                CErr2( ERR_PARM_TYPE_MISMATCH, parm_num );
                break;
            case PQ:
                if( !CompFlags.no_check_qualifiers ) { // else fuck em
                    CWarn2( WARN_QUALIFIER_MISMATCH,
                        ERR_PARM_QUALIFIER_MISMATCH, parm_num );
                }
                break;
            case PM:                                    /* 16-may-91 */
                CWarn2( WARN_POINTER_TYPE_MISMATCH,
                        ERR_PARM_POINTER_TYPE_MISMATCH, parm_num );
                break;
            case PS:
                CWarn2( WARN_SIGN_MISMATCH,
                        ERR_PARM_SIGN_MISMATCH, parm_num );
                break;
            case PW:
                CWarn2( WARN_PARM_INCONSISTENT_INDIRECTION_LEVEL,
                        ERR_PARM_INCONSISTENT_INDIRECTION_LEVEL, parm_num );
                break;
            case PC:
                if( parm->right->op.opr == OPR_PUSHINT ) {
                    if( TypeSize(typ) != TypeSize(typ2) ) {
                        CErr2( ERR_PARM_TYPE_MISMATCH, parm_num );
                    } else if( parm->right->op.ulong_value != 0 ) {
                        CWarn1( WARN_NONPORTABLE_PTR_CONV,
                                ERR_NONPORTABLE_PTR_CONV );
                    }
                } else {
                    if( TypeSize(typ->object) == TypeSize(typ2->object) ) {
                        CWarn2( WARN_POINTER_TYPE_MISMATCH,
                             ERR_PARM_POINTER_TYPE_MISMATCH, parm_num );
                    } else {
                        CErr2( ERR_PARM_TYPE_MISMATCH, parm_num );
                    }
                }
                break;
            case OK:
                break;
            }
        SetDiagPop();
        }
        ++master;
        typ = *master;
        ++passed;
        if( typ == NULL ) break;
        if( typ->decl_type == TYPE_DOT_DOT_DOT ) return;
        ++parm_num;
    }
    if( typ != NULL || *passed != 0 ) {     /* should both be NULL now */
#if _CPU == 386
        /* can allow wrong number of parms with -3s option; 06-dec-91 */
        if( ! CompFlags.register_conventions ) {
            SymLoc = filename;
            CWarn1( WARN_PARM_COUNT_MISMATCH, ERR_PARM_COUNT_WARNING );
            SymLoc = NULL;
            return;
        }
#endif
        SymLoc = filename;
        CErr1( ERR_PARM_COUNT_MISMATCH );           /* 18-feb-90 */
    }
    SymLoc = NULL;
}

extern  call_list *CallNodeList;

extern void ChkCallParms( void )
{
    call_list  *nextcall;
    TREEPTR     *actualparmlist;

    actualparmlist = (TREEPTR *)&ValueStack[0];
    nextcall = CallNodeList;
    while( nextcall != NULL ) {
        call_list  *next;
        TREEPTR     callnode;
        TREEPTR     callsite;
        SYM_ENTRY   sym;
        TYPEPTR     typ;

        callnode = nextcall->callnode;
        if( callnode != NULL ) {
            callsite = callnode->left;      // point to OPR_FUNCNAME node
            SymGet( &sym, callsite->op.sym_handle );
            typ = sym.sym_type;
            while( typ->decl_type == TYPE_TYPEDEF )  typ = typ->object;
            if( typ->u.parms != NULL ) {
                unsigned    parm_count;
                TREEPTR     parm;

                parm = callnode->right;
                parm_count = 0;
                while( parm != NULL ) {
                    actualparmlist[parm_count] = parm;
                    ++parm_count;
                    parm = parm->left;
                }
                actualparmlist[parm_count] = NULL;
                if( ParmsToBeReversed( sym.attrib, NULL ) ) {
                    int         i, j;
                    TREEPTR     tmp;

                    j = parm_count - 1;
                    for( i = 0; i < j; ++i, --j ) {
                        tmp = actualparmlist[i];
                        actualparmlist[i] = actualparmlist[j];
                        actualparmlist[j] = tmp;
                    }
                }
                SetDiagSymbol( &sym, callsite->op.sym_handle );
                CompareParms( typ->u.parms, actualparmlist,
                                    nextcall->source_fno,
                                    nextcall->srclinenum );
                SetDiagPop();
            }
        }
        next = nextcall->next;
        CMemFree( nextcall  );
        nextcall = next;
    }
}

#define MAXSIZE        (sizeof( long )*8)
static void AssRangeChk( TYPEPTR typ1, TREEPTR opnd2 )
{
    unsigned       long high;
    if( opnd2->op.opr == OPR_PUSHINT ) {
        switch( typ1->decl_type ) {
        case TYPE_FIELD:
        case TYPE_UFIELD:
            high = 0xfffffffful >> (MAXSIZE - (typ1->u.f.field_width));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲另类激情小说| 日韩欧美激情四射| 精品国产乱码久久久久久影片| 欧美国产激情一区二区三区蜜月 | 欧美国产亚洲另类动漫| 亚洲第一二三四区| av电影在线观看不卡| 欧美成人精精品一区二区频| 亚洲欧美福利一区二区| 国产不卡在线视频| 欧美成人精品1314www| 丝袜国产日韩另类美女| 91久久精品午夜一区二区| 国产精品久久久久久久岛一牛影视| 久久成人18免费观看| 欧美精品在线观看一区二区| 亚洲精品成人在线| 91浏览器在线视频| 国产精品天美传媒| 国产成人精品一区二区三区四区 | 日本亚洲最大的色成网站www| 日本韩国欧美一区二区三区| 亚洲欧洲一区二区三区| 成人高清视频在线观看| 国产精品色噜噜| 国产黄色91视频| 国产性色一区二区| 国产黄人亚洲片| 欧美极品xxx| 成人白浆超碰人人人人| 国产清纯在线一区二区www| 国产麻豆精品95视频| 久久九九国产精品| 成人免费毛片嘿嘿连载视频| 国产精品第五页| 色综合久久天天| 亚洲狠狠丁香婷婷综合久久久| 91麻豆国产自产在线观看| 亚洲三级在线免费| 欧美日韩小视频| 日韩中文字幕亚洲一区二区va在线| 欧美群妇大交群的观看方式| 日韩福利视频网| 日韩一二三四区| 国产精选一区二区三区| 中文字幕在线观看不卡视频| 91麻豆福利精品推荐| 午夜精品久久久久久久99水蜜桃| 在线综合视频播放| 极品尤物av久久免费看| 国产精品免费久久| 欧美色图一区二区三区| 丝袜国产日韩另类美女| 久久久久久久久岛国免费| 北岛玲一区二区三区四区| 亚洲毛片av在线| 欧美日韩国产高清一区| 黑人精品欧美一区二区蜜桃 | 国产色婷婷亚洲99精品小说| 99精品久久只有精品| 亚洲综合色自拍一区| 精品成人佐山爱一区二区| 91蜜桃在线观看| 久久精品99国产精品| 日韩理论在线观看| 日韩欧美在线一区二区三区| 粉嫩久久99精品久久久久久夜| 亚洲一区二区三区小说| 精品国产一区久久| 91蜜桃免费观看视频| 久久国产三级精品| 亚洲日本乱码在线观看| 精品久久一区二区| 91福利在线播放| 国产成人午夜视频| 视频一区二区三区中文字幕| 国产日韩av一区二区| 欧美三级中文字幕在线观看| 国产一区二区剧情av在线| 性欧美大战久久久久久久久| 国产精品入口麻豆原神| 欧美一区日韩一区| 91丨九色porny丨蝌蚪| 精品亚洲成a人在线观看| 一区二区三区欧美视频| 国产女人18毛片水真多成人如厕 | 亚洲欧美日韩中文字幕一区二区三区 | 久久久www成人免费毛片麻豆| 欧美午夜精品久久久久久孕妇| 国产一区二区久久| 久久精品国产成人一区二区三区| 亚洲精品ww久久久久久p站 | 波多野结衣视频一区| 国产综合久久久久久久久久久久| 午夜伦欧美伦电影理论片| 国产精品久久久久久久久久久免费看 | 中文字幕精品一区| 欧美精品一区二区不卡| 7777精品伊人久久久大香线蕉| 在线亚洲欧美专区二区| 国产黄色成人av| 国产suv精品一区二区883| 国产精品一二二区| 韩国v欧美v亚洲v日本v| 开心九九激情九九欧美日韩精美视频电影| 夜夜嗨av一区二区三区四季av| 国产精品不卡在线| 中文字幕欧美日韩一区| 国产欧美精品国产国产专区| 国产视频911| 国产精品情趣视频| 国产精品久久久久久久久搜平片| 久久久精品黄色| 欧美高清在线一区二区| 国产亚洲成aⅴ人片在线观看| 久久久九九九九| 中文久久乱码一区二区| 国产精品国产三级国产aⅴ入口| 国产精品国产成人国产三级 | 在线免费观看视频一区| 在线日韩av片| 69堂精品视频| 日韩精品一区二区三区中文不卡 | 久久久99免费| 国产精品欧美一级免费| 亚洲免费观看高清完整版在线| 亚洲欧美日韩在线不卡| 亚洲午夜久久久久久久久电影网 | 日本不卡视频在线观看| 激情综合网天天干| 成人做爰69片免费看网站| 国产91在线观看丝袜| 91在线观看成人| 欧美精品色一区二区三区| 日韩欧美国产一区二区三区| 久久人人爽人人爽| 亚洲欧洲av在线| 天堂蜜桃91精品| 国产馆精品极品| 欧洲另类一二三四区| 日韩欧美综合在线| 国产精品夫妻自拍| 日韩精品视频网站| 99精品视频在线观看免费| 欧美日韩国产精品成人| 久久久精品天堂| 一区二区三区中文字幕精品精品| 日本女优在线视频一区二区| 成人中文字幕电影| 欧美日韩免费电影| 国产欧美精品一区二区色综合朱莉 | 欧美经典一区二区| 亚洲成av人影院| 国产成人免费在线视频| 欧美三级日本三级少妇99| 久久久久久久av麻豆果冻| 一区二区三区在线不卡| 韩国三级中文字幕hd久久精品| 色综合久久综合中文综合网| 精品精品欲导航| 一区二区三区在线观看欧美| 国内精品第一页| 欧美日韩免费电影| 中文字幕一区二区三区乱码在线| 蜜臀va亚洲va欧美va天堂| av亚洲精华国产精华精华| 日韩一区二区影院| 亚洲制服丝袜在线| 成人免费看的视频| 精品国产青草久久久久福利| 亚洲va欧美va人人爽午夜| av在线不卡电影| 久久九九国产精品| 麻豆精品视频在线观看| 欧美主播一区二区三区美女| 国产精品天干天干在观线| 国产一区二区成人久久免费影院| 在线成人av网站| 亚洲一区二区三区四区中文字幕| 成人av电影观看| 国产欧美日韩在线| 国产在线精品一区二区不卡了| 欧美精品xxxxbbbb| 亚洲大片免费看| 欧美视频一区二区三区四区 | 九一九一国产精品| 欧美日韩国产bt| 亚洲成av人片一区二区三区 | 亚洲国产精品一区二区www在线| 99久久婷婷国产综合精品电影| 久久精品视频在线看| 国内精品嫩模私拍在线| 日韩精品专区在线| 免费高清成人在线| 日韩女优av电影在线观看| 蜜桃av一区二区在线观看| 日韩免费观看高清完整版在线观看| 污片在线观看一区二区| 欧美日韩成人综合天天影院| 亚洲成av人综合在线观看|