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

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

?? compile.c

?? nVidia開發的圖形語言 Cg
?? C
?? 第 1 頁 / 共 5 頁
字號:
/****************************************************************************\
Copyright (c) 2002, NVIDIA Corporation.

NVIDIA Corporation("NVIDIA") supplies this software to you in
consideration of your agreement to the following terms, and your use,
installation, modification or redistribution of this NVIDIA software
constitutes acceptance of these terms.  If you do not agree with these
terms, please do not use, install, modify or redistribute this NVIDIA
software.

In consideration of your agreement to abide by the following terms, and
subject to these terms, NVIDIA grants you a personal, non-exclusive
license, under NVIDIA's copyrights in this original NVIDIA software (the
"NVIDIA Software"), to use, reproduce, modify and redistribute the
NVIDIA Software, with or without modifications, in source and/or binary
forms; provided that if you redistribute the NVIDIA Software, you must
retain the copyright notice of NVIDIA, this notice and the following
text and disclaimers in all such redistributions of the NVIDIA Software.
Neither the name, trademarks, service marks nor logos of NVIDIA
Corporation may be used to endorse or promote products derived from the
NVIDIA Software without specific prior written permission from NVIDIA.
Except as expressly stated in this notice, no other rights or licenses
express or implied, are granted by NVIDIA herein, including but not
limited to any patent rights that may be infringed by your derivative
works or by other works in which the NVIDIA Software may be
incorporated. No hardware is licensed hereunder. 

THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED,
INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
ITS USE AND OPERATION EITHER ALONE OR IN COMBINATION WITH OTHER
PRODUCTS.

IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT,
INCIDENTAL, EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, LOST PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY
OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE
NVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT,
TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\****************************************************************************/

//
// compile.c
//

// In a cygnus tools window in the "gen" directory, run the following command:
//
// bison parser.y --defines -output ../src/parser.c --verbose

#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "slglobals.h"

/*
 * OpenOutputFile()
 *
 */

int OpenOutputFile(void)
{
    if (Cg->options.outputFileName) {
        Cg->options.outfd = fopen(Cg->options.outputFileName, "w");
        if (Cg->options.outfd) {
            Cg->options.OutputFileOpen = 1;
        } else {
            FatalError("Can't open output file \"%s\"", Cg->options.outputFileName);
            return 0;
        }
    } else {
        Cg->options.outfd = stdout;
        Cg->options.OutputFileOpen = 1;
    }
    Cg->theHAL->PrintCodeHeader(Cg->options.outfd);
    fprintf(Cg->options.outfd, "%s cgc version %d.%d.%04d%s, build date %s  %s\n", Cg->theHAL->comment,
            HSL_VERSION, HSL_SUB_VERSION, HSL_SUB_SUB_VERSION, NDA_STRING, Build_Date, Build_Time);
    return 1;
} // OpenOutputFile

/*
 * OpenListFile()
 *
 */

int OpenListFile(void)
{
    if (Cg->options.listFileName) {
        Cg->options.listfd = fopen(Cg->options.listFileName, "w");
        if (Cg->options.listfd) {
            Cg->options.ListFileOpen = 1;
        } else {
            FatalError("Can't open listing file \"%s\"", Cg->options.listFileName);
            return 0;
        }
    } else {
        Cg->options.listfd = stdout;
    }
    if (Cg->options.ListFileOpen) {
        fprintf(Cg->options.listfd, "%s cgc version %d.%d.%04d%s, build date %s  %s\n", Cg->theHAL->comment,
                HSL_VERSION, HSL_SUB_VERSION, HSL_SUB_SUB_VERSION, NDA_STRING, Build_Date, Build_Time);
    }
    return 1;
} // OpenListFile

/*
 * PrintOptions()
 *
 */

void PrintOptions(int argc, char **argv)
{
    int ii;

    if (argc > 1) {
        fprintf(Cg->options.outfd, "%s command line args:", Cg->theHAL->comment);
        for (ii = 1; ii < argc; ii++)
            fprintf(Cg->options.outfd, " %s", argv[ii]);
        fprintf(Cg->options.outfd, "\n");
    }
} // PrintOptions

/*
 * CloseOutputFiles()
 *
 */

int CloseOutputFiles(const char *mess)
{
    if (Cg->options.OutputFileOpen) {
        if (!Cg->options.ListFileOpen)
            fprintf(Cg->options.outfd, "%s %s\n", Cg->theHAL->comment, mess);
        Cg->options.OutputFileOpen = 0;
        if (fclose(Cg->options.outfd)) {
            FatalError("Error closing output file.");
            return 0;
        }
    }
    if (Cg->options.ListFileOpen) {
        fprintf(Cg->options.listfd, "%s %s\n", Cg->theHAL->comment, mess);
        Cg->options.ListFileOpen = 0;
        if (fclose(Cg->options.listfd)) {
            FatalError("Error closing listing file.");
            return 0;
        }
    }
    return 1;
} // CloseOutputFiles

