(
&self,
obj: *mut tk_sys::Tcl_Obj,
vm: &VirtualMachine,
)
| 227 | } |
| 228 | |
| 229 | fn unicode_from_object( |
| 230 | &self, |
| 231 | obj: *mut tk_sys::Tcl_Obj, |
| 232 | vm: &VirtualMachine, |
| 233 | ) -> PyResult<PyObjectRef> { |
| 234 | let type_ptr = unsafe { (*obj).typePtr }; |
| 235 | if !type_ptr.is_null() |
| 236 | && !self.interpreter.is_null() |
| 237 | && (type_ptr == self.string_type || type_ptr == self.utf32_string_type) |
| 238 | { |
| 239 | let len = ptr::null_mut(); |
| 240 | let data = unsafe { tk_sys::Tcl_GetUnicodeFromObj(obj, len) }; |
| 241 | return if size_of::<tk_sys::Tcl_UniChar>() == 2 { |
| 242 | let v = unsafe { std::slice::from_raw_parts(data as *const u16, len as usize) }; |
| 243 | let s = String::from_utf16(v).unwrap(); |
| 244 | Ok(PyObjectRef::from(vm.ctx.new_str(s))) |
| 245 | } else { |
| 246 | let v = unsafe { std::slice::from_raw_parts(data as *const u32, len as usize) }; |
| 247 | let s = widestring::U32String::from_vec(v).to_string_lossy(); |
| 248 | Ok(PyObjectRef::from(vm.ctx.new_str(s))) |
| 249 | }; |
| 250 | } |
| 251 | let len = ptr::null_mut(); |
| 252 | let s = unsafe { tk_sys::Tcl_GetStringFromObj(obj, len) }; |
| 253 | Self::unicode_from_string(s, len as _, vm) |
| 254 | } |
| 255 | |
| 256 | fn var_invoke(&self) { |
| 257 | if self.threaded && self.thread_id != Some(unsafe { tk_sys::Tcl_GetCurrentThread() }) { |
no test coverage detected