1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2009 Google Inc. All rights reserved. 38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#ifndef ScriptFunctionCall_h 328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#define ScriptFunctionCall_h 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "PlatformString.h" 358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "ScriptObject.h" 368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "ScriptState.h" 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <runtime/ArgList.h> 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace JSC { 415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian class UString; 425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian class JSValue; 435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian class ScriptValue; 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 48bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen class ScriptCallArgumentHandler { 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project public: 50bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptCallArgumentHandler(ScriptState* state) : m_exec(state) { } 518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void appendArgument(const ScriptObject&); 538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void appendArgument(const ScriptValue&); 548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void appendArgument(const String&); 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void appendArgument(const char*); 565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void appendArgument(const JSC::UString&); 575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void appendArgument(JSC::JSValue); 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void appendArgument(long); 595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void appendArgument(long long); 608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void appendArgument(unsigned int); 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void appendArgument(unsigned long); 625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void appendArgument(int); 638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void appendArgument(bool); 64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian protected: 665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian JSC::MarkedArgumentBuffer m_arguments; 67bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptState* m_exec; 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block private: 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // MarkedArgumentBuffer must be stack allocated, so prevent heap 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // alloc of ScriptFunctionCall as well. 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void* operator new(size_t) { ASSERT_NOT_REACHED(); return reinterpret_cast<void*>(0xbadbeef); } 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void* operator new[](size_t) { ASSERT_NOT_REACHED(); return reinterpret_cast<void*>(0xbadbeef); } 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project }; 75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 76bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen class ScriptFunctionCall : public ScriptCallArgumentHandler { 77bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen public: 78bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptFunctionCall(const ScriptObject& thisObject, const String& name); 79bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptValue call(bool& hadException, bool reportExceptions = true); 80bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptValue call(); 81bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptObject construct(bool& hadException, bool reportExceptions = true); 82bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 83bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen protected: 84bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptObject m_thisObject; 85bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen String m_name; 86bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }; 87bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 88bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen class ScriptCallback : public ScriptCallArgumentHandler { 89bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen public: 90bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptCallback(ScriptState*, ScriptValue); 91bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 92bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptValue call(); 93bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptValue call(bool& hadException); 94bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 95bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen private: 96bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ScriptValue m_function; 97bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }; 98bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace WebCore 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // ScriptFunctionCall 102