From: Mark Thom Date: Sun, 5 Apr 2020 08:55:30 +0000 (-0600) Subject: allocate empty partial strings X-Git-Tag: v0.8.119~27 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=c8855f97e8eff899315910858a630b8d3f4af7f4;p=scryer-prolog.git allocate empty partial strings --- 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)> {