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

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

?? cfeinfo.c

?? Open Watcom 的 C 編譯器源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  Callback functions invoked from cg - communicate
*               auxiliary information to the backend.
*
****************************************************************************/


#include <ctype.h>
#include "cvars.h"
#include "cg.h"
#include "cgswitch.h"
#include "pragdefn.h"
#include "pdefn2.h"
#include "iopath.h"
#include "compcfg.h"
#include <sys/stat.h>
#include "autodept.h"

static unsigned char VarFuncWeights[] = {
//a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y,z
  0, 0,13, 0, 2, 1, 0, 0, 0, 0, 0,12, 0,14, 4,10, 0, 0, 6, 0, 0, 0, 0, 0, 0,0
};

static char *VarParmFuncs[] =
{    /* functions with var parm lists */
    "",             // 0
    "",             // 1
    "",             // 2
    "",             // 3
    "",             // 4
    "",             // 5
    "",             // 6
    "",             // 7
    "fscanf",       // 8
    "fprintf",      // 9
    "execle",       // 10
    "execlpe",      // 11
    "scanf",        // 12
    "sscanf",       // 13
    "sprintf",      // 14
    "spawnle",      // 15
    "spawnlpe",     // 16
    "printf",       // 17
    "execlp",       // 18
    "execl",        // 19
    "cscanf",       // 20
    "cprintf",      // 21
    "open",         // 22
    "spawnlp",      // 23
    "spawnl",       // 24
    "sopen",        // 25
    "",             // 26
    "",             // 27
    "",             // 28
    "",             // 29
    "",             // 30
    "",             // 31
};

#ifdef __SEH__
    #if _CPU == 386
    hw_reg_set TryParms[] =
    {
        HW_D_1( HW_EAX ),
        0
    };
    #else
    hw_reg_set TryParms[] =
    {
        HW_D( HW_EMPTY ),
        0
    };
    #endif
#endif

/*
//    does the specified symbol take variable parameters? manual search.
*/
int VarParm( SYMPTR sym )
{
    TYPEPTR     *parm;
    TYPEPTR     typ;
    TYPEPTR     fn_typ;

    if( sym == NULL )
        return( 0 );

    if( sym->flags & SYM_FUNCTION )
    {
        fn_typ = sym->sym_type;
        while( fn_typ->decl_type == TYPE_TYPEDEF )
            fn_typ = fn_typ->object;

        parm = fn_typ->u.parms;
        if( parm != NULL )
        {
            for(; (typ = *parm); ++parm )
            {
                if( typ->decl_type == TYPE_DOT_DOT_DOT )
                    return( 1 );
            }
        }
    }
    return( 0 );
}

/*
//    does the specified symbol take variable args? hash calc'ed
//
*/
int VarFunc( SYMPTR sym )
{
    int         hash;
    int         len;
    char *        p;

    if( sym == NULL )
        return( 0 );

    if( sym->flags & SYM_FUNCTION )
    {
        p = sym->name;
        len = strlen( p );
        hash = (len + VarFuncWeights[ p[0] - 'a' ]
                 + VarFuncWeights[ p[len-1] -'a' ]) & 31;

        if( strcmp( p, VarParmFuncs[ hash ] ) == 0 )
            return( 1 );

        return( VarParm( sym ) );
    }
    return( 0 );
}

#if _MACHINE == _PC

static struct inline_funcs __FAR *Flat( struct inline_funcs __FAR *ifunc )
{
    #if _CPU == 386
    extern byte_seq *    FlatAlternates[];
    byte_seq **            p;

    if( TargetSwitches & FLAT_MODEL )
    {
        for( p = FlatAlternates; p[0] != NULL; p += 2 )
        {
            if( p[0] == ifunc->code )
            {
                ifunc->code = p[1];
                return( ifunc );
            }
        }
    }
    #endif
    return( ifunc );
}
#endif


#if _MACHINE == _PC
struct inline_funcs __FAR *IF_Lookup( char *name )
{
    struct inline_funcs __FAR *    ifunc;

