1659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without 343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met: 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions of source code must retain the above copyright 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// notice, this list of conditions and the following disclaimer. 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions in binary form must reproduce the above 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// copyright notice, this list of conditions and the following 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// disclaimer in the documentation and/or other materials provided 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// with the distribution. 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Neither the name of Google Inc. nor the names of its 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// contributors may be used to endorse or promote products derived 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// from this software without specific prior written permission. 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifndef V8_ACCESSORS_H_ 2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define V8_ACCESSORS_H_ 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 311c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org#include "allocation.h" 32659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org#include "v8globals.h" 331c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org 3471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 3571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// The list of accessor descriptors. This is a second-order macro 3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// taking a macro to be applied to all accessor descriptor names. 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define ACCESSOR_DESCRIPTOR_LIST(V) \ 40e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(FunctionPrototype) \ 41e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(FunctionLength) \ 42e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(FunctionName) \ 43e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(FunctionArguments) \ 44e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(FunctionCaller) \ 45e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ArrayLength) \ 46e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(StringLength) \ 47e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptSource) \ 48e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptName) \ 49e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptId) \ 50e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptLineOffset) \ 51e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptColumnOffset) \ 52e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptData) \ 53e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptType) \ 54e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptCompilationType) \ 55e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptLineEnds) \ 56e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org V(ScriptContextData) \ 579818059c4eaba109c3ab9b45f9608d938872d75csgjesse@chromium.org V(ScriptEvalFromScript) \ 589818059c4eaba109c3ab9b45f9608d938872d75csgjesse@chromium.org V(ScriptEvalFromScriptPosition) \ 59e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org V(ScriptEvalFromFunctionName) 6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 619a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Accessors contains all predefined proxy accessors. 6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Accessors : public AllStatic { 6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 6543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Accessor descriptors. 6643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define ACCESSOR_DESCRIPTOR_DECLARATION(name) \ 6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static const AccessorDescriptor name; 6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESSOR_DESCRIPTOR_LIST(ACCESSOR_DESCRIPTOR_DECLARATION) 6943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef ACCESSOR_DESCRIPTOR_DECLARATION 7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen enum DescriptorId { 7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define ACCESSOR_DESCRIPTOR_DECLARATION(name) \ 7343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen k##name, 7443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESSOR_DESCRIPTOR_LIST(ACCESSOR_DESCRIPTOR_DECLARATION) 7543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef ACCESSOR_DESCRIPTOR_DECLARATION 7643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen descriptorCount 7743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 7843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Accessor functions called directly from the runtime system. 8077ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.org static Handle<Object> FunctionGetPrototype(Handle<Object> object); 81ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org static Handle<Object> FunctionGetArguments(Handle<Object> object); 8277ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.org 83303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org MUST_USE_RESULT static MaybeObject* FunctionSetPrototype(JSObject* object, 84a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org Object* value, 85a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org void*); 86a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 8781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org // Accessor infos. 8881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org static Handle<AccessorInfo> MakeModuleExport( 8981cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org Handle<String> name, int index, PropertyAttributes attributes); 9081cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Accessor functions only used through the descriptor. 93ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org static MaybeObject* FunctionGetPrototype(Object* object, void*); 94303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* FunctionGetLength(Object* object, void*); 95303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* FunctionGetName(Object* object, void*); 96ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org static MaybeObject* FunctionGetArguments(Object* object, void*); 97303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* FunctionGetCaller(Object* object, void*); 98303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org MUST_USE_RESULT static MaybeObject* ArraySetLength(JSObject* object, 99303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org Object* value, void*); 100303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ArrayGetLength(Object* object, void*); 101303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* StringGetLength(Object* object, void*); 102303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetName(Object* object, void*); 103303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetId(Object* object, void*); 104303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetSource(Object* object, void*); 105303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetLineOffset(Object* object, void*); 106303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetColumnOffset(Object* object, void*); 107303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetData(Object* object, void*); 108303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetType(Object* object, void*); 109303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetCompilationType(Object* object, void*); 110303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetLineEnds(Object* object, void*); 111303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetContextData(Object* object, void*); 112303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetEvalFromScript(Object* object, void*); 113303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetEvalFromScriptPosition(Object* object, void*); 114303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ScriptGetEvalFromFunctionName(Object* object, void*); 11543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Helper functions. 11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Object* FlattenNumber(Object* value); 118303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* IllegalSetter(JSObject*, Object*, void*); 11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Object* IllegalGetAccessor(Object* object, void*); 120303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org static MaybeObject* ReadOnlySetAccessor(JSObject*, Object* value, void*); 12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} } // namespace v8::internal 12443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif // V8_ACCESSORS_H_ 126