+void Preprocessor::preprocess_line()
+{
+ tokenizer.expect("line");
+ unsigned line_number = lexical_cast<unsigned>(tokenizer.parse_token());
+
+ int source_index = -1;
+ string token = tokenizer.parse_token();
+ if(!token.empty())
+ source_index = lexical_cast<unsigned>(token);
+
+ token = tokenizer.parse_token();
+ if(!token.empty())
+ throw parse_error(tokenizer.get_location(), token, "end of line");
+
+ signal_line.emit(source_index, line_number);
+}
+