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

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

?? support.c

?? nVidia開發的圖形語言 Cg
?? C
?? 第 1 頁 / 共 5 頁
字號:
    int DiffParamTypes, DiffParamQualifiers, DiffParamCount, DiffReturnType;
    TypeList *oldArgType, *newArgType;
    Symbol *lSymb;
    int index, group, OK;

    if (fSymb) {
        if (GetCategory(fSymb->type) != TYPE_CATEGORY_FUNCTION) {
            SemanticError(loc, ERROR_S_NAME_ALREADY_DEFINED, GetAtomString(atable, atom));
            lSymb = fSymb;
        } else {
            OK = 1;
            lSymb = fSymb;
            while (lSymb) {
                if (GetCategory(fSymb->type) != TYPE_CATEGORY_FUNCTION) {
                    InternalError(loc, ERROR_S_SYMBOL_TYPE_NOT_FUNCTION,
                                  GetAtomString(atable, lSymb->name));
                    return fSymb;
                }
                DiffParamTypes = DiffParamQualifiers = DiffParamCount = DiffReturnType = 0;
                if (!IsSameUnqualifiedType(lSymb->type->fun.rettype, fType->fun.rettype))
                    DiffReturnType = 1;
                oldArgType = lSymb->type->fun.paramtypes;
                newArgType = fType->fun.paramtypes;
                while (newArgType && oldArgType) {
                    if (!IsSameUnqualifiedType(oldArgType->type, newArgType->type)) {
                        DiffParamTypes = 1;
                    } else if (GetQualifiers(oldArgType->type) != GetQualifiers(newArgType->type)) {
                        DiffParamQualifiers = 1;
                    }
                    oldArgType = oldArgType->next;
                    newArgType = newArgType->next;
                }
                if (newArgType || oldArgType)
                    DiffParamCount = 1;
                if (!DiffParamCount && !DiffParamTypes) {
                    if (DiffParamQualifiers) {
                        SemanticError(loc, ERROR_S_OVERLOAD_DIFF_ONLY_QUALS,
                                      GetAtomString(atable, atom));
                        OK = 0;
                        break;
                    }
                    if (DiffReturnType) {
                        SemanticError(loc, ERROR_S_OVERLOAD_DIFF_ONLY_RETURN,
                                      GetAtomString(atable, atom));
                        OK = 0;
                        break;
                    }
                    break; // Found the matching function
                }
                lSymb = lSymb->details.fun.overload;
            }
            if (OK) {
                if (DiffParamCount || DiffParamTypes) {
                    lSymb = NewSymbol(loc, fScope, atom, fType, FUNCTION_S);
                    lSymb->details.fun.params = params;
                    lSymb->details.fun.locals = locals;
                    lSymb->details.fun.overload = fSymb->details.fun.overload;
                    fSymb->details.fun.overload = lSymb;
                    if (GetCategory(fType) == TYPE_CATEGORY_FUNCTION) {
                        locals->returnType = fType->fun.rettype;
                    } else {
                        locals->returnType = UndefinedType;
                    }
                } else {
                    if (!(lSymb->properties & SYMB_IS_DEFINED)) {
                        // Overwrite previous definitions if this function is not yet defined.
                        // Prototype parameter names are ignored.
                        lSymb->details.fun.params = params;
                        lSymb->details.fun.locals = locals;
                    } else {
                        // Declarator for a function that's already been defined.  Not an error.
                    }
                }
            } else {
                // Found a function that differs only by qualifiers or return type.  Error arleady issued.
                // lSymb = fSymb;
            }
        }
    } else {
        lSymb = AddSymbol(loc, fScope, atom, fType, FUNCTION_S);
        lSymb->details.fun.params = params;
        lSymb->details.fun.locals = locals;
        if (GetCategory(fType) == TYPE_CATEGORY_FUNCTION) {
            locals->returnType = fType->fun.rettype;
        } else {
            locals->returnType = UndefinedType;
        }
    }
    if (lSymb->type->properties & TYPE_MISC_INTERNAL) {
        index = Cg->theHAL->CheckInternalFunction(lSymb, &group);
        if (index) {
            //
            // lSymb->InternalIndex = index; etc.
            //
            lSymb->properties |= SYMB_IS_DEFINED | SYMB_IS_BUILTIN;
            lSymb->details.fun.group = group;
            lSymb->details.fun.index = index;
        } else {
            SemanticError(loc, ERROR_S_INVALID_INTERNAL_FUNCTION, GetAtomString(atable, atom));
        }
    }

    return lSymb;
} // DeclareFunc

