X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fparser.cpp;h=4b6bd7ed08992271f5ba73318a253b8a4ec2d6ab;hb=90c3973fcadf28e25797656154e42dd3d2915144;hp=7044a8c32f13452ca39df5f4a445cbaee5031ee6;hpb=1083ad150c902bd153f88f7fb28660b4f31cf9fe;p=libs%2Fgl.git diff --git a/source/glsl/parser.cpp b/source/glsl/parser.cpp index 7044a8c3..4b6bd7ed 100644 --- a/source/glsl/parser.cpp +++ b/source/glsl/parser.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "glsl_error.h" #include "parser.h" @@ -62,7 +63,7 @@ void Parser::parse_source(const string &name, unsigned index) void Parser::set_required_version(const Version &ver) { - cur_stage->required_version = ver; + cur_stage->required_features.glsl_version = ver; } void Parser::source_reference(unsigned index, const string &name) @@ -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(token); +} + bool Parser::check(const string &token) { bool result = (tokenizer.peek_token()==token); @@ -315,10 +324,10 @@ RefPtr 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;