From 392fa4ab7e38f81f68e33b05e5cc82099a604754 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Thu, 25 Nov 2010 13:27:03 +0100
Subject: [PATCH] Process the basic types.

---
 src/libs/glsl/glslsemantic.cpp | 182 ++++++++++++++++++++++++++++++++-
 src/libs/glsl/tests/main.cpp   |   4 +
 2 files changed, 185 insertions(+), 1 deletion(-)

diff --git a/src/libs/glsl/glslsemantic.cpp b/src/libs/glsl/glslsemantic.cpp
index 4469acca8e5..3750893bdaf 100644
--- a/src/libs/glsl/glslsemantic.cpp
+++ b/src/libs/glsl/glslsemantic.cpp
@@ -29,6 +29,8 @@
 
 #include "glslsemantic.h"
 #include "glslengine.h"
+#include "glslparser.h"
+#include <QtCore/QDebug>
 
 using namespace GLSL;
 
@@ -262,7 +264,185 @@ bool Semantic::visit(DeclarationStatementAST *ast)
 // types
 bool Semantic::visit(BasicTypeAST *ast)
 {
-    Q_UNUSED(ast);
+    switch (ast->token) {
+    case Parser::T_VOID:
+        _type = _engine->voidType();
+        break;
+
+    case Parser::T_BOOL:
+        _type = _engine->boolType();
+        break;
+
+    case Parser::T_INT:
+        _type = _engine->intType();
+        break;
+
+    case Parser::T_UINT:
+        _type = _engine->uintType();
+        break;
+
+    case Parser::T_FLOAT:
+        _type = _engine->floatType();
+        break;
+
+    case Parser::T_DOUBLE:
+        _type = _engine->doubleType();
+        break;
+
+    // bvec
+    case Parser::T_BVEC2:
+        _type = _engine->vectorType(_engine->boolType(), 2);
+        break;
+
+    case Parser::T_BVEC3:
+        _type = _engine->vectorType(_engine->boolType(), 3);
+        break;
+
+    case Parser::T_BVEC4:
+        _type = _engine->vectorType(_engine->boolType(), 4);
+        break;
+
+    // ivec
+    case Parser::T_IVEC2:
+        _type = _engine->vectorType(_engine->intType(), 2);
+        break;
+
+    case Parser::T_IVEC3:
+        _type = _engine->vectorType(_engine->intType(), 3);
+        break;
+
+    case Parser::T_IVEC4:
+        _type = _engine->vectorType(_engine->intType(), 4);
+        break;
+
+    // uvec
+    case Parser::T_UVEC2:
+        _type = _engine->vectorType(_engine->uintType(), 2);
+        break;
+
+    case Parser::T_UVEC3:
+        _type = _engine->vectorType(_engine->uintType(), 3);
+        break;
+
+    case Parser::T_UVEC4:
+        _type = _engine->vectorType(_engine->uintType(), 4);
+        break;
+
+    // vec
+    case Parser::T_VEC2:
+        _type = _engine->vectorType(_engine->floatType(), 2);
+        break;
+
+    case Parser::T_VEC3:
+        _type = _engine->vectorType(_engine->floatType(), 3);
+        break;
+
+    case Parser::T_VEC4:
+        _type = _engine->vectorType(_engine->floatType(), 4);
+        break;
+
+    // dvec
+    case Parser::T_DVEC2:
+        _type = _engine->vectorType(_engine->doubleType(), 2);
+        break;
+
+    case Parser::T_DVEC3:
+        _type = _engine->vectorType(_engine->doubleType(), 3);
+        break;
+
+    case Parser::T_DVEC4:
+        _type = _engine->vectorType(_engine->doubleType(), 4);
+        break;
+
+    // mat2
+    case Parser::T_MAT2:
+    case Parser::T_MAT2X2:
+        _type = _engine->matrixType(_engine->floatType(), 2, 2);
+        break;
+
+    case Parser::T_MAT2X3:
+        _type = _engine->matrixType(_engine->floatType(), 2, 3);
+        break;
+
+    case Parser::T_MAT2X4:
+        _type = _engine->matrixType(_engine->floatType(), 2, 4);
+        break;
+
+    // mat3
+    case Parser::T_MAT3X2:
+        _type = _engine->matrixType(_engine->floatType(), 3, 2);
+        break;
+
+    case Parser::T_MAT3:
+    case Parser::T_MAT3X3:
+        _type = _engine->matrixType(_engine->floatType(), 3, 3);
+        break;
+
+    case Parser::T_MAT3X4:
+        _type = _engine->matrixType(_engine->floatType(), 3, 4);
+        break;
+
+    // mat4
+    case Parser::T_MAT4X2:
+        _type = _engine->matrixType(_engine->floatType(), 4, 2);
+        break;
+
+    case Parser::T_MAT4X3:
+        _type = _engine->matrixType(_engine->floatType(), 4, 3);
+        break;
+
+    case Parser::T_MAT4:
+    case Parser::T_MAT4X4:
+        _type = _engine->matrixType(_engine->floatType(), 4, 4);
+        break;
+
+
+    // dmat2
+    case Parser::T_DMAT2:
+    case Parser::T_DMAT2X2:
+        _type = _engine->matrixType(_engine->doubleType(), 2, 2);
+        break;
+
+    case Parser::T_DMAT2X3:
+        _type = _engine->matrixType(_engine->doubleType(), 2, 3);
+        break;
+
+    case Parser::T_DMAT2X4:
+        _type = _engine->matrixType(_engine->doubleType(), 2, 4);
+        break;
+
+    // dmat3
+    case Parser::T_DMAT3X2:
+        _type = _engine->matrixType(_engine->doubleType(), 3, 2);
+        break;
+
+    case Parser::T_DMAT3:
+    case Parser::T_DMAT3X3:
+        _type = _engine->matrixType(_engine->doubleType(), 3, 3);
+        break;
+
+    case Parser::T_DMAT3X4:
+        _type = _engine->matrixType(_engine->doubleType(), 3, 4);
+        break;
+
+    // dmat4
+    case Parser::T_DMAT4X2:
+        _type = _engine->matrixType(_engine->doubleType(), 4, 2);
+        break;
+
+    case Parser::T_DMAT4X3:
+        _type = _engine->matrixType(_engine->doubleType(), 4, 3);
+        break;
+
+    case Parser::T_DMAT4:
+    case Parser::T_DMAT4X4:
+        _type = _engine->matrixType(_engine->doubleType(), 4, 4);
+        break;
+
+    default:
+        qDebug() << "unknown type:" << GLSLParserTable::spell[ast->token];
+    }
+
     return false;
 }
 
diff --git a/src/libs/glsl/tests/main.cpp b/src/libs/glsl/tests/main.cpp
index e57179a7528..ff0df7ea453 100644
--- a/src/libs/glsl/tests/main.cpp
+++ b/src/libs/glsl/tests/main.cpp
@@ -3,6 +3,7 @@
 #include <glslparser.h>
 #include <glsllexer.h>
 #include <glslastdump.h>
+#include <glslsemantic.h>
 
 #include <QtCore/QTextStream>
 
@@ -81,6 +82,9 @@ int main(int argc, char *argv[])
     ASTDump dump(qout);
     dump(ast);
 
+    Semantic sem(&engine);
+    sem.translationUnit(ast);
+
     delete source;
     delete ast;
 
-- 
GitLab