Lines Matching defs:expr
237 bool visit(Expression& expr, Analysis::AssignmentInfo* info) {
239 this->visitExpression(expr);
246 void visitExpression(Expression& expr) {
247 switch (expr.kind()) {
249 VariableReference& varRef = expr.as<VariableReference>();
252 fErrors->error(expr.fLine,
261 this->visitExpression(*expr.as<FieldAccess>().base());
265 const Swizzle& swizzle = expr.as<Swizzle>();
271 this->visitExpression(*expr.as<IndexExpression>().base());
278 fErrors->error(expr.fLine, "cannot assign to this expression");
384 bool Analysis::IsAssignable(Expression& expr, AssignmentInfo* info, ErrorReporter* errors) {
386 return IsAssignableVisitor{errors ? errors : &trivialErrors}.visit(expr, info);
389 bool Analysis::UpdateVariableRefKind(Expression* expr,
393 if (!Analysis::IsAssignable(*expr, &info, errors)) {
398 errors->error(expr->fLine, "can't assign to expression '" + expr->description() + "'");
406 bool Analysis::IsTrivialExpression(const Expression& expr) {
407 return expr.is<Literal>() ||
408 expr.is<VariableReference>() ||
409 (expr.is<Swizzle>() &&
410 IsTrivialExpression(*expr.as<Swizzle>().base())) ||
411 (expr.is<FieldAccess>() &&
412 IsTrivialExpression(*expr.as<FieldAccess>().base())) ||
413 (expr.isAnyConstructor() &&
414 expr.asAnyConstructor().argumentSpan().size() == 1 &&
415 IsTrivialExpression(*expr.asAnyConstructor().argumentSpan().front())) ||
416 (expr.isAnyConstructor() &&
417 expr.isConstantOrUniform()) ||
418 (expr.is<IndexExpression>() &&
419 expr.as<IndexExpression>().index()->isIntLiteral() &&
420 IsTrivialExpression(*expr.as<IndexExpression>().base()));
573 bool visitExpression(const Expression& expr) override {
574 switch (expr.kind()) {
576 const FunctionDeclaration& decl = expr.as<FunctionCall>().function();
578 fContext.fErrors->error(expr.fLine, "function '" + decl.description() +
587 SkDEBUGFAIL("invalid reference-expr, should have been reported by coerce()");
588 fContext.fErrors->error(expr.fLine, "invalid expression");
591 if (expr.type() == *fContext.fTypes.fInvalid) {
592 fContext.fErrors->error(expr.fLine, "invalid expression");
596 return INHERITED::visitExpression(expr);