    if( GET_FPU( ProcRevision ) > FPU_NONE )
    {
        ifunc = _8087_Functions;
        while( ifunc->name )
        {
            if( strcmp( ifunc->name, name ) == 0 )
                return( Flat( ifunc ) );
            ++ifunc;
        }
    }
    if( OptSize == 100 )
    {              /* if /os specified */
        ifunc = SInline_Functions;
        if( TargetSwitches & BIG_DATA )
        {
            #if _CPU == 8086
            if( TargetSwitches & FLOATING_DS )
            {
                ifunc = ZF_Data_Functions;
            }
            else
            {
                ifunc = ZP_Data_Functions;
            }
            #else
            ifunc = SBigData_Functions;
            #endif
        }
        while( ifunc->name )
        {
            if( strcmp( ifunc->name, name ) == 0 )
                return( Flat( ifunc ) );
            ++ifunc;
        }
    }
    #if _CPU == 386
    if( TargetSwitches & FLAT_MODEL )
    {
        ifunc = Flat_Functions;
        while( ifunc->name )
        {
            if( strcmp( ifunc->name, name ) == 0 )
                return( ifunc );
            ++ifunc;
        }
    }
    #endif
    ifunc = Inline_Functions;
    if( TargetSwitches & BIG_DATA )
    {
        #if _CPU == 8086
        if( TargetSwitches & FLOATING_DS )
        {
            ifunc = DF_Data_Functions;
        }
        else
        {
            ifunc = DP_Data_Functions;
        }
        #else
        ifunc = BigData_Functions;
        #endif
    }
    while( ifunc->name )
    {
        if( strcmp( ifunc->name, name ) == 0 )
            return( Flat( ifunc ) );
        ++ifunc;
    }
    ifunc = Common_Functions;
    while( ifunc->name )
    {
        if( strcmp( ifunc->name, name ) == 0 )
            return( Flat( ifunc ) );
        ++ifunc;
    }
    return( NULL );
}
#endif

/*
//    return language specific info
*/
struct aux_info *LangInfo( int flags, struct aux_info *inf )
{
    if( inf != &DefaultInfo )
        return( inf );

    switch( flags & FLAG_LANGUAGES )
    {
    case LANG_CDECL:
        inf = &CdeclInfo;
        break;

    case LANG_PASCAL:
        inf = &PascalInfo;
        break;

    case LANG_FORTRAN:
        inf = &FortranInfo;
        break;

    case LANG_SYSCALL:                          /* 04-jul-91 */
        inf = &SyscallInfo;
        break;

    case LANG_STDCALL:                          /* 08-jan-92 */
        inf = &StdcallInfo;
        break;

    case LANG_OPTLINK:                          /* 08-jan-92 */
        inf = &OptlinkInfo;
        break;

    case LANG_FASTCALL:                         /* 08-jan-92 */
        inf = &FastCallInfo;
        break;
    }
    return( inf );
}

int ParmsToBeReversed( int flags, struct aux_info *inf )
{
    #ifdef REVERSE
    inf = LangInfo( flags, inf );
    if( inf != NULL )
    {
        if( inf->class & REVERSE_PARMS )
            return( 1 );
    }
    #else
    flags = flags;
    inf = inf;
    #endif
    return( 0 );
}

struct aux_info *ModifyLookup( SYMPTR sym )
{
#if _CPU == 386 || _CPU == 8086
    char *                p;
    struct aux_info *    inf;
    int                    len;
    int                    hash;

    static unsigned char NoModifyWeights[] =
    {
    //a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y,z
      1, 4, 5, 0, 0,11, 0, 0, 8, 0, 0,15, 0,14,10, 0, 0, 9, 3, 7, 0, 0, 0, 0, 0,0
    };

    static char *NoModifyFuncs[] =
    {
        "sqrt",
        "ceil",
        "cos",
        "fabs",
        "atan2",
        "sinh",
        "atan",
        "labs",
        "abs",
        "tanh",
        "floor",
        "tan",
        "cosh",
        "asin",
        "sin",
        "acos",
    };

