/*
 * Copyright (c) 2016 Apple Inc. All rights reserved.
 * Copyright (c) 2016 Canon Inc.
 * 
 * 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.
 * 
 */

// DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for
// builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py

#pragma once

#if ENABLE(FETCH_API)

#include <builtins/BuiltinUtils.h>
#include <bytecode/UnlinkedFunctionExecutable.h>
#include <runtime/Identifier.h>
#include <runtime/JSFunction.h>

namespace JSC {
class FunctionExecutable;
}

namespace WebCore {

/* FetchResponse */
extern const char* s_fetchResponseInitializeFetchResponseCode;
extern const int s_fetchResponseInitializeFetchResponseCodeLength;
extern const JSC::ConstructAbility s_fetchResponseInitializeFetchResponseCodeConstructAbility;
extern const char* s_fetchResponseBodyUsedCode;
extern const int s_fetchResponseBodyUsedCodeLength;
extern const JSC::ConstructAbility s_fetchResponseBodyUsedCodeConstructAbility;
extern const char* s_fetchResponseBodyCode;
extern const int s_fetchResponseBodyCodeLength;
extern const JSC::ConstructAbility s_fetchResponseBodyCodeConstructAbility;
extern const char* s_fetchResponseCloneCode;
extern const int s_fetchResponseCloneCodeLength;
extern const JSC::ConstructAbility s_fetchResponseCloneCodeConstructAbility;
extern const char* s_fetchResponseArrayBufferCode;
extern const int s_fetchResponseArrayBufferCodeLength;
extern const JSC::ConstructAbility s_fetchResponseArrayBufferCodeConstructAbility;
extern const char* s_fetchResponseBlobCode;
extern const int s_fetchResponseBlobCodeLength;
extern const JSC::ConstructAbility s_fetchResponseBlobCodeConstructAbility;
extern const char* s_fetchResponseFormDataCode;
extern const int s_fetchResponseFormDataCodeLength;
extern const JSC::ConstructAbility s_fetchResponseFormDataCodeConstructAbility;
extern const char* s_fetchResponseJsonCode;
extern const int s_fetchResponseJsonCodeLength;
extern const JSC::ConstructAbility s_fetchResponseJsonCodeConstructAbility;
extern const char* s_fetchResponseTextCode;
extern const int s_fetchResponseTextCodeLength;
extern const JSC::ConstructAbility s_fetchResponseTextCodeConstructAbility;

#define WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_DATA(macro) \
    macro(initializeFetchResponse, fetchResponseInitializeFetchResponse, 2) \
    macro(bodyUsed, fetchResponseBodyUsed, 0) \
    macro(body, fetchResponseBody, 0) \
    macro(clone, fetchResponseClone, 0) \
    macro(arrayBuffer, fetchResponseArrayBuffer, 0) \
    macro(blob, fetchResponseBlob, 0) \
    macro(formData, fetchResponseFormData, 0) \
    macro(json, fetchResponseJson, 0) \
    macro(text, fetchResponseText, 0) \

#define WEBCORE_BUILTIN_FETCHRESPONSE_INITIALIZEFETCHRESPONSE 1
#define WEBCORE_BUILTIN_FETCHRESPONSE_BODYUSED 1
#define WEBCORE_BUILTIN_FETCHRESPONSE_BODY 1
#define WEBCORE_BUILTIN_FETCHRESPONSE_CLONE 1
#define WEBCORE_BUILTIN_FETCHRESPONSE_ARRAYBUFFER 1
#define WEBCORE_BUILTIN_FETCHRESPONSE_BLOB 1
#define WEBCORE_BUILTIN_FETCHRESPONSE_FORMDATA 1
#define WEBCORE_BUILTIN_FETCHRESPONSE_JSON 1
#define WEBCORE_BUILTIN_FETCHRESPONSE_TEXT 1

#define WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_CODE(macro) \
    macro(fetchResponseInitializeFetchResponseCode, initializeFetchResponse, s_fetchResponseInitializeFetchResponseCodeLength) \
    macro(fetchResponseBodyUsedCode, bodyUsed, s_fetchResponseBodyUsedCodeLength) \
    macro(fetchResponseBodyCode, body, s_fetchResponseBodyCodeLength) \
    macro(fetchResponseCloneCode, clone, s_fetchResponseCloneCodeLength) \
    macro(fetchResponseArrayBufferCode, arrayBuffer, s_fetchResponseArrayBufferCodeLength) \
    macro(fetchResponseBlobCode, blob, s_fetchResponseBlobCodeLength) \
    macro(fetchResponseFormDataCode, formData, s_fetchResponseFormDataCodeLength) \
    macro(fetchResponseJsonCode, json, s_fetchResponseJsonCodeLength) \
    macro(fetchResponseTextCode, text, s_fetchResponseTextCodeLength) \

#define WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_FUNCTION_NAME(macro) \
    macro(arrayBuffer) \
    macro(blob) \
    macro(body) \
    macro(bodyUsed) \
    macro(clone) \
    macro(formData) \
    macro(initializeFetchResponse) \
    macro(json) \
    macro(text) \

#define DECLARE_BUILTIN_GENERATOR(codeName, functionName, argumentCount) \
    JSC::FunctionExecutable* codeName##Generator(JSC::VM&);

WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_CODE(DECLARE_BUILTIN_GENERATOR)
#undef DECLARE_BUILTIN_GENERATOR

class FetchResponseBuiltinsWrapper : private JSC::WeakHandleOwner {
public:
    explicit FetchResponseBuiltinsWrapper(JSC::VM* vm)
        : m_vm(*vm)
        WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
        WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
#undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
    {
    }

#define EXPOSE_BUILTIN_EXECUTABLES(name, functionName, length) \
    JSC::UnlinkedFunctionExecutable* name##Executable(); \
    const JSC::SourceCode& name##Source() const { return m_##name##Source; }
    WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_CODE(EXPOSE_BUILTIN_EXECUTABLES)
#undef EXPOSE_BUILTIN_EXECUTABLES

    WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_FUNCTION_NAME(DECLARE_BUILTIN_IDENTIFIER_ACCESSOR)

    void exportNames();

private:
    JSC::VM& m_vm;

    WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_FUNCTION_NAME(DECLARE_BUILTIN_NAMES)

#define DECLARE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) \
    JSC::SourceCode m_##name##Source;\
    JSC::Weak<JSC::UnlinkedFunctionExecutable> m_##name##Executable;
    WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_CODE(DECLARE_BUILTIN_SOURCE_MEMBERS)
#undef DECLARE_BUILTIN_SOURCE_MEMBERS

};

#define DEFINE_BUILTIN_EXECUTABLES(name, functionName, length) \
inline JSC::UnlinkedFunctionExecutable* FetchResponseBuiltinsWrapper::name##Executable() \
{\
    if (!m_##name##Executable)\
        m_##name##Executable = JSC::Weak<JSC::UnlinkedFunctionExecutable>(JSC::createBuiltinExecutable(m_vm, m_##name##Source, functionName##PublicName(), s_##name##ConstructAbility), this, &m_##name##Executable);\
    return m_##name##Executable.get();\
}
WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_CODE(DEFINE_BUILTIN_EXECUTABLES)
#undef DEFINE_BUILTIN_EXECUTABLES

inline void FetchResponseBuiltinsWrapper::exportNames()
{
#define EXPORT_FUNCTION_NAME(name) m_vm.propertyNames->appendExternalName(name##PublicName(), name##PrivateName());
    WEBCORE_FOREACH_FETCHRESPONSE_BUILTIN_FUNCTION_NAME(EXPORT_FUNCTION_NAME)
#undef EXPORT_FUNCTION_NAME
}

} // namespace WebCore

#endif // ENABLE(FETCH_API)
