| Index: Source/bindings/v8/V8StringResource.cpp
|
| diff --git a/Source/bindings/v8/V8StringResource.cpp b/Source/bindings/v8/V8StringResource.cpp
|
| deleted file mode 100644
|
| index 3b76e8243f9690b5b0febf5fdbba85360db91d8d..0000000000000000000000000000000000000000
|
| --- a/Source/bindings/v8/V8StringResource.cpp
|
| +++ /dev/null
|
| @@ -1,178 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2009 Google Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
|
| - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
| - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
|
| - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
| - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
| - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
| - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
| - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
| - * THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "config.h"
|
| -#include "bindings/v8/V8StringResource.h"
|
| -
|
| -#include "bindings/v8/V8Binding.h"
|
| -#include "core/inspector/BindingVisitors.h"
|
| -#include "wtf/MainThread.h"
|
| -
|
| -namespace WebCore {
|
| -
|
| -template<class StringClass> struct StringTraits {
|
| - static const StringClass& fromStringResource(WebCoreStringResourceBase*);
|
| - template <typename V8StringTrait>
|
| - static StringClass fromV8String(v8::Handle<v8::String>, int);
|
| -};
|
| -
|
| -template<>
|
| -struct StringTraits<String> {
|
| - static const String& fromStringResource(WebCoreStringResourceBase* resource)
|
| - {
|
| - return resource->webcoreString();
|
| - }
|
| - template <typename V8StringTrait>
|
| - static String fromV8String(v8::Handle<v8::String>, int);
|
| -};
|
| -
|
| -template<>
|
| -struct StringTraits<AtomicString> {
|
| - static const AtomicString& fromStringResource(WebCoreStringResourceBase* resource)
|
| - {
|
| - return resource->atomicString();
|
| - }
|
| - template <typename V8StringTrait>
|
| - static AtomicString fromV8String(v8::Handle<v8::String>, int);
|
| -};
|
| -
|
| -struct V8StringTwoBytesTrait {
|
| - typedef UChar CharType;
|
| - ALWAYS_INLINE static void write(v8::Handle<v8::String> v8String, CharType* buffer, int length)
|
| - {
|
| - v8String->Write(reinterpret_cast<uint16_t*>(buffer), 0, length);
|
| - }
|
| -};
|
| -
|
| -struct V8StringOneByteTrait {
|
| - typedef LChar CharType;
|
| - ALWAYS_INLINE static void write(v8::Handle<v8::String> v8String, CharType* buffer, int length)
|
| - {
|
| - v8String->WriteOneByte(buffer, 0, length);
|
| - }
|
| -};
|
| -
|
| -template <typename V8StringTrait>
|
| -String StringTraits<String>::fromV8String(v8::Handle<v8::String> v8String, int length)
|
| -{
|
| - ASSERT(v8String->Length() == length);
|
| - typename V8StringTrait::CharType* buffer;
|
| - String result = String::createUninitialized(length, buffer);
|
| - V8StringTrait::write(v8String, buffer, length);
|
| - return result;
|
| -}
|
| -
|
| -template <typename V8StringTrait>
|
| -AtomicString StringTraits<AtomicString>::fromV8String(v8::Handle<v8::String> v8String, int length)
|
| -{
|
| - ASSERT(v8String->Length() == length);
|
| - static const int inlineBufferSize = 32 / sizeof(typename V8StringTrait::CharType);
|
| - if (length <= inlineBufferSize) {
|
| - typename V8StringTrait::CharType inlineBuffer[inlineBufferSize];
|
| - V8StringTrait::write(v8String, inlineBuffer, length);
|
| - return AtomicString(inlineBuffer, length);
|
| - }
|
| - typename V8StringTrait::CharType* buffer;
|
| - String string = String::createUninitialized(length, buffer);
|
| - V8StringTrait::write(v8String, buffer, length);
|
| - return AtomicString(string);
|
| -}
|
| -
|
| -template<typename StringType>
|
| -StringType v8StringToWebCoreString(v8::Handle<v8::String> v8String, ExternalMode external)
|
| -{
|
| - {
|
| - // This portion of this function is very hot in certain Dromeao benchmarks.
|
| - v8::String::Encoding encoding;
|
| - v8::String::ExternalStringResourceBase* resource = v8String->GetExternalStringResourceBase(&encoding);
|
| - if (LIKELY(!!resource)) {
|
| - WebCoreStringResourceBase* base;
|
| - if (encoding == v8::String::ONE_BYTE_ENCODING)
|
| - base = static_cast<WebCoreStringResource8*>(resource);
|
| - else
|
| - base = static_cast<WebCoreStringResource16*>(resource);
|
| - return StringTraits<StringType>::fromStringResource(base);
|
| - }
|
| - }
|
| -
|
| - int length = v8String->Length();
|
| - if (UNLIKELY(!length))
|
| - return StringType("");
|
| -
|
| - bool oneByte = v8String->ContainsOnlyOneByte();
|
| - StringType result(oneByte ? StringTraits<StringType>::template fromV8String<V8StringOneByteTrait>(v8String, length) : StringTraits<StringType>::template fromV8String<V8StringTwoBytesTrait>(v8String, length));
|
| -
|
| - if (external != Externalize || !v8String->CanMakeExternal())
|
| - return result;
|
| -
|
| - if (result.is8Bit()) {
|
| - WebCoreStringResource8* stringResource = new WebCoreStringResource8(result);
|
| - if (UNLIKELY(!v8String->MakeExternal(stringResource)))
|
| - delete stringResource;
|
| - } else {
|
| - WebCoreStringResource16* stringResource = new WebCoreStringResource16(result);
|
| - if (UNLIKELY(!v8String->MakeExternal(stringResource)))
|
| - delete stringResource;
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -// Explicitly instantiate the above template with the expected parameterizations,
|
| -// to ensure the compiler generates the code; otherwise link errors can result in GCC 4.4.
|
| -template String v8StringToWebCoreString<String>(v8::Handle<v8::String>, ExternalMode);
|
| -template AtomicString v8StringToWebCoreString<AtomicString>(v8::Handle<v8::String>, ExternalMode);
|
| -
|
| -// Fast but non thread-safe version.
|
| -String int32ToWebCoreStringFast(int value)
|
| -{
|
| - // Caching of small strings below is not thread safe: newly constructed AtomicString
|
| - // are not safely published.
|
| - ASSERT(isMainThread());
|
| -
|
| - // Most numbers used are <= 100. Even if they aren't used there's very little cost in using the space.
|
| - const int kLowNumbers = 100;
|
| - DEFINE_STATIC_LOCAL(Vector<AtomicString>, lowNumbers, (kLowNumbers + 1));
|
| - String webCoreString;
|
| - if (0 <= value && value <= kLowNumbers) {
|
| - webCoreString = lowNumbers[value];
|
| - if (!webCoreString) {
|
| - AtomicString valueString = AtomicString::number(value);
|
| - lowNumbers[value] = valueString;
|
| - webCoreString = valueString;
|
| - }
|
| - } else
|
| - webCoreString = String::number(value);
|
| - return webCoreString;
|
| -}
|
| -
|
| -String int32ToWebCoreString(int value)
|
| -{
|
| - // If we are on the main thread (this should always true for non-workers), call the faster one.
|
| - if (isMainThread())
|
| - return int32ToWebCoreStringFast(value);
|
| - return String::number(value);
|
| -}
|
| -
|
| -} // namespace WebCore
|
|
|