Пример #1
0
        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));
        }
Пример #2
0
        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));
        }