Date
1 - 3 of 3
Review: broken string ops (issue198076)
larry...@...
Reviewers: ,
Description: In several string ops, I used a local var that just told whether any of the arguments were varying, to determine whether to assign to just the first element of Result, or all of them. I should really have been checking whether Result itself was varying. They could differ because the adjust_varying(Result) will make it varying even if none of the args are varying, if the instruction is itself inside a varying conditional. Please review this at http://codereview.appspot.com/198076/show Affected files: src/liboslexec/opstring.cpp Index: src/liboslexec/opstring.cpp =================================================================== --- src/liboslexec/opstring.cpp (revision 563) +++ src/liboslexec/opstring.cpp (working copy) @@ -203,7 +203,7 @@ if (runflags[i]) { result[i] = format_args (exec, format[i].c_str(), nargs-2, args+2, i); - if (! varying) + if (! Result.is_varying()) break; } } @@ -232,7 +232,7 @@ if (runflags[i]) { result[i] = ustring (format_args (exec, format.c_str(), nargs-1, args+1, i)); - if (! varying) + if (! Result.is_varying()) break; } } @@ -348,7 +348,7 @@ b = Imath::clamp (b, 0, (int)str.length()); int len = Imath::clamp (length[i], 0, (int)str.length()); result[i] = ustring (s[i], b, len); - if (! varying) + if (! Result.is_varying()) break; } } @@ -411,7 +411,7 @@ result[i] = fullmatch ? regex_match (subject[i].c_str(), *regex) : regex_search (subject[i].c_str(), *regex); } - if (! varying) + if (! Result.is_varying()) break; } } |
|
cku...@...
LGTM!
You might want to hunt for this pattern in a few other places. get/setmessage come to mind http://codereview.appspot.com/198076/show |
|
larry...@...
I'm going to commit this ASAP and then hunt for other possible
occurrences. http://codereview.appspot.com/198076/show |
|