///////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////// Misc Support Functions: ///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

/*
 * HasNumericSuffix() - See if there is a numeric suffix on a string.  If so, strip it off and
 *         retrun the value as an integer.
 */

int HasNumericSuffix(const char *fStr, char *root, int size, int *suffix)
{
    int val, HasSuffix, len, scale;
    char *s, ch;

    strncpy(root, fStr, size - 1);
    len = strlen(fStr);
    if (len >= size)
        len = size - 1;
    root[len] = 0;
    val = 0;
    HasSuffix = 0;
    scale = 1;
    s = &root[len];
    while (1) {
        ch = *--s;
        if (ch >= '0' && ch <= '9' && s >= root) {
            val = val + scale*(ch - '0');
            scale *= 10;
            HasSuffix = 1;
        } else {
            break;
        }
    }
    s[1] = '\0';
    *suffix = val;
    return HasSuffix;
} // HasNumericSuffix

///////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////// Analysis and Code Generation Control Functions ///////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

/*
 * SetSymbolFlags() - Set the flags field for all symbols in this tree.
 *
 */

void SetSymbolFlags(Symbol *fSymb, int fVal)
{
    if (fSymb) {
        fSymb->flags = fVal;
        SetSymbolFlags(fSymb->left, fVal);
        SetSymbolFlags(fSymb->right, fVal);
    }
} // SetSymbolFlags

/*
 * SetSymbolFlagsList() - Walk a list of scopes and set the flags field for all symbols.
 *
 */

void SetSymbolFlagsList(Scope *fScope, int fVal)
{
    while (fScope) {
        SetSymbolFlags(fScope->symbols, fVal);
        fScope = fScope->next;
    }
} // SetSymbolFlagsList

///////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// Various Utility Functions //////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

/*
 * GetNumberedAtom() - Create an atom with the given root string and a numbered suffix.
 */

int GetNumberedAtom(const char *root, int number, int digits, char ch)
{
    char str[256], *s;
    int vname, len;

    strcpy(str, root);
    len = strlen(str);
    if (ch != '\0') {
        str[len] = ch;
        len++;
    }
    s = &str[len + digits];
    *s = '\0';
    while (digits-- > 0) {
        *--s = '0' + number % 10;
        number /= 10;
    }
    vname = AddAtom(atable, str);
    return vname;
} // GetNumberedAtom

/*
 * GetVarExprName() - Return a string representation of the variable described by fExpr.
 */

int GetVarExprName(char *str, int size, expr *fExpr)
{
    const char *name;
    int len = 0, len2;

    *str = '\0';
    switch (fExpr->common.kind) {
    case SYMB_N:
        switch (fExpr->sym.op) {
        case VARIABLE_OP:
        case MEMBER_OP:
            name = GetAtomString(atable, fExpr->sym.symbol->name);
            len2 = strlen(name);
            if (len2 >= size)
                len2 = size - 1;
            len += len2;
            while (len2--)
                *str++ = *name++;
            *str = '\0';
            break;
        }
        break;
    case BINARY_N:
        // Put struct.member code here:
        break;
    }
    return len;
} // GetVarExprName

/*
 * GenerateIndexName() - Create an atom with the given root string representing the variable
 *         by fExpr and a numbered suffix for the index.
 */
int GenerateIndexName(expr *fExpr, int index)
{
    char str[256];
    int vname;

    GetVarExprName(str, 256, fExpr);
    vname = GetNumberedAtom(str, index, 1, '$');
    return vname;
} // GenerateIndexeName

/*
 * ConcatStmts() - Concatenate two lists of statements.
 *
 */

stmt *ConcatStmts(stmt *first, stmt *last)
{
    stmt *lStmt;

    if (first) {
        if (last) {
            lStmt = first;
            while (lStmt->commonst.next)
                lStmt = lStmt->commonst.next;
            lStmt->commonst.next = last;
        }
        return first;
    } else {
        return last;
    }
} // ConcatStmts

/*
 * AppendStatements() - Append a list of statements to the end of another list.
 *
 */

void AppendStatements(StmtList *fStatements, stmt *fStmt)
{
    if (fStmt) {
        if (fStatements->first) {
            fStatements->last->commonst.next = fStmt;
        } else {
            fStatements->first = fStmt;
        }
        while (fStmt->commonst.next)
            fStmt = fStmt->commonst.next;
        fStatements->last = fStmt;
    }
} // AppendStatements