    p = sym->name;
    if( p != NULL )
    {                           /* 01-jun-90 */
        len = strlen( p );
        hash = (len + NoModifyWeights[ p[0] - 'a' ]
                    + NoModifyWeights[ p[len-2] - 'a' ]) & 15;

        if( strcmp( NoModifyFuncs[ hash ], p ) == 0 )
        {
            inf = &InlineInfo;
            inf->class = DefaultInfo.class | NO_MEMORY_READ | NO_MEMORY_CHANGED;
            inf->code = NULL;
            inf->parms = DefaultInfo.parms;
            inf->returns = DefaultInfo.returns;
            HW_CAsgn( inf->streturn, HW_EMPTY );
            inf->save = DefaultInfo.save;
            inf->objname = DefaultInfo.objname;
            inf->use = 1;
            return( inf );
        }
    }
#else
    sym = sym;
#endif
    return( &DefaultInfo );
}

struct aux_info *InfoLookup( SYMPTR sym )
{
    char *                name;
    struct aux_info *    inf;
    struct aux_entry *    ent;

    name = sym->name;
    inf = &DefaultInfo;         /* assume default */
    if( name == NULL )
        return( inf );                   /* 01-jun-90 */
    ent = AuxLookup( name );
    if( ent != NULL )
    {
        inf = ent->info;
    }
    else
    {
        if( sym->flags & SYM_DEFINED )
            return( inf );

        if( ! (sym->flags & SYM_INTRINSIC) )
        {  /* 12-oct-92 */
            if( memcmp( name, "_inline_", 8 ) != 0 )
                return( inf );
            name += 8;
        }
        #if _MACHINE == _PC
        {
            struct inline_funcs __FAR *ifunc;

            ifunc = IF_Lookup( name );
            if( ifunc == NULL )
                return( inf );
            if( HW_CEqual( ifunc->returns, HW_DX_AX ) ||
                HW_CEqual( ifunc->returns, HW_DS_SI ) ||
                HW_CEqual( ifunc->returns, HW_ES_DI ) ||
                HW_CEqual( ifunc->returns, HW_CX_DI ) )
            {
                if( SizeOfArg( sym->sym_type->object ) != 4 )
                    return( inf );
            }
            inf = &InlineInfo;
            inf->class = (DefaultInfo.class & FAR) | MODIFY_EXACT;
            inf->code = ifunc->code;
            inf->parms = ifunc->parms;
            inf->returns = ifunc->returns;
            if( !HW_CEqual( inf->returns, HW_AX )
             && !HW_CEqual( inf->returns, HW_EMPTY ) )
            {
                inf->class |= SPECIAL_RETURN;
            }
            HW_CAsgn( inf->streturn, HW_EMPTY );
            inf->save = ifunc->save;
            inf->objname = DefaultInfo.objname; /* 26-jan-93 */
            inf->use = 1;
        }
        #endif
    }
    return( inf );
}

struct aux_info *FindInfo( SYM_ENTRY *sym, SYM_HANDLE sym_handle )
{
    auto SYM_ENTRY      sym_typedef;
    struct aux_entry    *ent;
    TYPEPTR             typ;
    struct aux_info     *inf;

    inf = &DefaultInfo;         /* assume default */
    if( sym_handle == 0 )
        return( inf );

    SymGet( sym, sym_handle );
    #if _CPU == 386
    if( sym_handle == SymSTOSB || sym_handle == SymSTOSD )
    {
        return( &STOSBInfo );
    }
    if( sym_handle == SymFinally )
    {                /* 28-mar-94 */
        static byte_seq FinallyCode = { 1, {0xc3} };

        InlineInfo = DefaultInfo;
        InlineInfo.code = &FinallyCode;
        return( &InlineInfo );
    }
    if( sym_handle == SymTryFini )
    {
        static hw_reg_set TryFiniParms[] =
        {
            HW_D( HW_EAX ),
            HW_D( HW_EMPTY )
        };
        static byte_seq TryFiniCode =
        {
            6, {0x64, 0xA3, 0,0,0,0}
        };  /* mov fs:0,eax */

        InlineInfo = DefaultInfo;
        InlineInfo.parms = TryFiniParms;
        InlineInfo.code = &TryFiniCode;
        return( &InlineInfo );
    }
    #endif
    if( !( sym->flags & SYM_TEMP ) )
    {  /* not an indirect func call*/
        inf = InfoLookup( sym );
        if( inf == &DefaultInfo )
            inf = ModifyLookup( sym );
    }
    if( inf == &DefaultInfo )
    {
        typ = SkipDummyTypedef( sym->sym_type );
        if( typ->decl_type == TYPE_TYPEDEF )
        {
            SymGet( &sym_typedef, typ->u.typedefn );
            if( sym_typedef.name != NULL )
            {
                ent = AuxLookup( sym_typedef.name );
                if( ent != NULL )
                {
                    inf = ent->info;
                }
            }
        }
    }
    #if _CPU == 386
    if( ( inf->flags & AUX_FLAG_FAR16 ) ||
        ( sym->attrib & FLAG_FAR16 ) )
    {
        if( ( (sym->attrib & FLAG_LANGUAGES) == LANG_PASCAL ) ||
            ( inf->class & REVERSE_PARMS ) )
        {
            return( &Far16PascalInfo );
        }
        else
        {
            return( &Far16CdeclInfo );
        }
    }
    #endif
    return( inf );
}

