namespace GL {
namespace SL {
-Tokenizer::Tokenizer():
- allow_preprocess(true),
- suppress_line_advance(false)
+Tokenizer::Tokenizer()
{
static string empty;
iter = empty.begin();
source_end = empty.end();
}
-void Tokenizer::begin(const string &name, const string &src)
+void Tokenizer::begin(const string &src, const string &name)
{
iter = src.begin();
source_end = src.end();
{
SetForScope<deque<string> > clear_tokens(next_tokens, deque<string>());
- string::const_iterator line_end = iter;
+ auto line_end = iter;
for(; (line_end!=source_end && *line_end!='\n'); ++line_end) ;
SetForScope<string::const_iterator> stop_at_line_end(source_end, line_end);
}
bool require_digit = false;
- if(iter!=source_end && (*iter=='e' || *iter=='E'))
+ if(iter==source_end)
+ ;
+ else if(*iter=='e' || *iter=='E')
{
number += *iter++;
if(iter!=source_end && (*iter=='-' || *iter=='+'))
else
break;
}
+ if(!require_digit && iter!=source_end && *iter=='f')
+ number += *iter++;
}
+ else if(*iter=='u' || *iter=='f')
+ number += *iter++;
if(require_digit)
throw syntax_error(location, number, "Incomplete numeric literal");
- else if(isalnum(*iter) || *iter=='_')
+ else if(iter!=source_end && (isalnum(*iter) || *iter=='_'))
throw syntax_error(location, number, "Garbage at end of numeric literal");
return number;