Lines Matching refs:initializer
6684 // Enforce non-initializer type/qualifier rules.
6687 TIntermTyped*& initializer)
6690 // Make the qualifier make sense, given that there is an initializer.
6692 if (initializer == nullptr) {
6695 initializer = intermediate.makeAggregate(loc);
7700 // Returns a subtree node that computes an initializer, if needed.
7707 TIntermTyped* initializer)
7716 // the initializer list is marked EvqConst at the top node, and remains so here. However:
7720 const bool nonConstInitializer = (initializer != nullptr && initializer->getQualifier().storage != EvqConst);
7728 fixConstInit(loc, identifier, type, initializer);
7775 if (initializer == nullptr)
7778 // Deal with initializer
7781 error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
7784 return executeInitializer(loc, initializer, variable);
7850 // initializer, which will, for example, be the case for constant initializers.
7854 TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyped* initializer, TVariable* variable)
7863 // If the initializer was from braces { ... }, we convert the whole subtree to a
7868 // Type can't be deduced from the initializer list, so a skeletal type to
7875 if (initializer->getAsAggregate() && initializer->getAsAggregate()->getOp() == EOpNull)
7876 initializer = convertInitializerList(loc, skeletalType, initializer, nullptr);
7877 if (initializer == nullptr) {
7884 // Fix outer arrayness if variable is unsized, getting size from the initializer
7885 if (initializer->getType().isSizedArray() && variable->getType().isUnsizedArray())
7886 variable->getWritableType().changeOuterArraySize(initializer->getType().getOuterArraySize());
7888 // Inner arrayness can also get set by an initializer
7889 if (initializer->getType().isArrayOfArrays() && variable->getType().isArrayOfArrays() &&
7890 initializer->getType().getArraySizes()->getNumDims() ==
7892 // adopt unsized sizes from the initializer's sizes
7896 initializer->getType().getArraySizes()->getDimSize(d));
7901 // Uniform and global consts require a constant initializer
7902 if (qualifier == EvqUniform && initializer->getType().getQualifier().storage != EvqConst) {
7908 // Const variables require a constant initializer
7910 if (initializer->getType().getQualifier().storage != EvqConst) {
7919 initializer = intermediate.addConversion(EOpAssign, variable->getType(), initializer);
7920 if (initializer != nullptr && variable->getType() != initializer->getType())
7921 initializer = intermediate.addUniShapeConversion(EOpAssign, variable->getType(), initializer);
7922 if (initializer == nullptr || !initializer->getAsConstantUnion() ||
7923 variable->getType() != initializer->getType()) {
7924 error(loc, "non-matching or non-convertible constant type for const initializer",
7930 variable->setConstArray(initializer->getAsConstantUnion()->getConstArray());
7933 specializationCheck(loc, initializer->getType(), "initializer");
7935 TIntermNode* initNode = handleAssign(loc, EOpAssign, intermSymbol, initializer);
7937 assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString());
7945 // Reprocess any initializer-list { ... } parts of the initializer.
7948 // creating a constructor-style initializer, ensuring we get the
7951 // Returns a node representing an expression for the initializer list expressed
7957 TIntermTyped* initializer, TIntermTyped* scalarInit)
7960 // everything below it is already good: Only the "top part" of the initializer
7961 // can be an initializer list, where "top part" can extend for several (or all) levels.
7963 // see if we have bottomed out in the tree within the initializer-list part
7964 TIntermAggregate* initList = initializer->getAsAggregate();
7969 if (type.isScalar() || !initializer->getType().isScalar())
7970 return initializer;
7972 initList = intermediate.makeAggregate(initializer);
7975 // Of the initializer-list set of nodes, need to process bottom up,
7981 // Later on, initializer execution code will deal with array size logic.
7990 // set unsized array dimensions that can be derived from the initializer's first element
8019 error(loc, "cannot implicitly initialize opaque members", "initializer list", "");
8028 error(loc, "wrong number of structure members", "initializer list", "");
8047 error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str());
8064 error(loc, "wrong vector size (or rows in a matrix column):", "initializer list",
8073 error(loc, "scalar expected one element:", "initializer list", type.getCompleteString().c_str());
8077 error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str());
8082 // initializer list is a set of arguments to a constructor.
8097 // Alternatively, it could be a scalar initializer for a structure. Both cases are handled,