Lines Matching refs:var
20 return std::make_unique<VarDeclaration>(&this->var(),
27 String result = this->var().modifiers().description() + this->baseType().description() + " " +
28 this->var().name();
96 bool VarDeclaration::ErrorCheckAndCoerce(const Context& context, const Variable& var,
98 const Type* baseType = &var.type();
102 ErrorCheck(context, var.fLine, var.modifiers(), baseType, var.storage());
104 if (var.type().isOpaque()) {
106 "opaque type '" + var.type().name() + "' cannot use initializer expressions");
109 if (var.modifiers().fFlags & Modifiers::kIn_Flag) {
114 if (var.modifiers().fFlags & Modifiers::kUniform_Flag) {
119 if (var.storage() == Variable::Storage::kInterfaceBlock) {
124 value = var.type().coerceExpression(std::move(value), context);
129 if (var.modifiers().fFlags & Modifiers::kConst_Flag) {
131 context.fErrors->error(var.fLine, "'const' variables must be initialized");
140 if (var.storage() == Variable::Storage::kInterfaceBlock) {
141 if (var.type().isOpaque()) {
142 context.fErrors->error(var.fLine, "opaque type '" + var.type().name() +
147 if (var.storage() == Variable::Storage::kGlobal) {
158 std::unique_ptr<Variable> var, std::unique_ptr<Expression> value, bool addToSymbolTable) {
159 if (!ErrorCheckAndCoerce(context, *var, value)) {
162 const Type* baseType = &var->type();
168 std::unique_ptr<Statement> varDecl = VarDeclaration::Make(context, var.get(), baseType,
175 if ((var->storage() == Variable::Storage::kGlobal) && var->name() == Compiler::FRAGCOLOR_NAME) {
177 const Symbol* symbol = (*ThreadContext::SymbolTable())[var->name()];
181 } else if ((var->storage() == Variable::Storage::kGlobal ||
182 var->storage() == Variable::Storage::kInterfaceBlock) &&
183 var->name() == Compiler::RTADJUST_NAME) {
186 context.fErrors->error(var->fLine, "duplicate definition of 'sk_RTAdjust'");
189 if (var->type() != *context.fTypes.fFloat4) {
190 context.fErrors->error(var->fLine, "sk_RTAdjust must have type 'float4'");
193 ThreadContext::RTAdjustState().fVar = var.get();
197 ThreadContext::SymbolTable()->add(std::move(var));
199 ThreadContext::SymbolTable()->takeOwnershipOfSymbol(std::move(var));
204 std::unique_ptr<Statement> VarDeclaration::Make(const Context& context, Variable* var,
208 SkASSERT(var->storage() != Variable::Storage::kParameter);
210 SkASSERT(!(var->modifiers().fFlags & Modifiers::kConst_Flag) || value);
212 SkASSERT(!(var->modifiers().fFlags & Modifiers::kConst_Flag) ||
215 SkASSERT(!(value && var->storage() == Variable::Storage::kGlobal &&
218 SkASSERT(!(var->storage() == Variable::Storage::kInterfaceBlock && var->type().isOpaque()));
220 SkASSERT(!(var->storage() == Variable::Storage::kInterfaceBlock && value));
222 SkASSERT(!(value && var->type().isOpaque()));
224 SkASSERT(!(value && (var->modifiers().fFlags & Modifiers::kIn_Flag)));
226 SkASSERT(!(value && (var->modifiers().fFlags & Modifiers::kUniform_Flag)));
228 auto result = std::make_unique<VarDeclaration>(var, baseType, arraySize, std::move(value));
229 var->setDeclaration(result.get());