/*
 * DefineFunction() - Set the body of the function "func" to the statements in "body".
 *
 */

void DefineFunction(SourceLoc *loc, Scope *fScope, decl *func, stmt *body)
{
    Symbol *lSymb = func->symb;
    SymbolList *lSymbList;
    Scope *globals;
    Type *lType;

    if (IsFunction(lSymb)) {
        if (body) {
            if (lSymb->properties & SYMB_IS_DEFINED) {
                SemanticError(loc, ERROR_S_FUN_ALREADY_DEFINED,
                              GetAtomString(atable, lSymb->name));
            } else {
                lSymb->properties |= SYMB_IS_DEFINED;
                lSymb->details.fun.statements = body;
                lType = lSymb->type;
                if ((lType->properties & TYPE_MISC_INLINE) ||
                    Cg->theHAL->GetCapsBit(CAPS_INLINE_ALL_FUNCTIONS))
                {
                    lSymb->properties |= SYMB_IS_INLINE_FUNCTION;
                }
            }
            if (!fScope->HasReturnStmt && !IsVoid(fScope->returnType)) {
                SemanticError(loc, ERROR_S_FUNCTION_HAS_NO_RETURN,
                              GetAtomString(atable, lSymb->name));
            }
            if (func->type.type.properties & TYPE_MISC_PROGRAM) {
                globals = fScope->parent;
                if (!globals->programs) {
                    lSymbList = (SymbolList *) malloc(sizeof(SymbolList));
                    lSymbList->next = globals->programs;
                    lSymbList->symb = lSymb;
                    globals->programs = lSymbList;
                } else {
                    SemanticError(loc, ERROR_S_ONE_PROGRAM,
                                  GetAtomString(atable, globals->programs->symb->name));
                }
            }
        } else {
            SemanticError(loc, ERROR_S_NO_STATEMENTS, GetAtomString(atable, func->name));
        }
        if (Cg->options.DumpParseTree) {
            PrintScopeDeclarations();
            PrintFunction(lSymb);
        }
    }
} // DefineFunction

/*
 * GlobalInitStatements()
 *
 */

int GlobalInitStatements(Scope *fScope, stmt *fStmt)
{
    stmt *lStmt;

    if (fStmt) {
        if (fScope->initStmts) {
            lStmt = fScope->initStmts;
            while (lStmt->commonst.next)
                lStmt = lStmt->commonst.next;
            lStmt->commonst.next = fStmt;
        } else {
            fScope->initStmts = fStmt;
        }
    }
    return 1;
} // GlobalInitStatements

/*
 * BasicVariable() - A variable identifier has been encountered.
 *
 */

expr *BasicVariable(SourceLoc *loc, int name)
{
    Symbol *lSymb;
    
    lSymb = LookUpSymbol(CurrentScope, name);
    if (!lSymb) {
        SemanticError(loc, ERROR_S_UNDEFINED_VAR, GetAtomString(atable, name));
        lSymb = DefineVar(loc, CurrentScope, name, UndefinedType);
    }
    return (expr *) NewSymbNode(VARIABLE_OP, lSymb);
} // BasicVariable

/*
 * IsLValue() - Is this expression an l-value?
 *
 */

int IsLValue(const expr *fExpr)
{
    if (fExpr) {
        return fExpr->common.IsLValue;
    } else {
        return 0;
    }
} // IsLValue

/*
 * IsConst() - Is this expression an l-value?
 *
 */

int IsConst(const expr *fExpr)
{
    if (fExpr) {
        return fExpr->common.IsConst;
    } else {
        return 0;
    }
} // IsConst

/*
 * IsArrayIndex() - Is this expression an array index expression?
 *
 */

int IsArrayIndex(const expr *fExpr)
{
    if (fExpr) {
        return fExpr->common.kind == BINARY_N && fExpr->bin.op == ARRAY_INDEX_OP;
    } else {
        return 0;
    }
} // IsArrayIndex

/*
 * lIsBaseCastValid() - Is it O.K. to cast the base type fromBase to toBase?
 *
 */

