diff options
Diffstat (limited to 'chromium/v8/src/accessors.h')
-rw-r--r-- | chromium/v8/src/accessors.h | 165 |
1 files changed, 50 insertions, 115 deletions
diff --git a/chromium/v8/src/accessors.h b/chromium/v8/src/accessors.h index 723abd253a2..41993ea1c70 100644 --- a/chromium/v8/src/accessors.h +++ b/chromium/v8/src/accessors.h @@ -1,78 +1,64 @@ // Copyright 2012 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * 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. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT -// OWNER OR 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. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. #ifndef V8_ACCESSORS_H_ #define V8_ACCESSORS_H_ -#include "allocation.h" -#include "v8globals.h" +#include "src/allocation.h" +#include "src/globals.h" namespace v8 { namespace internal { // The list of accessor descriptors. This is a second-order macro // taking a macro to be applied to all accessor descriptor names. -#define ACCESSOR_DESCRIPTOR_LIST(V) \ - V(FunctionPrototype) \ - V(FunctionLength) \ - V(FunctionName) \ +#define ACCESSOR_INFO_LIST(V) \ + V(ArrayLength) \ V(FunctionArguments) \ V(FunctionCaller) \ - V(ArrayLength) \ - V(StringLength) \ - V(ScriptSource) \ - V(ScriptName) \ - V(ScriptId) \ - V(ScriptLineOffset) \ + V(FunctionName) \ + V(FunctionLength) \ + V(FunctionPrototype) \ V(ScriptColumnOffset) \ - V(ScriptData) \ - V(ScriptType) \ V(ScriptCompilationType) \ - V(ScriptLineEnds) \ V(ScriptContextData) \ V(ScriptEvalFromScript) \ V(ScriptEvalFromScriptPosition) \ - V(ScriptEvalFromFunctionName) + V(ScriptEvalFromFunctionName) \ + V(ScriptId) \ + V(ScriptLineEnds) \ + V(ScriptLineOffset) \ + V(ScriptName) \ + V(ScriptSource) \ + V(ScriptType) \ + V(StringLength) // Accessors contains all predefined proxy accessors. class Accessors : public AllStatic { public: // Accessor descriptors. -#define ACCESSOR_DESCRIPTOR_DECLARATION(name) \ - static const AccessorDescriptor name; - ACCESSOR_DESCRIPTOR_LIST(ACCESSOR_DESCRIPTOR_DECLARATION) -#undef ACCESSOR_DESCRIPTOR_DECLARATION +#define ACCESSOR_INFO_DECLARATION(name) \ + static void name##Getter( \ + v8::Local<v8::String> name, \ + const v8::PropertyCallbackInfo<v8::Value>& info); \ + static void name##Setter( \ + v8::Local<v8::String> name, \ + v8::Local<v8::Value> value, \ + const v8::PropertyCallbackInfo<void>& info); \ + static Handle<AccessorInfo> name##Info( \ + Isolate* isolate, \ + PropertyAttributes attributes); + ACCESSOR_INFO_LIST(ACCESSOR_INFO_DECLARATION) +#undef ACCESSOR_INFO_DECLARATION enum DescriptorId { -#define ACCESSOR_DESCRIPTOR_DECLARATION(name) \ - k##name, - ACCESSOR_DESCRIPTOR_LIST(ACCESSOR_DESCRIPTOR_DECLARATION) -#undef ACCESSOR_DESCRIPTOR_DECLARATION +#define ACCESSOR_INFO_DECLARATION(name) \ + k##name##Getter, \ + k##name##Setter, + ACCESSOR_INFO_LIST(ACCESSOR_INFO_DECLARATION) +#undef ACCESSOR_INFO_DECLARATION descriptorCount }; @@ -88,77 +74,26 @@ class Accessors : public AllStatic { // Returns true for properties that are accessors to object fields. // If true, *object_offset contains offset of object field. - static bool IsJSObjectFieldAccessor( - Handle<Map> map, Handle<String> name, - int* object_offset); + template <class T> + static bool IsJSObjectFieldAccessor(typename T::TypeHandle type, + Handle<String> name, + int* object_offset); + static Handle<AccessorInfo> MakeAccessor( + Isolate* isolate, + Handle<String> name, + AccessorGetterCallback getter, + AccessorSetterCallback setter, + PropertyAttributes attributes); - private: - // Accessor functions only used through the descriptor. - static MaybeObject* FunctionSetPrototype(Isolate* isolate, - JSObject* object, - Object*, - void*); - static MaybeObject* FunctionGetPrototype(Isolate* isolate, - Object* object, - void*); - static MaybeObject* FunctionGetLength(Isolate* isolate, - Object* object, - void*); - static MaybeObject* FunctionGetName(Isolate* isolate, Object* object, void*); - static MaybeObject* FunctionGetArguments(Isolate* isolate, - Object* object, - void*); - static MaybeObject* FunctionGetCaller(Isolate* isolate, - Object* object, - void*); - static MaybeObject* ArraySetLength(Isolate* isolate, - JSObject* object, - Object*, - void*); - static MaybeObject* ArrayGetLength(Isolate* isolate, Object* object, void*); - static MaybeObject* StringGetLength(Isolate* isolate, Object* object, void*); - static MaybeObject* ScriptGetName(Isolate* isolate, Object* object, void*); - static MaybeObject* ScriptGetId(Isolate* isolate, Object* object, void*); - static MaybeObject* ScriptGetSource(Isolate* isolate, Object* object, void*); - static MaybeObject* ScriptGetLineOffset(Isolate* isolate, - Object* object, - void*); - static MaybeObject* ScriptGetColumnOffset(Isolate* isolate, - Object* object, - void*); - static MaybeObject* ScriptGetData(Isolate* isolate, Object* object, void*); - static MaybeObject* ScriptGetType(Isolate* isolate, Object* object, void*); - static MaybeObject* ScriptGetCompilationType(Isolate* isolate, - Object* object, - void*); - static MaybeObject* ScriptGetLineEnds(Isolate* isolate, - Object* object, - void*); - static MaybeObject* ScriptGetContextData(Isolate* isolate, - Object* object, - void*); - static MaybeObject* ScriptGetEvalFromScript(Isolate* isolate, - Object* object, - void*); - static MaybeObject* ScriptGetEvalFromScriptPosition(Isolate* isolate, - Object* object, - void*); - static MaybeObject* ScriptGetEvalFromFunctionName(Isolate* isolate, - Object* object, - void*); + static Handle<ExecutableAccessorInfo> CloneAccessor( + Isolate* isolate, + Handle<ExecutableAccessorInfo> accessor); + + private: // Helper functions. static Handle<Object> FlattenNumber(Isolate* isolate, Handle<Object> value); - static MaybeObject* IllegalSetter(Isolate* isolate, - JSObject*, - Object*, - void*); - static Object* IllegalGetAccessor(Isolate* isolate, Object* object, void*); - static MaybeObject* ReadOnlySetAccessor(Isolate* isolate, - JSObject*, - Object* value, - void*); }; } } // namespace v8::internal |