Differences From
Artifact [bff3416286]:
48 48 end
49 49 terra ty:pdup(p: &lib.mem.pool): strptr
50 50 if not @self then return strptr.null() end
51 51 if self.ct == 0 then self.ct = m.sz(self.ptr) end
52 52 var newstr = p:alloc(int8, self.ct)
53 53 lib.mem.cpy(newstr.ptr, self.ptr, self.ct)
54 54 return newstr
55 + end
56 + terra ty:pcdup(p: &lib.mem.pool): rawstring
57 + if not @self then return nil end
58 + if self.ct == 0 then self.ct = m.sz(self.ptr) end
59 + var newstr = p:alloc(int8, self.ct + 1)
60 + lib.mem.cpy(newstr.ptr, self.ptr, self.ct)
61 + newstr.ptr[self.ct] = 0
62 + return newstr.ptr
63 + end
64 + terra ty:cdup(): rawstring
65 + if not @self then return nil end
66 + if self.ct == 0 then self.ct = m.sz(self.ptr) end
67 + var newstr = lib.mem.heapa(int8, self.ct + 1)
68 + lib.mem.cpy(newstr.ptr, self.ptr, self.ct)
69 + newstr.ptr[self.ct] = 0
70 + return newstr.ptr
55 71 end
56 72 terra ty:cmp(other: ty)
57 73 if self.ptr == nil and other.ptr == nil then return true end
58 74 if self.ptr == nil or other.ptr == nil then return false end
59 75
60 76 var sz = lib.math.biggest(self.ct, other.ct)
61 77 for i = 0, sz do