dvander@54: /* vim: set ts=4 sw=4 tw=99 et: dvander@54: * dvander@54: * Copyright (C) 2012 David Anderson dvander@54: * dvander@54: * This file is part of JITCraft. dvander@54: * dvander@54: * JITCraft is free software: you can redistribute it and/or modify it under dvander@54: * the terms of the GNU General Public License as published by the Free dvander@54: * Software Foundation, either version 3 of the License, or (at your option) dvander@54: * any later version. dvander@54: * dvander@54: * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY dvander@54: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@54: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@54: * dvander@54: * You should have received a copy of the GNU General Public License along with dvander@54: * JITCraft. If not, see http://www.gnu.org/licenses/. dvander@54: */ danderson@91: #include dvander@54: #include "Strings.h" dvander@54: #include "Zone.h" dvander@54: #include "Heap-inl.h" dvander@54: dvander@59: using namespace ke; dvander@54: dvander@54: String * dvander@54: String::New(Zone *zone, const char *from, Heap::Tenure tenure) dvander@54: { dvander@54: return New(zone, from, strlen(from), tenure); dvander@54: } dvander@54: dvander@54: String * dvander@54: String::New(Zone *zone, const char *from, size_t length, Heap::Tenure tenure) dvander@54: { dvander@54: size_t bytes = SizeFor(length); dvander@54: Local string(zone, String::cast(zone->allocate(MapKind_String, bytes, tenure))); dvander@54: if (!string) dvander@54: return NULL; dvander@54: dvander@54: string->length_ = length; dvander@54: memcpy(string->chars(), from, length + 1); dvander@54: dvander@54: return string; dvander@54: }