public static ObjString copyString(char[] chars, int _start, int length) { uint hash = hashString(chars, _start, length); ObjString interned = Table.tableFindString(ref VM.vm.strings, chars, _start, length, hash); if (interned != null) { return(interned); } char[] heapChars = Memory.ALLOCATE <char>(length + 1); Cfun._memcpy <char>(heapChars, chars, _start, length); heapChars[length] = '\0'; return(allocateString(heapChars, length, hash)); }
private static void concatenate() { ObjString b = Object.AS_STRING(peek(0)); ObjString a = Object.AS_STRING(peek(1)); int length = a.length + b.length; char[] chars = Memory.ALLOCATE <char>(length + 1); Cfun._memcpy <char>(chars, a.chars, a._start, a.length); Cfun._memcpy <char>(chars, a.length, b.chars, b._start, b.length); chars[length] = '\0'; ObjString result = Object.takeString(chars, 0, length); pop(); pop(); push(Value.OBJ_VAL(result)); }