static int lIsBaseCastValid(int toBase, int fromBase, int Explicit)
{
    if (toBase == TYPE_BASE_NO_TYPE || fromBase == TYPE_BASE_NO_TYPE)
        return 0;
    if (toBase == TYPE_BASE_VOID || fromBase == TYPE_BASE_VOID)
        return 0;
    if (toBase == fromBase)
        return 1;
    if (Cg->theHAL->IsValidScalarCast(toBase, fromBase, Explicit)) {
        return 1;
    } else {
        return 0;
    }
} // lIsBaseCastValid

/*
 * ConvertType() - Type cast fExpr from fromType to toType if needed.  Ignore qualifiers.
 *
 * If "result" is NULL just check validity of cast; don't allocate cast operator node.
 *
 */

int ConvertType(expr *fExpr, Type *toType, Type *fromType, expr **result, int IgnorePacked, int Explicit)
{
    int fcategory, tcategory;
    int fbase, tbase;
    Type *feltype, *teltype;
    unary *unnode;
    int ToPacked, FromPacked;

    ToPacked = (toType->properties & TYPE_MISC_PACKED) != 0;
    FromPacked = (fromType->properties & TYPE_MISC_PACKED) != 0;
    if (IsSameUnqualifiedType(toType, fromType) &&
        ((ToPacked == FromPacked) || IgnorePacked))
    {
        if (result)
            *result = fExpr;
        return 1;
    } else {
        fcategory = GetCategory(fromType);
        tcategory = GetCategory(toType);
        if (fcategory == tcategory) {
            switch (fcategory) {
            case TYPE_CATEGORY_SCALAR:
                fbase = GetBase(fromType);
                tbase = GetBase(toType);
                if (lIsBaseCastValid(tbase, fbase, Explicit)) {
                    if (result) {
                        unnode = NewUnopSubNode(CAST_CS_OP, SUBOP_CS(tbase, fbase), fExpr);
                        unnode->type = GetStandardType(tbase, 0, 0);
                        unnode->HasSideEffects = fExpr->common.HasSideEffects;
                        *result = (expr *) unnode;
                    }
                    return 1;
                } else {
                    return 0;
                }
                break;
            case TYPE_CATEGORY_ARRAY:
                if (toType->arr.numels != fromType->arr.numels)
                    return 0;
                if (toType->arr.numels > 4)
                    return 0;
                if (!IgnorePacked && (ToPacked != FromPacked))
                    return 0;
                feltype = fromType->arr.eltype;
                teltype = toType->arr.eltype;
                fcategory = GetCategory(feltype);
                tcategory = GetCategory(teltype);
                if (tcategory != TYPE_CATEGORY_SCALAR || fcategory != TYPE_CATEGORY_SCALAR)
                    return 0;
                fbase = GetBase(feltype);
                tbase = GetBase(teltype);
                if (lIsBaseCastValid(tbase, fbase, Explicit)) {
                    if (result) {
                        unnode = NewUnopSubNode(CAST_CV_OP, SUBOP_CV(tbase, toType->arr.numels, fbase), fExpr);
                        unnode->type = GetStandardType(tbase, toType->arr.numels, 0);
                        unnode->HasSideEffects = fExpr->common.HasSideEffects;
                        *result = (expr *) unnode;
                    }
                    return 1;
                } else {
                    return 0;
                }
                break;
            default:
                return 0;
            }
        } else {
            return 0;
        }
    }
} // ConvertType

/*
 * CastScalarVectorMatrix() - Cast a scalar, vector, or matrix expression.
 *
 * Scalar: len = 0.
 * Vector: len >= 1 and len2 = 0
 * Matrix: len >= 1 and len2 >= 1
 *
 * len = 1 means "float f[1]" not "float f"
 *
 */

expr *CastScalarVectorMatrix(expr *fExpr, int fbase, int tbase, int len, int len2)
{
    int op, subop;
    expr *lExpr;

    if (len == 0) {
        op = CAST_CS_OP;
        subop = SUBOP_CS(tbase, fbase);
    } else if (len2 == 0) {
        op = CAST_CV_OP;
        subop = SUBOP_CV(tbase, len, fbase);
    } else {
        op = CAST_CM_OP;
        subop = SUBOP_CM(len2, tbase, len, fbase);
    }
    lExpr = (expr *) NewUnopSubNode(op, subop, fExpr);
    lExpr->common.type = GetStandardType(tbase, len, len2);
    return lExpr;
} // CastScalarVectorMatrix