///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// Expression Functions ////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

/*
 * GenSymb() - Create a node that references a symbol.
 *
 */

expr *GenSymb(Symbol *fSymb)
{
    expr *lExpr;

    lExpr = (expr *) NewSymbNode(VARIABLE_OP, fSymb);
    return lExpr;
} // GenSymb

/*
 * GenMember() - Create a node that references a member of a struct or connector.
 *
 */

expr *GenMember(Symbol *fSymb)
{
    expr *lExpr;

    lExpr = (expr *) NewSymbNode(MEMBER_OP, fSymb);
    return lExpr;
} // GenMember

/*
 * GenMemberSelector() - Create a node that references a member of a struct or connector.
 *
 */

expr *GenMemberSelector(expr *sExpr, expr *mExpr)
{
    expr *lExpr;

    lExpr = (expr *) NewBinopNode(MEMBER_SELECTOR_OP, sExpr, mExpr);
    lExpr->common.type = mExpr->common.type;
    return lExpr;
} // GenMemberSelector

/*
 * GenMemberReference() - Build an expression to reference a member of a struct.
 *
 */

expr *GenMemberReference(expr *sExpr, Symbol *mSymb)
{
    expr *lExpr, *mExpr;

   // sExpr = (expr *) NewSymbNode(VARIABLE_OP, sSymb);
    mExpr = (expr *) NewSymbNode(MEMBER_OP, mSymb);
    lExpr = (expr *) NewBinopNode(MEMBER_SELECTOR_OP, sExpr, mExpr);
    lExpr->common.type = mExpr->common.type;
    lExpr->common.IsLValue = 1;
    lExpr->common.IsConst = (GetQualifiers(lExpr->common.type) & TYPE_QUALIFIER_CONST) != 0;
    return lExpr;
} // GenMemberReference

/*
 * GenVecIndex() - Create a vector index node.
 *
 */

expr *GenVecIndex(expr *vexpr, expr *xexpr, int base, int len, int len2)
{
    expr *lExpr;

    lExpr = (expr *) NewBinopNode(ARRAY_INDEX_OP, vexpr, xexpr);
    lExpr->bin.type = GetStandardType(base, 0, 0);
    return lExpr;
} // GenVecIndex

