#include <msp/strings/format.h>
#include <msp/strings/regex.h>
+#include <msp/strings/utils.h>
#include "glsl_error.h"
#include "parser.h"
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);
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;