From c8855f97e8eff899315910858a630b8d3f4af7f4 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 5 Apr 2020 02:55:30 -0600 Subject: [PATCH] allocate empty partial strings --- src/prolog/machine/partial_string.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/prolog/machine/partial_string.rs b/src/prolog/machine/partial_string.rs index 0a74ecff..02e1cf34 100644 --- a/src/prolog/machine/partial_string.rs +++ b/src/prolog/machine/partial_string.rs @@ -111,11 +111,25 @@ impl PartialString { #[inline] pub(super) fn empty() -> Self { - PartialString { - buf: &"\u{0}".as_bytes()[0] as *const _, - len: '\u{0}'.len_utf8(), + let mut pstr = PartialString { + buf: ptr::null(), + len: 0, _marker: PhantomData, + }; + + unsafe { + let layout = alloc::Layout::from_size_align_unchecked( + '\u{0}'.len_utf8(), + mem::align_of::(), + ); + + pstr.buf = alloc::alloc(layout) as *const _; + pstr.len = '\u{0}'.len_utf8(); + + pstr.write_terminator_at(0); } + + pstr } unsafe fn append_chars(mut self, src: &str) -> Option<(Self, &str)> { -- 2.54.0