[Bf-blender-cvs] [1e2efbc] master: Cycles OpenCL: use #line directives for better error messages.

Brecht Van Lommel noreply at git.blender.org
Sat Jul 30 18:26:33 CEST 2016


Commit: 1e2efbc908cfa97d433cb23998bacc39d66d9c93
Author: Brecht Van Lommel
Date:   Sat Jul 30 16:54:48 2016 +0200
Branches: master
https://developer.blender.org/rB1e2efbc908cfa97d433cb23998bacc39d66d9c93

Cycles OpenCL: use #line directives for better error messages.

===================================================================

M	intern/cycles/util/util_path.cpp
M	intern/cycles/util/util_string.cpp
M	intern/cycles/util/util_string.h

===================================================================

diff --git a/intern/cycles/util/util_path.cpp b/intern/cycles/util/util_path.cpp
index 0c848be..800dfa2 100644
--- a/intern/cycles/util/util_path.cpp
+++ b/intern/cycles/util/util_path.cpp
@@ -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());
 					}
 				}
 			}
diff --git a/intern/cycles/util/util_string.cpp b/intern/cycles/util/util_string.cpp
index c1c5a6b..5594aa8 100644
--- a/intern/cycles/util/util_string.cpp
+++ b/intern/cycles/util/util_string.cpp
@@ -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);
 			}
diff --git a/intern/cycles/util/util_string.h b/intern/cycles/util/util_string.h
index d3b5248..7aeed96 100644
--- a/intern/cycles/util/util_string.h
+++ b/intern/cycles/util/util_string.h
@@ -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);




More information about the Bf-blender-cvs mailing list