int FunctionAborts( SYM_ENTRY *sym, SYM_HANDLE sym_handle )  /* 09-apr-93 */
{
    struct aux_entry    *ent;

    if( sym_handle != 0 )
    {                             /* 19-apr-93 */
        SymGet( sym, sym_handle );
        ent = AuxLookup( SymName( sym, sym_handle ) );
        if( ent != NULL )
        {
            if( ent->info->class & SUICIDAL )
                return( 1 );
        }
    }
    return( 0 );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久这里只有精品首页| 色婷婷综合久久| 日韩欧美成人午夜| 狂野欧美性猛交blacked| 日韩三级免费观看| 黑人精品欧美一区二区蜜桃| 欧美疯狂做受xxxx富婆| 亚洲日本在线天堂| 99综合影院在线| 亚洲欧美另类久久久精品2019| caoporn国产一区二区| 中文字幕日韩一区| 91福利精品视频| 男人操女人的视频在线观看欧美| 欧美变态tickle挠乳网站| 国产乱码一区二区三区| 国产精品私人自拍| 欧美色涩在线第一页| 奇米影视在线99精品| 久久亚洲春色中文字幕久久久| 成人综合在线观看| 一区二区三区四区在线播放 | 日日欢夜夜爽一区| 精品视频资源站| 国产在线看一区| 亚洲色图.com| 日韩欧美国产综合一区| 国产91色综合久久免费分享| 亚洲激情在线激情| 精品国产一区二区三区av性色| 成人av在线资源网站| 亚洲高清免费观看高清完整版在线观看| 91精品国产麻豆| 成人黄色在线视频| 三级久久三级久久| 中文字幕一区不卡| 欧美一级高清片| 91在线观看视频| 精品一区二区三区蜜桃| 亚洲乱码国产乱码精品精98午夜| 欧美成人一区二区三区在线观看| 91视频观看视频| 国产一区免费电影| 亚洲成人你懂的| 1024成人网| 久久综合九色综合久久久精品综合| 在线精品视频免费观看| 国产91精品精华液一区二区三区 | 亚洲在线成人精品| 国产婷婷色一区二区三区在线| 欧美日韩免费在线视频| 国产成人精品综合在线观看| 日韩精品亚洲专区| 亚洲黄色录像片| 国产精品短视频| 久久久久国产精品麻豆| 日韩欧美自拍偷拍| 欧美日韩免费不卡视频一区二区三区| 不卡的av网站| 欧美一区二区二区| 亚洲特级片在线| 精品久久一区二区| 欧美狂野另类xxxxoooo| 色综合久久99| av资源站一区| 成人动漫精品一区二区| 国内一区二区视频| 极品少妇一区二区三区精品视频 | 国产精品资源网| 日本麻豆一区二区三区视频| 一区二区三区中文在线| 亚洲欧美日韩在线不卡| 综合久久久久久| 综合欧美亚洲日本| 中文字幕一区免费在线观看| 国产精品午夜久久| 国产精品美女久久久久久久久久久 | 538在线一区二区精品国产| 色综合一个色综合| 色综合欧美在线| 日本道色综合久久| 欧美手机在线视频| 欧美午夜精品免费| 欧美久久久久久久久久 | 在线成人免费观看| 欧美日本一区二区在线观看| 在线免费亚洲电影| 91精品欧美一区二区三区综合在 | 麻豆国产欧美日韩综合精品二区| 丝袜脚交一区二区| 麻豆极品一区二区三区| 国模套图日韩精品一区二区| 精品在线播放免费| 丰满亚洲少妇av| 色哟哟欧美精品| 欧美日产国产精品| 久久综合资源网| 国产精品国产三级国产普通话99 | 欧美日韩午夜在线| 日韩一区二区三区观看| 久久综合九色综合欧美就去吻| 日本一区免费视频| 亚洲精品videosex极品| 天天色天天操综合| 国产精品自在欧美一区| 色先锋资源久久综合| 欧美丰满少妇xxxxx高潮对白| 精品国产一区二区三区不卡| 国产精品成人免费精品自在线观看 | 99天天综合性| 欧美色老头old∨ideo| 日韩免费看的电影| 中文字幕亚洲一区二区va在线| 亚洲国产cao| 国产91丝袜在线播放0| 精品日韩一区二区三区| 9191成人精品久久| 久久精品一二三| 亚洲美女免费视频| 美女看a上一区| 成人av资源站| 欧美一区二区啪啪| 中文字幕一区二区三区在线播放 | 欧美伊人久久大香线蕉综合69| 欧美一区二区视频免费观看| 国产精品久久久久久久久免费相片 | 国产一级精品在线| 欧亚一区二区三区| 久久九九全国免费| 日日夜夜精品视频免费| 9色porny自拍视频一区二区| 日韩欧美一区二区久久婷婷| 亚洲三级电影全部在线观看高清| 另类专区欧美蜜桃臀第一页| 在线一区二区观看| 国产午夜精品久久久久久免费视| 亚洲国产wwwccc36天堂| www.在线欧美| 久久精品一区八戒影视| 奇米综合一区二区三区精品视频| 色悠久久久久综合欧美99| 国产亚洲欧美在线| 精品在线你懂的| 欧美高清视频一二三区| 一区二区三区四区不卡视频| 国产精品18久久久久久久久 | 日韩一级大片在线观看| 亚洲欧美国产高清| 成人中文字幕在线| 久久综合九色综合97婷婷| 天堂资源在线中文精品| 91国产丝袜在线播放| 中文字幕亚洲成人| 春色校园综合激情亚洲| 久久蜜桃av一区精品变态类天堂 | 欧美不卡在线视频| 日本在线不卡视频一二三区| 欧美中文字幕亚洲一区二区va在线| 国产精品欧美综合在线| 国产九色精品成人porny| 精品乱码亚洲一区二区不卡| 偷拍亚洲欧洲综合| 欧美日韩亚洲综合一区二区三区| 一区二区不卡在线播放| 色婷婷综合久久久久中文一区二区| 国产精品国产三级国产有无不卡| 国产99久久久国产精品免费看| 精品国产麻豆免费人成网站| 麻豆一区二区99久久久久| 日韩女优av电影在线观看| 日本亚洲欧美天堂免费| 91精品国产黑色紧身裤美女| 青青草97国产精品免费观看 | 色网综合在线观看| 一区二区三区不卡视频| 欧美亚日韩国产aⅴ精品中极品| 一区二区三区日韩| 欧美日韩国产综合一区二区| 天天av天天翘天天综合网 | 色爱区综合激月婷婷| 一区二区激情视频| 欧美影片第一页| 日日摸夜夜添夜夜添精品视频| 欧美日本高清视频在线观看| 日本三级亚洲精品| 精品国精品自拍自在线| 91精品国产欧美日韩| 美女视频一区二区三区| 久久欧美一区二区| 9久草视频在线视频精品| 亚洲精品视频免费观看| 欧美精品亚洲二区| 韩国欧美国产1区| 国产精品福利影院| 欧美三级电影网站| 九九九久久久精品| 中文字幕日韩av资源站| 欧美美女直播网站| 国产伦精品一区二区三区免费迷 | 亚洲午夜电影在线|