def unsafe_string_interp? exp
if node_type? exp, :evstr
value = exp.value
else
value = exp
end
if not sexp? value
nil
elsif call? value and value.method == :to_s
unsafe_string_interp? value.target
elsif call? value and safe_literal_target? value
nil
else
case value.node_type
when :or
unsafe_string_interp?(value.lhs) || unsafe_string_interp?(value.rhs)
when :dstr
if dangerous = check_string_interp(value)
return dangerous
end
else
if safe_value? value
nil
elsif string_building? value
check_for_string_building value
else
value
end
end
end
end