]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/parser.cpp
Slightly refactor layout qualifiers in the GLSL parser
[libs/gl.git] / source / glsl / parser.cpp
index ec6ce6eb5e28bb060050e25121196e3e262a8f4d..4b6bd7ed08992271f5ba73318a253b8a4ec2d6ab 100644 (file)
@@ -1,5 +1,6 @@
 #include <msp/strings/format.h>
 #include <msp/strings/regex.h>
+#include <msp/strings/utils.h>
 #include "glsl_error.h"
 #include "parser.h"
 
@@ -118,6 +119,14 @@ string Parser::expect_identifier()
        return token;
 }
 
+int Parser::expect_integer()
+{
+       string token = tokenizer.parse_token();
+       if(!isnumrc(token))
+               throw parse_error(tokenizer.get_location(), token, "an integer literal");
+       return lexical_cast<int>(token);
+}
+
 bool Parser::check(const string &token)
 {
        bool result = (tokenizer.peek_token()==token);
@@ -315,10 +324,10 @@ RefPtr<Layout> Parser::parse_layout()
 
                layout->qualifiers.push_back(Layout::Qualifier());
                Layout::Qualifier &qual = layout->qualifiers.back();
-               qual.identifier = token;
+               qual.name = token;
 
-               if(check("="))
-                       qual.value = tokenizer.parse_token();
+               if((qual.has_value = check("=")))
+                       qual.value = expect_integer();
 
                if(tokenizer.peek_token()==")")
                        break;