/*
 * ConvertNumericOperands() - Convert two scalar, vector, or matrix expressions to the same type
 *         for use in an expression.  Number of dimensions and lengths may differ.
 *
 * Returns: base type of resulting values.
 *
 */

int ConvertNumericOperands(int baseop, expr **lExpr, expr **rexpr, int lbase, int rbase,
                           int llen, int rlen, int llen2, int rlen2)
{
    int nbase;

    nbase = Cg->theHAL->GetBinOpBase(baseop, lbase, rbase, llen, rlen);
    if (nbase != lbase)
        *lExpr = CastScalarVectorMatrix(*lExpr, lbase, nbase, llen, llen2);
    if (nbase != rbase)
        *rexpr = CastScalarVectorMatrix(*rexpr, rbase, nbase, rlen, rlen2);
    return nbase;
} // ConvertNumericOperands

/*
 * CheckBooleanExpr()
 *
 */

expr *CheckBooleanExpr(SourceLoc *loc, expr *fExpr, int AllowVector)
{
    int len = 0, HasError = 0;
    Type *lType, *leltype;

    lType = leltype = fExpr->common.type;
    if (IsScalar(lType)) {
        if (!IsBoolean(lType)) {
            SemanticError(loc, ERROR___BOOL_EXPR_EXPECTED);
            HasError = 1;
        }
    } else if (IsVector(lType, &len)) {
        leltype = lType->arr.eltype;
        if (AllowVector) {
            if (len > 4) {
                SemanticError(loc, ERROR___VECTOR_EXPR_LEN_GR_4);
                HasError = 1;
                len = 4;
            }
            if (!IsBoolean(lType)) {
                Semant

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av资源在线| 日韩欧美aaaaaa| 91麻豆精品国产91久久久 | 91久久精品国产91性色tv| 538prom精品视频线放| 国产精品国模大尺度视频| 久久精品999| 9191成人精品久久| 一区二区三区色| 成人h版在线观看| 国产日韩视频一区二区三区| 人禽交欧美网站| 欧美三日本三级三级在线播放| 国产精品天干天干在线综合| 麻豆成人在线观看| 欧美色图片你懂的| 国产精品二三区| 高潮精品一区videoshd| 精品久久99ma| 日韩高清一级片| 在线免费精品视频| 亚洲欧美日韩国产成人精品影院 | 午夜伦欧美伦电影理论片| www.欧美日韩国产在线| 久久久精品国产免大香伊| 久久精品免费看| 91精品国产麻豆国产自产在线| 亚洲图片欧美一区| 91成人国产精品| 一区二区在线观看视频| 99精品欧美一区| 亚洲视频网在线直播| 97久久精品人人做人人爽50路| 中文字幕第一区| k8久久久一区二区三区| 亚洲免费av高清| 色综合天天综合给合国产| 亚洲欧美在线另类| 91国偷自产一区二区三区观看| 亚洲精品视频一区二区| 欧美综合一区二区| 男女男精品视频网| 久久久www成人免费毛片麻豆| 国产精品一区专区| 国产精品素人视频| 在线观看亚洲a| 蜜臀av一区二区| 国产欧美一区二区精品秋霞影院| 高清av一区二区| 亚洲在线视频免费观看| 在线综合+亚洲+欧美中文字幕| 免费日韩伦理电影| 欧美国产成人在线| 在线精品亚洲一区二区不卡| 日本不卡视频在线观看| 久久人人97超碰com| jvid福利写真一区二区三区| 亚洲国产日韩一级| 精品国产污污免费网站入口 | 欧美日韩你懂的| 伦理电影国产精品| 国产精品入口麻豆九色| 欧美日韩一区不卡| 国产一区二区三区美女| 1000部国产精品成人观看| 欧美理论片在线| 国产东北露脸精品视频| 亚洲妇女屁股眼交7| 久久久亚洲精品石原莉奈| 欧美色网一区二区| 国产成人精品亚洲777人妖| 一区二区在线观看视频| 久久一夜天堂av一区二区三区| 一本到不卡免费一区二区| 毛片不卡一区二区| 亚洲黄色小视频| 欧美激情一区二区三区四区 | 成人h动漫精品一区二区 | 一区二区三区久久久| 精品成人免费观看| 欧美无砖专区一中文字| 国产精品一区在线| 青青青爽久久午夜综合久久午夜| 欧美极品aⅴ影院| 日韩一区二区在线看| 91视频com| 国产精品77777| 日本网站在线观看一区二区三区| 国产精品久久毛片av大全日韩| 日韩三级视频在线看| 欧美亚州韩日在线看免费版国语版| 国产精品资源在线看| 免费黄网站欧美| 一个色妞综合视频在线观看| 国产精品无遮挡| 久久综合中文字幕| 欧美日产在线观看| 欧美撒尿777hd撒尿| 色综合天天做天天爱| 99热在这里有精品免费| 粉嫩嫩av羞羞动漫久久久| 久久国内精品自在自线400部| 亚洲一二三四区| 一区二区视频在线| 中文字幕一区二区三区在线观看| 久久综合久色欧美综合狠狠| 91精品国产一区二区三区| 欧美放荡的少妇| 欧美三级一区二区| 欧美午夜免费电影| 欧美专区在线观看一区| 欧美综合久久久| 在线观看亚洲一区| 欧美色区777第一页| 日本韩国一区二区| 日本黄色一区二区| 色就色 综合激情| 91极品视觉盛宴| 欧美老年两性高潮| 在线不卡中文字幕| 日韩一区二区三区视频| 精品sm捆绑视频| 久久久亚洲高清| 国产精品少妇自拍| 18涩涩午夜精品.www| 亚洲精品乱码久久久久久久久| 亚洲品质自拍视频网站| 亚洲午夜一区二区| 日韩va欧美va亚洲va久久| 韩国女主播成人在线观看| 黄页网站大全一区二区| 成人听书哪个软件好| 91免费观看国产| 欧美日韩国产精选| 日韩免费高清视频| 国产亚洲欧美日韩日本| 国产精品久久一级| 亚洲午夜久久久久久久久电影网| 午夜精品久久久久久久久久久| 捆绑变态av一区二区三区| 国产69精品久久久久毛片| av网站一区二区三区| 欧美无乱码久久久免费午夜一区| 欧美一区二区久久| 国产精品乱码人人做人人爱| 亚洲免费在线视频| 卡一卡二国产精品| 色综合久久久久| 日韩精品一区二区三区在线 | 久久中文娱乐网| 一色桃子久久精品亚洲| 日韩精品成人一区二区三区 | 欧美日韩精品欧美日韩精品| 日韩欧美激情在线| 亚洲精品国产成人久久av盗摄| 免费观看久久久4p| 色香蕉久久蜜桃| 精品久久国产老人久久综合| 亚洲欧美二区三区| 韩国精品主播一区二区在线观看 | 国产一区二区精品在线观看| 99久久99久久久精品齐齐| 欧美日本韩国一区二区三区视频| 精品国产91乱码一区二区三区| 亚洲一二三区不卡| bt7086福利一区国产| 日韩视频一区二区三区| 亚洲免费资源在线播放| 国产不卡在线一区| 日韩三级免费观看| 亚洲成人动漫精品| 92精品国产成人观看免费| 久久久三级国产网站| 奇米影视一区二区三区| 91九色02白丝porn| 国产精品久久久久毛片软件| 国模套图日韩精品一区二区| 制服丝袜中文字幕亚洲| 亚洲黄一区二区三区| 丁香亚洲综合激情啪啪综合| 在线播放视频一区| 一区二区三区在线视频播放| 成人sese在线| 国产精品情趣视频| 国产麻豆视频一区二区| 精品国产精品一区二区夜夜嗨| 亚洲不卡av一区二区三区| 91在线精品秘密一区二区| 国产精品国产三级国产三级人妇 | 一二三四区精品视频| av福利精品导航| 国产女人水真多18毛片18精品视频| 男女视频一区二区| 日韩精品一区二区三区视频播放| 日日欢夜夜爽一区| 91精品一区二区三区在线观看| 亚洲成a人v欧美综合天堂 | 成人激情免费视频| 国产精品三级视频| 99久久免费国产|