summaryrefslogtreecommitdiff
path: root/src/libs/glsl/glslsemantic.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-11-29 18:16:44 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2010-11-29 18:16:44 +0100
commit945b25559d5d50b36c593890cff313239a361d46 (patch)
tree82f0ae85e89b9176e3a67a9c27f46df62a958003 /src/libs/glsl/glslsemantic.cpp
parent55234b9d16ab4da275bfa383d3a98869776bcb12 (diff)
downloadqt-creator-945b25559d5d50b36c593890cff313239a361d46.tar.gz
Evaluate member accesses.
Diffstat (limited to 'src/libs/glsl/glslsemantic.cpp')
-rw-r--r--src/libs/glsl/glslsemantic.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/libs/glsl/glslsemantic.cpp b/src/libs/glsl/glslsemantic.cpp
index 358e37b3e4..ec215fd584 100644
--- a/src/libs/glsl/glslsemantic.cpp
+++ b/src/libs/glsl/glslsemantic.cpp
@@ -248,7 +248,19 @@ bool Semantic::visit(AssignmentExpressionAST *ast)
bool Semantic::visit(MemberAccessExpressionAST *ast)
{
ExprResult expr = expression(ast->expr);
- // ast->field
+ if (expr.type && ast->field) {
+ if (const VectorType *vecTy = expr.type->asVectorType()) {
+ if (Symbol *s = vecTy->find(*ast->field)) {
+ _expr.type = s->type();
+ }
+ } else if (const Struct *structTy = expr.type->asStructType()) {
+ if (Symbol *s = structTy->find(*ast->field)) {
+ _expr.type = s->type();
+ }
+ } else {
+ // error(ast->lineno, QString("Requested for member `%1', in a non class or vec instance").arg(*ast->field));
+ }
+ }
return false;
}