/*
 * GenMatIndex() - Create a matrix index node.
 *
 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆免费看| 亚洲国产毛片aaaaa无费看 | 一色桃子久久精品亚洲| 日韩欧美电影在线| 欧美精品一级二级| 欧美一区二区三区影视| 日韩欧美第一区| 久久久久久久久久久99999| 久久午夜电影网| 国产精品视频在线看| 亚洲三级在线免费| 亚洲午夜免费视频| 免费精品99久久国产综合精品| 国产福利一区在线| 国产一区二区三区蝌蚪| 成人av网在线| 欧美午夜精品理论片a级按摩| 欧美日韩精品电影| 精品久久久久久久久久久久久久久久久 | 欧美一区二区高清| 久久久国产综合精品女国产盗摄| 欧美国产一区在线| 一区二区三区色| 首页综合国产亚洲丝袜| 国产剧情一区在线| 色诱视频网站一区| 日韩一区二区不卡| 国产精品初高中害羞小美女文| 一区二区三区高清不卡| 蜜臀久久99精品久久久画质超高清| 美女一区二区在线观看| 国产成人av资源| 一本大道久久a久久综合婷婷| 欧美三级中文字| 久久精品一区二区三区不卡牛牛 | 久久久久久亚洲综合影院红桃 | 丰满白嫩尤物一区二区| 欧美日韩国产免费一区二区| 国产亚洲制服色| 亚洲一区二区三区四区在线免费观看 | 国产一区二区不卡老阿姨| 一本一道综合狠狠老| 欧美一个色资源| 亚洲欧洲日本在线| 久久成人羞羞网站| 欧美日韩三级视频| 欧美国产成人精品| 国产福利一区二区三区视频在线| 日本韩国欧美在线| 中文字幕+乱码+中文字幕一区| 午夜视频在线观看一区二区| 成人爱爱电影网址| 精品久久久久久久久久久久久久久| 亚洲精品国产无套在线观| 国产综合久久久久影院| 欧美久久久久久久久久| 亚洲精品日产精品乱码不卡| 国产馆精品极品| 精品国一区二区三区| 性做久久久久久久免费看| 色悠悠久久综合| 国产精品伦一区二区三级视频| 国产精品一区二区男女羞羞无遮挡| 9191精品国产综合久久久久久| 亚洲欧美视频在线观看视频| 丰满白嫩尤物一区二区| 国产亚洲欧洲997久久综合| 免费成人在线网站| 欧美一区在线视频| 五月婷婷色综合| 欧美色爱综合网| 午夜精品影院在线观看| 欧美在线一二三| 亚洲国产人成综合网站| 欧美日韩综合在线| 亚洲成人自拍网| 337p亚洲精品色噜噜| 午夜久久电影网| 日韩一区二区影院| 黄色日韩三级电影| 久久综合久久综合久久| 国产成人一区在线| 国产欧美日韩亚州综合| www.色精品| 亚洲欧美日韩国产综合| 欧美手机在线视频| 奇米四色…亚洲| 久久色.com| 99久精品国产| 亚洲成人免费观看| 精品国产人成亚洲区| 国产高清在线精品| 亚洲精品日韩综合观看成人91| 欧美少妇xxx| 美女精品自拍一二三四| 国产亚洲视频系列| 欧洲日韩一区二区三区| 视频一区二区三区在线| 欧美成人精品高清在线播放 | 日韩一区欧美小说| 欧美午夜精品一区二区三区| 久久国产综合精品| 中文字幕人成不卡一区| 91精品黄色片免费大全| 国产成人免费在线观看不卡| 成人欧美一区二区三区白人| 欧美丰满嫩嫩电影| 国产91色综合久久免费分享| 亚洲一区二区在线免费看| 精品裸体舞一区二区三区| 本田岬高潮一区二区三区| 亚洲成人av福利| 国产精品久久久久永久免费观看| 欧美色精品在线视频| 国产成人综合亚洲网站| 天堂影院一区二区| 国产女人18毛片水真多成人如厕 | 在线区一区二视频| 国产乱淫av一区二区三区 | 国产区在线观看成人精品| 欧美午夜理伦三级在线观看| 国产成人a级片| 美女视频黄久久| 午夜成人在线视频| 国产精品久久久久9999吃药| 亚洲精品在线免费观看视频| 91高清视频在线| 成人福利在线看| 国产在线国偷精品产拍免费yy| 午夜在线成人av| 亚洲综合一区二区精品导航| 中文字幕制服丝袜一区二区三区 | 一区二区在线观看不卡| 国产亚洲视频系列| www国产亚洲精品久久麻豆| 欧美日韩成人综合| 色婷婷久久久久swag精品 | 久久婷婷成人综合色| 7777精品伊人久久久大香线蕉完整版 | 日韩欧美第一区| 欧美一区二区在线观看| 在线免费不卡电影| 一本一本大道香蕉久在线精品| 国产资源在线一区| 久久99精品久久久久久| 另类人妖一区二区av| 人人超碰91尤物精品国产| 午夜激情一区二区三区| 婷婷成人激情在线网| 午夜久久福利影院| 日韩高清欧美激情| 日本美女一区二区| 久久精品国产一区二区三区免费看| 香蕉av福利精品导航| 日本伊人色综合网| 蜜乳av一区二区| 久久精工是国产品牌吗| 狠狠色狠狠色合久久伊人| 国产真实乱对白精彩久久| 黑人精品欧美一区二区蜜桃| 国产在线精品一区二区三区不卡 | 天堂久久一区二区三区| 天天综合色天天| 美女爽到高潮91| 国产在线精品免费av| 成人激情免费网站| 色婷婷久久综合| 欧美精三区欧美精三区| 日韩欧美国产麻豆| 日本一区二区三区四区在线视频| 国产精品久久久久四虎| 亚洲曰韩产成在线| 蜜桃一区二区三区在线观看| 国产电影一区二区三区| 色av成人天堂桃色av| 91精品国产色综合久久| 欧美精品一区二区三区蜜桃视频 | 日韩专区中文字幕一区二区| 美国毛片一区二区三区| 福利电影一区二区| 在线日韩一区二区| 精品久久久久久综合日本欧美| 国产精品拍天天在线| 亚洲第一会所有码转帖| 国产精品小仙女| 欧美日韩一区二区三区免费看| 日韩欧美国产wwwww| 亚洲伦理在线免费看| 裸体歌舞表演一区二区| 91欧美一区二区| 日韩精品一区二区三区中文不卡| 国产丝袜美腿一区二区三区| 天堂精品中文字幕在线| 成人综合在线网站| 91精品视频网| 亚洲精品国产第一综合99久久 | 欧美午夜精品久久久久久超碰 | 99久久综合99久久综合网站| 日韩一区二区三区av| 亚洲男女一区二区三区|