Cycles OpenCL: use #line directives for better error messages.
This commit is contained in:
parent
6dc72b3ce6
commit
1e2efbc908
|
@ -737,7 +737,7 @@ string path_source_replace_includes(const string& source, const string& path)
|
|||
|
||||
string result = "";
|
||||
vector<string> lines;
|
||||
string_split(lines, source, "\n");
|
||||
string_split(lines, source, "\n", false);
|
||||
|
||||
for(size_t i = 0; i < lines.size(); ++i) {
|
||||
string line = lines[i];
|
||||
|
@ -760,6 +760,13 @@ string path_source_replace_includes(const string& source, const string& path)
|
|||
text, path_dirname(filepath));
|
||||
text = path_source_replace_includes(text, path);
|
||||
line = token.replace(0, n_end + 1, "\n" + text + "\n");
|
||||
|
||||
/* Line directives for better error messages. */
|
||||
line = string_printf("#line %d \"%s\"\n",
|
||||
(int)0, filepath.c_str())
|
||||
+ line
|
||||
+ string_printf("\n#line %d \"%s\"",
|
||||
(int)i, path.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,7 +74,10 @@ bool string_iequals(const string& a, const string& b)
|
|||
return false;
|
||||
}
|
||||
|
||||
void string_split(vector<string>& tokens, const string& str, const string& separators)
|
||||
void string_split(vector<string>& tokens,
|
||||
const string& str,
|
||||
const string& separators,
|
||||
bool skip_empty_tokens)
|
||||
{
|
||||
size_t token_start = 0, token_length = 0;
|
||||
for(size_t i = 0; i < str.size(); ++i) {
|
||||
|
@ -87,9 +90,9 @@ void string_split(vector<string>& tokens, const string& str, const string& separ
|
|||
}
|
||||
else {
|
||||
/* Current character is a separator,
|
||||
* append current token to the list (if token is not empty).
|
||||
* append current token to the list.
|
||||
*/
|
||||
if(token_length > 0) {
|
||||
if(!skip_empty_tokens || token_length > 0) {
|
||||
string token = str.substr(token_start, token_length);
|
||||
tokens.push_back(token);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,10 @@ using std::istringstream;
|
|||
string string_printf(const char *format, ...) PRINTF_ATTRIBUTE;
|
||||
|
||||
bool string_iequals(const string& a, const string& b);
|
||||
void string_split(vector<string>& tokens, const string& str, const string& separators = "\t ");
|
||||
void string_split(vector<string>& tokens,
|
||||
const string& str,
|
||||
const string& separators = "\t ",
|
||||
bool skip_empty_tokens = true);
|
||||
void string_replace(string& haystack, const string& needle, const string& other);
|
||||
bool string_startswith(const string& s, const char *start);
|
||||
bool string_endswith(const string& s, const char *end);
|
||||
|
|
Loading…
Reference in New Issue